2.3.2 Отказоустойчивый кластер управления

Cлужбы облачной платформы OpenStack/TIONIX устанавливаются на хосты, включенные в (отказоустойчивый) кластер управления. Установка производится на локальную файловую систему, с помощью системы управления пакетами хостовой операционной системы.

Управление сервисами (запуск, перезапуск) осуществляет подсистема кластеризации – менеджер ресурсов Pacemaker.

Отказоустойчивость базы данных обеспечивается запуском в варианте кластера MariaDB Galera. Три хоста (физических сервера) обеспечивают необходимый кворум базы данных.

Отказоустойчивость шины обмена данными AMQP – RabbitMQ, с помощью запуска в кластере, реализованном собственными средствами. Также включается режим высокой доступности, зеркалирующий потоки данных по трем узлам.

../_images/222.png

Рис. 2.4 Структурно-функциональная схема размещения программных компонентов

Сервисы OpenStack и TIONIX запускаются на трех узлах кластера (контроллерах). Контроллеры обозначены на схеме: controller1, controller2, controller3.

Все обращения сервисов проходят через Virtual IP (виртуальный IP адрес), обслуживаемый менеджером ресурсов Pacemaker. Затем запросы отправляются на активный узел, а уже с него они проксируются с помощью HAproxy.

Haproxy должен быть запущен только на активном узле (на котором запущен Virtual IP) по причине того, что он привязывает порты сервисов к Virtual IP.

Данное условие обеспечивается условиями запуска сервисов с помощью механизма автоматизации инсталляции Ansible (реализовано в сценариях автоматизации).

Таблица 2.3 Таблица сервисов под управлением Pacemaker
Название сервиса Название группы сервисов Название systemd юнита службы Режим запуска - на одном узле, либо на всех (clone) Зависимость от других сервисов colocation (запуск сервисов на одной ноде) Особые условия и примечания
p_redis p_redis-clone redis.service clone      
p_galera p_galera-clone отсутствует clone vip_group Update pacemaker galera resource check user and password „pcs resource update p_galera check_user=clustercheckuser check_passwd=clustercheckpassword!“  
p_neutron-server pcs_os-clone neutron-server.service clone vip_group, p_galera-clone pcs_os-clone  
p_neutron-openvswitch-agent   neutron-openvswitch-agent.service clone      
p_neutron-dhcp-agent   neutron-dhcp-agent.service clone      
p_haproxy p_haproxy-clone haproxy.service clone      
p_httpd p_httpd-clone httpd.service clone      
p_memcached p_memcached-clone memcached.service clone      
p_openstack-nova-conductor pcs_os_single openstack-nova-conductor.service single node vip_group, p_galera-clone colocation  
p_openstack-cinder-volume pcs_os_single openstack-cinder-volume.service single node vip_group, p_galera-clone colocation  
p_tionix-node-control-node-tracker pcs_tnx_nc tionix-node-control-node-tracker.service single node vip_group, p_galera-clone, pcs_os_single, pcs_os-clone, p_haproxy-clone colocation  
p_tionix-node-control-node-syncer pcs_tnx_nc tionix-node-control-node-syncer.service single node vip_group, p_galera-clone, pcs_os_single, pcs_os-clone, p_haproxy-clone colocation  
p_tionix-journal-api pcs_tnx-clone tionix-journal-api.service clone vip_group, p_galera-clone, pcs_os_single, pcs_os-clone, p_haproxy-clone    
p_tionix-journal-keystone-listener   tionix-journal-keystone-listener.service clone      
p_tionix-journal-listener   tionix-journal-listener.service clone      
p_tionix-journal-nova-listener   tionix-journal-nova-listener.service clone      
p_tionix-monitor-api   tionix-monitor-api.service clone      
p_tionix-monitor-nova-listener   tionix-monitor-nova-listener.service clone      
p_tionix-monitor-tionix-listener   tionix-monitor-tionix-listener.service clone      
p_tionix-node-control-agent   tionix-node-control-agent.service clone      
p_tionix-node-control-api   tionix-node-control-api.service clone      
p_tionix-node-control-drs-trigger   tionix-node-control-drs-trigger.service clone      
p_tionix-node-control-nova-listener   tionix-node-control-nova-listener.service clone      
p_tionix-node-control-worker   tionix-node-control-worker.service clone      
p_tionix-scheduler-beat   tionix-scheduler-beat.service clone      
p_tionix-scheduler-worker   tionix-scheduler-worker.service clone      
p_tionix-vdi-broker-api   tionix-vdi-broker-api.service clone      
p_tionix-vdi-keystone-listener   tionix-vdi-keystone-listener.service clone      
p_tionix-vdi-neutron-listener   tionix-vdi-neutron-listener.service clone      
p_tionix-vdi-nova-listener   tionix-vdi-nova-listener clone      
p_tionix-vdi-project-syncer   tionix-vdi-project-syncer clone      
p_tionix-vdi-server-api   tionix-vdi-server-api.service clone      
p_tionix-vdi-worker   tionix-vdi-worker.service clone      
pcs constraint colocation add VirtualIP with HAProxy score=INFINITY

2.3.2.1 HAproxy

HAproxy перед подключением проверяет доступность порта (на локальном и других узлах кластера) и проксирует подключение.

В конфигурации Haproxy указывается frontend – VIP-адрес, а также backend – адреса контроллеров.

Сервисы должны «биндится» на свои локальные адреса, haproxy «биндит» соответствующие порты сервисов на VirtualIP адрес.

2.3.2.2 Порядок запуска

Порядок запуска resource group в PCS:

  1. vip_group
  2. p_galera-clone
  3. pcs_os-clone
  4. pcs_os_single
  5. p_haproxy-clone
  6. pcs_tnx_nc
  7. pcs_tnx-clone
  8. p_httpd-clone
  9. p_memcached-clone

Сервисы OpenStack и TIONIX запускаются одновременно на трех узлах, за исключением следующих:

tionix-node-control-node-tracker; tionix-node-control-node-syncer; openstack-nova-conductor; openstack-cinder-volume.

Это обеспечивается выбором режима clone при заведении сервиса в кластер.

Таким образом, отказоустойчивость обеспечивается на уровне:

  • сервера, то есть при отказе сервера VirtualIP переезжает на другой хост (узел кластера);
  • сервиса, то есть при отказе сервиса Haproxy перенаправляет запрос на сервис, выполняемый на другом хосте.

Минимальная, рекомендованная и расширенная физические конфигурации управляющих узлов (Control), определяющие выделение ресурсов для кластера управления, представлены в таблице Физические конфигурации управляющего узла (Таблица 2.1).