3.14.4 Особенности установки системы в кластере
Установка ECSS-10 в кластере
При установке системы ECSS-10 в кластере необходимо выполнить следующие действия.
Запустить и активировать систему. Для этого выполните установку необходимых пакетов.
3.14.4 Установка пакетов ECSS сначала выполняется полностью на одном из серверов кластера.Выполнить установку необходимых пакетов для всех серверов в кластере.
Пакет ecss-web-conf достаточно установить на один из серверов.Установить имя кластера. Для этого откройте файл mycelium1.config текстовым редактором:
sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
Если у вас в поле "cluster_name" указано "undefined", то необходимо задать произвольное имя для данного параметра, например:
{cluster_name, my_cluster}
Данная операция производится на обоих хостах при установке ECSS-10 с резервированием. Если установка производится без резерва, то данную операцию выполнять не обязательно.Настроить доступ к серверам системы. Для этого необходимо отредактировать файл /etc/dnsmasq.d/ecss-broker.
Пример настройки доступа в соответствии с конфигурацией сети, приведён в разделе 3.14.4 Руководство по настройке.
Файл /etc/dnsmasq.d/ecss-broker на ecss1:address=/primary.broker.ecss/192.168.1.1 address=/secondary.broker.ecss/192.168.1.2
Файл /etc/dnsmasq.d/ecss-broker на ecss2:
address=/primary.broker.ecss/192.168.1.1 address=/secondary.broker.ecss/192.168.1.2
В качестве primary.broker.ecss и secondary.broker.ecss нельзя использовать адреса, которые были сконфигурированы в keepalived.conf.Настроить RestFS (подробнее см. раздел 3.14.4 Настройка RestFS).
Для проверки полноты установки и настройки можно использовать Чек-лист по установке ECSS-10.
Настройка VRRP
Для настройки механизма резервирования сервера посредством протокола VRRP используется функционал, который предоставляет приложение keepalived.
На первом сервере нужно создать файл конфигурации /etc/keepalived/keepalived.conf со следующим содержимым (адреса и имена интерфейсов прописать свои):
Пример:
vrrp_script chk_sip { script "/usr/bin/ecss_pa_sip_port 65535" interval 2 timeout 2 } vrrp_script check_core { script "nc -z localhost 8085" interval 2 # check every 2 seconds } #For domain_bsk_ecss1 SIP vrrp_instance VI_SIP_61 { state MASTER interface bond1.2 virtual_router_id 61 priority 100 advert_int 1 preempt_delay 60 unicast_src_ip 192.168.2.21 unicast_peer { 192.168.2.22 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.61/24 dev bond1.2 label bond1.2:SIP61 } track_script { chk_sip } } #For domain_bsk_ecss2 SIP vrrp_instance VI_SIP_62 { state BACKUP interface bond1.2 virtual_router_id 62 priority 50 advert_int 1 smtp_alert preempt_delay 60 unicast_src_ip 192.168.2.21 unicast_peer { 192.168.2.22 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.62/24 dev bond1.2 label bond1.2:SIP62 } } #For TC ecss1 vrrp_instance VI_TC63 { state BACKUP interface bond1.2 virtual_router_id 63 priority 100 advert_int 1 preempt_delay 20 unicast_src_ip 192.168.2.21 unicast_peer { 192.168.2.22 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.63/24 dev bond1.2 label bond1.2:TC } track_script { check_core } } include ecss-mysql-replication.conf
CODEНа первом сервере создается файл с конфигурацией MySQL /etc/keepalived/ecss-mysql-replication.conf
vrrp_script check_mysqld { script "nc -z localhost 3306" # cheaper than pidof interval 2 # check every 2 seconds fall 1 rise 2 } #For MySQL vrrp_instance MySQL71 { state BACKUP interface bond1.3 virtual_router_id 71 priority 100 advert_int 1 preempt_delay 10 unicast_src_ip 192.168.1.21 unicast_peer { 192.168.1.21 } authentication { auth_type PASS auth_pass pmysql } virtual_ipaddress { 192.168.1.71/24 dev bond1.3 label bond1.3:MYSQL } track_script { check_mysqld } }
CODEНа втором сервере нужно создать аналогичный файл /etc/keepalived/keepalived.conf со следующим содержимым:
vrrp_script chk_sip { script "/usr/bin/ecss_pa_sip_port 65535" interval 2 timeout 2 } vrrp_script check_core { script "nc -z localhost 8085" interval 2 # check every 2 seconds } #For domain_bsk_ecss1 SIP vrrp_instance VI_SIP_62 { state MASTER interface bond1.2 virtual_router_id 62 priority 100 advert_int 1 preempt_delay 60 unicast_src_ip 192.168.2.22 unicast_peer { 192.168.2.21 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.62/24 dev bond1.2 label bond1.2:SIP62 } track_script { chk_sip } } #For domain_bsk_ecss2 SIP vrrp_instance VI_SIP_61 { state BACKUP interface bond1.2 virtual_router_id 61 priority 50 advert_int 1 smtp_alert preempt_delay 60 unicast_src_ip 192.168.2.22 unicast_peer { 192.168.2.21 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.61/24 dev bond1.2 label bond1.2:SIP61 } } #For TC ecss1 vrrp_instance VI_TC63 { state BACKUP interface bond1.2 virtual_router_id 63 priority 80 advert_int 1 preempt_delay 20 unicast_src_ip 192.168.2.22 unicast_peer { 192.168.2.21 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.63/24 dev bond1.2 label bond1.2:TC } track_script { check_core } } include ecss-mysql-replication.conf
CODEНа втором сервере создается файл с конфигурацией MySQL /etc/keepalived/ecss-mysql-replication.conf
vrrp_script check_mysqld { script "nc -z localhost 3306" # cheaper than pidof interval 2 # check every 2 seconds fall 1 rise 2 } #For MySQL vrrp_instance MySQL71 { state BACKUP interface bond1.3 virtual_router_id 71 priority 80 advert_int 1 preempt_delay 20 unicast_src_ip 192.168.1.22 unicast_peer { 192.168.1.21 } authentication { auth_type PASS auth_pass pmysql } virtual_ipaddress { 192.168.1.71/24 dev bond1.3 label bond1.3:MYSQL } track_script { check_mysqld } }
CODE
Далее нужно произвести корректировку IP-адресов и имен интерфейсов, согласно конфигурации системы.
Более подробная информация о приложении keepalived и его настройке приведена в документации по адресу: http://www.keepalived.org/pdf/UserGuide.pdf.
/usr/bin/ecss_pa_sip_port 65535, где 65535 дефолтное значение порта, который адаптер открывает в случае, когда он готов принимать нагрузку. Для того, чтобы изменить
порт необходимо в конфиге sip адаптера (/etc/ecss/ecss_pa_sip/sip1.config) в секции ip_ssw_intercom изменить в параметрe keepalive значение порта, после чего перезапустить адаптер.
Настройка RestFS для кластера
Для того чтобы обеспечить репликацию данных между серверами кластера, необходимо настроить glusterfs-server.
В качестве примера приведена система ECSS-10, работающая в кластере, со следующими настройками:
- IP-адрес ecss1 - 192.168.118.222;
- IP-адрес ecss2 - 192.168.118.224.
Установите gluster-сервер и пакет attr на оба хоста:
sudo aptitude install glusterfs-server attr
Для добавления сервера в пул файловых хранилищ выполните команду на ecss1:
sudo gluster peer probe 192.168.118.224
После этого на ecss2 при выполнении команды
sudo gluster peer status
должна появиться информация о ecss1:Number of Peers: 1 Hostname: 192.168.118.222 Uuid: 569c4730-a3a7-4d29-a132-b1bcdad792d8 State: Peer in Cluster (Connected)
Для создания кластера на ecss1 выполните команду:
sudo gluster volume create ecss_volume replica 2 transport tcp 192.168.118.222:/var/lib/ecss/glusterfs 192.168.118.224:/var/lib/ecss/glusterfs force
Запустите созданный кластер, для этого на ecss1 выполните команду:
sudo gluster volume start ecss_volume
Для проверки статуса кластера на ecss1 выполните команду:
sudo gluster volume info
Необходимо обратить внимание на поля "Status" и "Bricks" - они должны иметь следующий вид:
Volume Name: ecss_volume Type: Replicate Volume ID: 60774e49-d2f1-4b06-bb4a-3f39ccf1ea73 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: 192.168.118.222:/restfs Brick2: 192.168.118.224:/restfs
- Чтобы смонтировать glusterfs раздел, выполните на обоих хостах ecss1 и ecss2 следующие действия:
Создайте новый systemd unit.
/etc/systemd/system/ecss-glusterfs-mount.service
и добавьте туда следующие параметры:
[Unit] Description=mount glusterfs After=network.target Requires=network.target [Service] RemainAfterExit=no Type=forking RestartSec=10s Restart=always ExecStart=/sbin/mount.glusterfs localhost:/ecss_volume /var/lib/ecss/restfs -o fetch-attempts=10 ExecStop=/bin/umount /var/lib/ecss/restfs [Install] WantedBy=multi-user.target
Добавить unit в автозагрузку.
Unit можно добавить в автозагрузку следующей командой:
sudo systemctl enable ecss-glusterfs-mount.service
Перезагрузить хост:
sudo reboot
Если хост не может быть перезагружен, то можно выполнить следующие команды:
sudo systemctl daemon-reload sudo systemctl restart ecss-glusterfs-mount.service
После монтирования на обоих хостах выполните команду:
df -h
При просмотре информации должен появиться подмонтированный раздел:
/dev/sda10 19G 6,5G 11G 38% /var/lib/mysql /dev/sda8 4,5G 213M 4,1G 5% /var/log /dev/sda5 37G 48M 35G 1% /var/lib/ecss/ecss-media-server/records /dev/sda6 19G 44M 18G 1% /var/lib/ecss/cdr /dev/sda7 19G 44M 18G 1% /var/lib/ecss/statistics /dev/sda9 19G 7,6G 9,7G 44% /var/log/ecss localhost:/ecss_volume 46G 59M 44G 1% /var/lib/ecss/restfs*
Запуск RestFS в режиме кластера
Для запуска RestFS в режиме кластера достаточно, чтобы пакет ecss-restfs был установлен и запущен на обеих нодах. Команда для запуска сервиса ecss-restfs.
sudo systemctl start ecss-restfs.service
Запуск RestFS в случае недоступности других участников кластера
В применяемой концепции glusterfs все сервера равнозначны. Однако раздел volume не активируется при отсутствии кворума. Это защитный механизм, который характерен для всех распределенных fault-tollerant систем и призван защитить систему от split-brain.
Такая ситуация может возникнуть когда загружается только один из серверов, а второй при этом выключен или недоступен. На первом сервере volume не будет автоматически активирован до появления второго сервера для исключения расхождения данных.
Если включение второго сервера невозможно, либо затягивается на длительное время, то можно вручную перевести volume в рабочий режим, выполнив команду:
sudo gluster volume ecss_volume start force
Правка настроек glusterfs-server.service unit
Для настройки управления glusterfs service через systemctl выполните команду:
sudo systemctl edit glusterfs-server.service
Должно открыться окно текстового редактора. Внесите туда следующие параметры:
[Service] KillMode=control-group RemainAfterExit=no
Сохраните изменения и выполните команду:
sudo systemctl daemon-reload