[ English | English (United Kingdom) | français | Deutsch | 한국어 (대한민국) | русский | Indonesia ]

Пример Телеметрии с Gnocchi, Ceph и Redis

По умолчанию OpenStack-Ansible настраивает gnocchi на использование файла как хранилища данных. Когда у вас уже имеется предустановленный ceph, вы можете использовать его как бекенд для gnocchi. Данная документация предоставит инструкцию по использованию ceph, как хранилища данных для gnocchi.

Ceph, как хранилище метрик

gnocchi_storage_driver: ceph

Вам необходимо добавить несколько pip пакетов к вашей установке gnocchi:

gnocchi_pip_packages:
- cryptography
- gnocchiclient
# this is what we want:
#  - "gnocchi[mysql,ceph,ceph_alternative_lib,redis]"
# but as there is no librados >=12.2 pip package we have to first install ceph without alternative support
# after adding the ceph repo to gnocchi container, python-rados>=12.2.0 is installed and linked automatically
# and gnocchi will automatically take up the features present in the used rados lib.
- "gnocchi[mysql,ceph,redis]"
- keystonemiddleware
- python-memcached

Но когда ваша установка вырастет, gnocchi может замедлять или блокировать ваш ceph. Вы можете столкнуться с медленными запросами или заблокированными PG в ceph. Так как это может иметь несколько причин, взгляните на прикрепленные презентации в секции Тесты производительности для Gnocchi . Они также содержат различные параметры, которые вы можете захотеть оптимизировать.

Redis как хранилище метрик

Одно из решений возможных проблем с производительностью это использовать хранилище для входящих метрик для gnocchi. Поддерживаемые системы хранилищ :

  • Файл (по умолчанию)

  • Ceph (рекомендован)

  • OpenStack Swift

  • Amazon S3

  • Redis

Когда Swift использует Ceph как бекенд, единственный оставшийся вариант для данной установки это Redis.

Сначала произведите установку сервера/кластера redis, например при помощи данной ansible роли. Далее вам необходимо настроить Gnocchi с openStack-Ansible на использования кластера Redis в качестве хранилища для входящих метрик:

gnocchi_conf_overrides:
  incoming:
    driver: redis
    redis_url: redis://{{ hostvars[groups['redis-master'][0]]['ansible_default_ipv4']['address'] }}:{{ hostvars[groups['redis-master'][0]]['redis_sentinel_port'] }}?sentinel=master01{% for host in groups['redis-slave'] %}&sentinel_fallback={{ hostvars[host]['ansible_default_ipv4']['address'] }}:{{ hostvars[host]['redis_sentinel_port'] }}{% endfor %}

Вам также потребуется установить дополнительные pip/системные пакеты для использования redis кластера:

gnocchi_distro_packages:
- apache2
- apache2-utils
- libapache2-mod-wsgi
- git
- build-essential
- python-dev
- libpq-dev
- python-rados
# additional package for python redis client
- python-redis
gnocchi_pip_packages:
- cryptography
- gnocchiclient
# this is what we want:
#  - "gnocchi[mysql,ceph,ceph_alternative_lib,redis]"
# but as there is no librados >=12.2 pip package we have to first install ceph without alternative support
# after adding the ceph repo to gnocchi container, python-rados>=12.2.0 is installed and linked automatically
# and gnocchi will automatically take up the features present in the used rados lib.
- "gnocchi[mysql,ceph,redis]"
- keystonemiddleware
- python-memcached
- redis

Примечание

Небольшое предупреждение: имя альтернативной библиотеки Ceph (ceph_alternative_lib) отличается для различных версий Gnocchi.

Zookeeper для координации

Когда вы установили Gnocchi на нескольких серверах для распределения работы, добавьте Zookeper для координации. Для установки Zookeeper, вы можете использовать эту ansible роль.

Создайте контейнеры для Zookeeper:

## conf.d
zookeeper_hosts:
{% for server in groups['control_nodes'] %}
{{ server }}:
  ip: {{ hostvars[server]['ansible_default_ipv4']['address'] }}
{% endfor%}
## env.d
component_skel:
  zookeeper_server:
    belongs_to:
      - zookeeper_all

container_skel:
  zookeeper_container:
    belongs_to:
      - infra_containers
      - shared-infra_containers
    contains:
      - zookeeper_server
    properties:
      service_name: zookeeper

Теперь вы можете установить Zookeeper как координирующий сервис для Gnocchi:

gnocchi_coordination_url: "zookeeper://{% for host in groups['zookeeper_all'] %}{{ hostvars[host]['container_address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}"

Вам также может потребоваться установить дополнительные пакеты:

gnocchi_pip_packages:
- cryptography
- gnocchiclient
# this is what we want:
#  - "gnocchi[mysql,ceph,ceph_alternative_lib,redis]"
# but as there is no librados >=12.2 pip package we have to first install ceph without alternative support
# after adding the ceph repo to gnocchi container, python-rados>=12.2.0 is installed and linked automatically
# and gnocchi will automatically take up the features present in the used rados lib.
- "gnocchi[mysql,ceph,redis]"
- keystonemiddleware
- python-memcached
- redis
# addiitional pip packages needed for zookeeper coordination backend
- tooz
- lz4
- kazoo

Тесты производительности для Gnocchi

Для лучшего понимания тонкой настройки стека Gnocchi, просмотрите данные презентации: