В данной статье мы покажем, как настроить HA cluster asterisk с репликацией через DRDB, при помощи pacemaker. Ранее мы уже рассматривали вариант кластеризации, но он не совершенен.
Базовая установка и настройка HA cluster
Сети:
Допустим у нас есть 2 ноды, нашего будущего кластера, доступные из следующих сетей: 172.16.0.0/24, 10.0.254.0/24.
Первым делом задаем имена нодам:
Все команды выполняются от имени суперпользователя(root). Вместо example.com указываем свой домен, или оставляем так как есть.
1 2 |
[root@node1 ~]# hostnamectl set-hostname master.example.com [root@node2 ~]# hostnamectl set-hostname client.example.com |
Затем определим имена хостов и ip адреса в файле /etc/hosts:
Откроем данный файл любым удобным текстовым редактором, мы будем использовать nano.
1 |
[root@node1 ~]# nano /etc/hosts |
Внесем в данный файл:
1 2 3 4 |
172.16.0.254 master.example.com #Physical IP Address of NODE1 172.16.0.253 client.example.com #Physical IP Address of NODE2 10.0.254.254 NODE1 #HeartBeat IP Addr of NODE1 10.0.254.253 NODE2 #HeartBeat IP Addr of NODE2 |
После чего переходим к установке пакетов кластера на всех нодах.
Добавим репозиторий:
Используя все тот же редактор nano, данную манипуляцию проводим на всех нодах кластера
1 |
# nano /etc/yum.repos.d/ClusterHA.repo |
и добавим в него:
1 2 3 4 5 6 |
[centos-7-base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ enabled=1 gpgcheck=0 |
Далее устанавливаем необходимые пакеты:
1 |
# yum install pcs pacemaker fence-agents-all psmisc policycoreutils-python |
Добавляем правила в брендмауэр:
1 2 |
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload |
На данном этапе базовая настройка и установка завершены.
Запуск и создание кластера
Выполним представленные ниже команды, на всех нодах.
1 2 |
# systemctl start pcsd # systemctl enable pcsd |
После чего можно проверить статус службы:
1 |
# systemctl status pcsd |
Далее настроим аутенфикацию
На всех нодах. Зададим пароль для пользователя hacluster
1 |
# echo Cluster%P@ssWD | passwd --stdin hacluster |
Затем проверим авторизацию:
запускаем на мастер ноде.
1 |
# pcs cluster auth NODE1 NODE2 -u hacluster -p Cluster%P@ssWD --force |
Вывод будет таким:
1 2 |
NODE1: Authorized NODE2: Authorized |
Создаем кластер:
Имя кластера не может превышать 15 символов. мы используем «AsteriskCluster».
1 |
# pcs cluster setup --force --name AsteriskCluster NODE1 NODE2 |
Вывод если все без ошибок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Destroying cluster on nodes: NODE1, NODE2... NODE1: Stopping Cluster (pacemaker)... NODE2: Stopping Cluster (pacemaker)... NODE1: Successfully destroyed cluster NODE2: Successfully destroyed cluster Sending cluster config files to the nodes... NODE1: Succeeded NODE2: Succeeded Synchronizing pcsd certificates on nodes NODE1, NODE2... NODE1: Success NODE2: Success Restarting pcsd on the nodes in order to reload the certificates... NODE1: Success NODE2: Success |
Затем запускаем кластер:
опция «–all» запустит кластер на всех настроенных узлах.
1 |
#pcs cluster start –all |
Для проверки статуса воспользуемся следующей командой:
1 |
# pcs status |
Если проверить статус на данном этапе
Если вы проверите вышеупомянутый статус, появится предупреждение «нет устройств Stonith и Stonith-enabled is not false». Мы пока отключим STONITH. Для отключения STONITH используется следующая команда.
1 |
# pcs property show stonith-enabled |
Приведенную выше команду следует выполнять на одной из нод.
Замечание
Одна из важных замечаний, когда мы внедряем Pacemaker в конфигурации с 2 узлами. Кворум как концепция не имеет смысла в этом сценарии, потому что он у вас есть только тогда, когда доступно более половины узлов, поэтому мы также отключим его, используя следующую команду.
1 2 |
[master ~]# pcs property set no-quorum-policy=ignore [master ~]# pcs property show no-quorum-policy |
Создадим общий ресурс кластера
где:
“Asterick_VIP01” название службы.
“ocf:heartbeat:IPaddr2” название скрипта heartbeat, который будет использован.
“op monitor interval=30s” интервал проверки службы
Команда:
1 |
#pcs resource create Asterick_VIP01 ocf:heartbeat:IPaddr2 ip=172.16.0.250 cidr_netmask=32 op monitor interval=30s |
Если на данном этапе проверить статус кластера, то можно увидеть, что добавился ресурс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[master ~]# pcs status Cluster name: AsteriskCluster Stack: corosync Current DC: NODE1 (version 1.1.15-11.el7_3.4-e174ec8) - partition with quorum Last updated: Wed Jun 14 06:21:03 2017 Last change: Wed Jun 14 06:12:58 2017 by root via crm_resource on NODE1 2 nodes and 2 resources configured Online: [ NODE1 NODE2 ] Full list of resources: Asterick_VIP01 (ocf::heartbeat:IPaddr2): Started NODE1 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled |
Установка DRDB
Приступая к установке DRDB, первым делом добавим репозитории:
1 2 3 4 |
[master ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [master ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm [client ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [client ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm |
Затем установим пакеты на всех нодах:
1 |
# yum install kmod-drbd84 drbd84-utils |
SELinux
Чтобы избежать проблем с SELinux, мы установили selinux в режим «Permissive», и мы собираемся передать процессы DRBD из-под контроля SELinux.
1 2 3 4 |
[master ~]# getenforce Permissive [master ~]# semanage permissive -a drbd_t [master ~]# |
Повторим манипуляцию выше на второй ноде:
1 2 3 4 |
[client ~]# getenforce Permissive [client ~]# semanage permissive -a drbd_t [client ~]# |
Затем настраиваем разделы DRDB, на всех нодах:
1 2 |
[master ~]# lvcreate -L 10000M -n drbd_lv drbd_vg [client ~]# lvcreate -L 10000M -n drbd_lv drbd_vg |
После чего переходим к настройке, предварительно сделав резервную копию файла global_common.conf, так же на всех нодах:
1 2 |
# cp -v /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak ‘/etc/drbd.d/global_common.conf’ -> ‘/etc/drbd.d/global_common.conf.bak’ |
Теперь у нас есть ресурс с именем shared_drbd, который использует / dev / drbd_vg / drbd_lv в качестве устройства нижнего уровня и настроен с внутренними метаданными.
Открываем конфигурационный файл:
1 |
# nano /etc/drbd.d/global_common.conf |
Приведем его к следующему виду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# DRBD is the result of over a decade of development by LINBIT. # In case you need professional services for DRBD or have # feature requests visit http://www.linbit.com global { usage-count yes; # minor-count dialog-refresh disable-ip-verification # cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600; } resource shared_drbd { protocol C; handlers { # These are EXAMPLE handlers only. # They may have severe implications, # like hard resetting the node under certain circumstances. # Be careful when chosing your poison. pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; split-brain "/usr/lib/drbd/notify-split-brain.sh root"; # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb wfc-timeout 60; degr-wfc-timeout 120; } options { # cpu-mask on-no-data-accessible } disk { # size on-io-error fencing disk-barrier disk-flushes # disk-drain md-flushes resync-rate resync-after al-extents # c-plan-ahead c-delay-target c-fill-target c-max-rate # c-min-rate disk-timeout on-io-error detach; #fencing resource-and-stonith; } net { # protocol timeout max-epoch-size max-buffers unplug-watermark # connect-int ping-int sndbuf-size rcvbuf-size ko-count # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri # after-sb-1pri after-sb-2pri always-asbp rr-conflict # ping-timeout data-integrity-alg tcp-cork on-congestion # congestion-fill congestion-extents csums-alg verify-alg # use-rle allow-two-primaries no; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; rr-conflict disconnect; } on master.itcare.com { device /dev/drbd1; disk /dev/drbd_vg/drbd_lv; address 172.16.0.254:7789; meta-disk internal; } on client.itcare.com { device /dev/drbd1; disk /dev/drbd_vg/drbd_lv; address 172.16.0.253:7789; meta-disk internal; } } |
Так же на всех нодах открываем порт 7789:
1 2 |
# firewall-cmd --permanent --add-port=7789/tcp # firewall-cmd --reload |
Затем копируем конфигурационный файл на вторую ноду:
1 |
[master ~]# scp -r /etc/drbd.d/global_common.conf root@172.16.0.253:/etc/drbd.d/ |
Теперь нам нужно инициализировать хранилище метаданных DRBD на обоих серверах:
1 2 |
[master ~]# drbdadm create-md shared_drbd [client ~]# drbdadm create-md shared_drbd |
1 2 |
[master ~]# drbdadm up shared_drbd [client ~]# drbdadm up shared_drbd |
Для согласованности данных нам нужно выполнить команду «drbdadm» на ПЕРВИЧНОМ узле:
1 |
[master ~]# drbdadm primary --force shared_drbd |
1 |
Проверяем, завершена ли начальная синхронизация диска (100%), и убедитесь, что вы находитесь на основном узле. |
1 |
[master ~]# drbd-overview |
Используя обе команды (drbd-overview, cat /proc/drbd), мы можем проверить состояние синхронизации блочного устройства между несколькими узлами.
Теперь создаем файловую систему на устройстве DRBD, эта команда будет выполняться на основном узле:
1 |
# mkfs.xfs /dev/drbd1 |
После чего монтируем устройство DRBD на первичном узле и создаем некоторые файлы в файловой системе.
1 2 3 4 5 |
[master ~]# mkdir /Drbdshared [client ~]# mkdir /Drbdshared [master ~]# mount /dev/drbd1 /Drbdshared/ [master ~]# cd /Drbdshared [master Drbdshared]# touch file{1..20} |
Примечание
Обратите внимание, что все данные, которые вы записываете в каталог «/ Drbdshared», будут синхронизированы с узлом 2. Помните, что вам не нужно монтировать диск DRBD на другом узле.
Проверяем синхронизацию между узлами.
Чтобы проверить синхронизацию данных между узлами, нам нужно выполнить следующие шаги. Сначала нам нужно размонтировать каталог DRBD (/Drbd Shared) и понизить первичный сервер до вторичной роли.
1 2 |
[master ~]# umount /Drbdshared [master ~]# drbdadm secondary shared_drbd |
Теперь на дополнительной ноде (то есть Node2) сменим роль на главную и смонтируем файловую систему DRBD в каталоге /Drbdshared и с помощью команды «ls» проверьте данные.
1 2 3 4 5 |
[client ~]# drbdadm primary --force shared_drbd [client ~]# mount /dev/drbd1 /Drbdshared/ [client ~]# df -h /Drbdshared [client ~]#cd /Drbdshared/ [client Drbdshared]# ls |
1 |
Если вы столкнулись с ошибкой ниже, выполните следующие шаги на основном узле и обратите внимание, что не нужно монтировать диск DRBD на другом узле (дополнительном). |
Ошибка
1: Failure: (127) Device minor not allocated additional info from kernel: unknown minor Command ‘drbdsetup-84 primary 1 —force’ terminated with exit code 10
Команды для решения:
1 2 3 4 |
[master ~]# drbdadm up shared_drbd Marked additional 12 MB as out-of-sync based on AL. [master ~]# drbdadm primary --force shared_drbd [master ~]# mount /dev/drbd1 /Drbdshared/ |
Настройка MariaDB HA Pacemaker Cluster c DRBD
Устанавливаем пакеты:
1 2 |
[master ~]# yum install mariadb-server mariadb -y [client ~]# yum install mariadb-server mariadb -y |
Убедитесь, что сервис MariaDB отключен, так как он будет управляться pacemaker.
1 2 |
[master ~]# systemctl is-enabled mariadb [client ~]# systemctl is-enabled mariadb |
Теперь вручную запустите службу MariaDB на одном из узлов кластера.
1 |
[master ~]# systemctl start mariadb |
Мы можем установить новую базу данных MariaDB с помощью команды «mysql_install_db» в каталоге / Drbdshared, используя пользователя mysql.
1 |
[master ~]# mysql_install_db --datadir=/Drbdshared/ --user=mysql |
Теперь, если вы хотите установить пароль для root пользователя mariaDB для безопасной установки, см. Ниже команду; В нашем случае мы не устанавливаем пароль для пользователя root.
1 |
[master ~]# mysql_secure_installation |
Примечание
Если у вас включен SElinux, нам нужно задать ту же политику SELinux, что и для каталога данных MariaDB, используйте команду «semange» для добавления контекста файла.
1 2 |
[master ~]# semanage fcontext -a -t mysqld_db_t "/Drbdshared/(/.*)?" [master ~]# restorecon -Rv /Drbdshared/ |
Затем остановим серви баз данных:
1 |
[master ~]# systemctl stop mariadb |
Отмонтируем файловую систему DRDB:
1 |
[root@master ~]# umount /Drbdshared |
Настроим ресурс кластера для DRDB:
1 |
[master ~]# pcs cluster cib clustdatabase_cfg<br> |
Теперь нам нужно создать кластерный ресурс для устройства DRBD с именем «Database_mysql».
1 2 3 |
[master ~]# pcs -f clustdatabase_cfg resource create Database_mysql ocf:linbit:drbd \ drbd_resource=shared_drbd \ op monitor interval=30s |
Мы создали ресурс-клон с именем «databasebothnode», который позволяет ресурсу запускаться на обоих узлах кластера одновременно.
1 2 3 4 |
[master ~]# pcs -f clustdatabase_cfg resource master databasebothnode Database_mysql \ master-max=1 master-node-max=1 \ clone-max=2 clone-node-max=1 \ notify=true ordered=false |
ГДЕ
master-max: Сколько копий ресурса может быть переведено в главное состояние, и значение по умолчанию равно 1.
master-node-max: Сколько копий ресурса может быть переведено в главное состояние на одном узле, и значение по умолчанию равно 1.
clone-max:Сколько копий ресурса нужно запустить. По умолчанию количество узлов в кластере.
clone-node-max: Сколько копий ресурса можно запустить на одном узле. Значение по умолчанию — 1.
notify: Уведомление о остановке или запуске копии клона, сообщаемое всем копиям, после успешного действия.
Допустимые значения: false, true. Значение по умолчанию false.
Ниже показан порядок и логика конфигурации ресурсов кластера.
1 2 |
Pacemaker Cluster resources Start sequence: fsDRBD_mysql –> MariaDB_New –> MariaDB_VIP, Pacemaker Cluster resources Stop sequence: MariaDB_VIP –> MariaDB_New –> fsDRBD_mysql. |
Теперь создайте ресурс кластера для файловых систем с именем fsDRBD_mysql.
1 2 3 4 |
[master ~]# pcs -f clustdatabase_cfg resource create fsDRBD_mysql Filesystem \ device="/dev/drbd1" \ directory="/Drbdshared" \ fstype="xfs" |
Затем сообщите кластеру, используя опцию «ограничение размещения», ресурс клона, т.е. «databasebothnode» должен быть запущен на том же узле, что и ресурс файловой системы.
1 2 |
[master ~]# pcs -f clustdatabase_cfg constraint colocation add fsDRBD_mysql with databasebothnode \ INFINITY with-rsc-role=Master |
Теперь ресурс клона должен быть запущен до ресурса файловой системы.
1 |
[master ~]# pcs -f clustdatabase_cfg constraint order promote databasebothnode then start fsDRBD_mysql |
Создайте ресурс кластера с именем «MariaDB_New» для службы MariaDB.
1 2 3 4 |
[master ~]# pcs -f clustdatabase_cfg resource create MariaDB_New systemd:mariadb \ op start timeout=60s \ op stop timeout=60s \ op monitor interval=20s timeout=30s |
ГДЕ:
timout: Как долго ждать, прежде чем объявить действие не удалось.
interval: Как часто (в секундах) выполнять операцию. Значение по умолчанию 0, то есть никогда.
Затем сообщите кластеру, что служба MariaDB должна быть запущена на том же узле, что и ресурс файловой системы «fsDRBD_mysql».
1 |
[master ~]# pcs -f clustdatabase_cfg constraint colocation add MariaDB_New with fsDRBD_mysql INFINITY |
Теперь ресурс «fsDRBD_mysql» должен быть запущен до ресурса MariaDB.
1 |
[master ~]# pcs -f clustdatabase_cfg constraint order fsDRBD_mysql then MariaDB_New |
Мы должны добавить один параметр в конфигурацию «my.cnf»(bind_address=) на обоих узлах.
1 |
nano /etc/my.cnf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid bind_address=172.16.0.250 # # include all files from the config directory # !includedir /etc/my.cnf.d |
Вы можете проверить конфигурацию, сохраненную в файле cib «clustdatabase_cfg».
1 |
[master ~]# pcs -f clustdatabase_cfg resource show |
Предположим, если вы хотите удалить один из ресурсов, которые были добавлены по ошибке, вы можете использовать команду ниже;
1 |
[master ~]# pcs -f clustdatabase_cfg resource delete MariaDB |
Нам нужно добавить IP-адрес, по которому будет работать сервис mariaDB. Мы создаем ресурс с именем «MariaDB_VIP» для IP-адреса.
1 2 3 |
pcs -f clustdatabase_cfg resource create MariaDB_VIP ocf:heartbeat:IPaddr2 \ ip=172.16.0.250 cidr_netmask=24 \ op monitor interval=30s |
Ресурс виртуального IP-адреса «MariaDB_VIP» должен быть запущен на том же узле, что и ресурс MariaDB, и убедиться, что все остальные ресурсы уже запущены, прежде чем мы сможем подключиться к виртуальному IP-адресу.
1 2 |
[master ~]# pcs -f clustdatabase_cfg constraint colocation add MariaDB_VIP with MariaDB_New INFINITY [master ~]# pcs -f clustdatabase_cfg constraint order MariaDB_New then MariaDB_VIP |
Наконец, мы можем зафиксировать изменения сейчас и проверить состояние кластера.
Несколько шагов выполняются, когда мы фиксируем конфигурацию.
- Pacemaker запустит DRBD на обоих узлах кластера.
- Pacemaker выберет один узел для повышения до основной роли DRBD..
- Затем он смонтирует файловую систему DRBD и запустит службу MariaDB на основном узле.
1 |
[master ~]# pcs cluster cib-push clustdatabase_cfg |
Установка пакетов Drbdlinks и загрузка скрипта drbdlink из git.
Чтобы установить drbdlinks, сначала создайте новый файл «drbdlink.repo» в каталоге «/etc/yum.repos.d/» , с содержанием:
1 2 3 4 5 |
[drbdlink] name=Drbdlinks baseurl=http://dl.fedoraproject.org/pub/epel/7/x86_64/ enable=1 gpgcheck=0 |
Теперь установите пакеты «drbdlinks» из вышеуказанного хранилища:
1 |
[master ~]# yum repolist all; yum install drbdlinks -y<br>[client ~]# yum repolist all; yum install drbdlinks -y |
Теперь загрузите и установите агенты ресурсов drbdlinks. Пакет Drbdlinks предоставляет управление символьными ссылками в общий раздел DRBD
Примечание
Мы устанавливаем «drbdlinks» на сервере Node1,но требуется так же выполнить все шаги на всех остальных нодах .
1 2 3 4 5 |
[master ~]# git clone https://github.com/linsomniac/drbdlinks.git [master ~]# cd drbdlinks/ [master drbdlinks]# cp -vr drbdlinks /usr/lib/ocf/resource.d/heartbeat/ ‘drbdlinks’ -> ‘/usr/lib/ocf/resource.d/heartbeat/drbdlinks’ [master drbdlinks]# chmod +x /usr/lib/ocf/resource.d/heartbeat/drbdlinks |
Мы монтируем устройство DRBD в каталог «/Drbdshared». На этом устройстве мы создаем каталоги в общей точке монтирования DRBD для резервного копирования файлов конфигурации.
1 2 |
[master ~]# mkdir -p /Drbdshared/usr/lib/asterisk [master ~]# mkdir -p /Drbdshared/etc/asterisk |
Теперь отредактируйте файл «drbdlinks.conf» на обоих серверах (или узлах) и добавьте путь конфигурации для Asterisk.
1 |
nano /etc/drbdlinks.conf |
1 2 3 4 5 6 |
# it is equivalent to calling "link('/etc/httpd', '/shared/etc/httpd')". #link('/etc/httpd') #link('/var/lib/pgsql/') mountpoint('/Drbdshared') link('/usr/lib64/asterisk') link('/etc/asterisk') |
Скопируйте все файлы конфигурации в каталог «/Drbdshared».
1 2 |
[master ~]# cp -r /usr/lib64/asterisk/* /Drbdshared/usr/lib64/asterisk/ [master ~]# cp -r /etc/asterisk/* /Drbdshared/etc/asterisk/ |
Перед настройкой ресурса Asterisk сначала установите агент ресурса Asterisk. Ниже будут выполнены шаги на обоих узлах кластера.
1 2 3 4 |
[master ~]# wget https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/asterisk -O /usr/lib/ocf/resource.d/heartbeat/asterisk [master ~]# chmod +x /usr/lib/ocf/resource.d/heartbeat/asterisk [client ~]# wget https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/asterisk -O /usr/lib/ocf/resource.d/heartbeat/asterisk [client ~]# chmod +x /usr/lib/ocf/resource.d/heartbeat/asterisk |
Настройка ресурса кластера для Asterisk
Примечание
Когда вы используете команду pcs, вы можете использовать опцию «-f», чтобы сохранить изменение конфигурации в файле, не затрагивая активную CIB. Если вы ранее настроили кластер и уже существует активный CIB, вы используете следующую команду для сохранения необработанного XML-файла.
1 |
[master ~]# pcs cluster cib clustasterisk_cfg |
Нам нужно добавить IP-адрес, по которому будет работать сервис Asterisk. Мы создаем ресурс с именем «virtualast_ip» для IP-адреса. Ранее для примера мы добавляли данный ресурс для MariaDB, так как мы делаем кластер Asterisk, то виртуальный ip адрес задаем именно для этой службы.
1 |
[master ~]# pcs -f clustasterisk_cfg resource create virtualast_ip ocf:heartbeat:IPaddr2 \ ip=172.16.0.250 cidr_netmask=24 \ op monitor interval=30s |
Теперь нам нужно создать кластерный ресурс для Drbdlinks с именем «drbdlinks».
1 2 |
[master ~]# pcs -f clustasterisk_cfg resource create drbdlinks ocf:heartbeat:drbdlinks \ op monitor interval=20s |
Затем скажите кластеру, что ресурс «Drbdlinks» и «virtualast_ip» должен быть запущен на том же узле, что и ресурс файловой системы.
1 2 |
[master ~]# pcs -f clustasterisk_cfg constraint colocation add fsDRBD_mysql with drbdlinks score=INFINITY [master ~]#pcs -f clustasterisk_cfg constraint colocation add fsDRBD_mysql with virtualast_ip score=INFINITY |
Ресурс «fsDRBD_mysql» должен быть запущен до того, как ресурс «drbdlinks» и «virtualast_ip» должен быть запущен после ресурса «drbdlinks».
1 2 |
[master ~]# pcs -f clustasterisk_cfg constraint order fsDRBD_mysql then drbdlinks [master ~]# pcs -f clustasterisk_cfg constraint order drbdlinks then virtualast_ip |
Создайте ресурс кластера для звездочки с именем «Asterisk».
1 2 3 |
[master ~]# pcs -f clustasterisk_cfg resource create asterisk ocf:heartbeat:asterisk \ params user="root" group="root" \ op monitor timeout="30" |
Ресурс «virtualast_ip» должен быть запущен до ресурса «Asterisk».
1 |
[master ~]# pcs -f clustasterisk_cfg constraint order virtualast_ip then asterisk |
Затем сообщите кластеру, что служба MariaDB должна быть запущена на том же узле, что и ресурс «Asterisk».
1 |
[master ~]# pcs -f clustasterisk_cfg constraint colocation add fsDRBD_mysql with asterisk INFINITY |
Наконец, ресурс MariaDB должен быть запущен до ресурса «virtualast_ip».
1 |
[master ~]# pcs -f clustasterisk_cfg constraint order MariaDB_New then virtualast_ip |
Мы можем зафиксировать изменения сейчас и проверить состояние кластера.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[master ~]# pcs cluster cib-push clustasterisk_cfg [master ~]# pcs status ... 2 nodes and 8 resources configured Online: [ NODE1 NODE2 ] Full list of resources: Master/Slave Set: databasebothnode [Database_mysql] Masters: [ NODE1 ] Slaves: [ NODE2 ] fsDRBD_mysql (ocf::heartbeat:Filesystem): Started NODE1 MariaDB_New (systemd:mariadb): Started NODE1 MariaDB_VIP (ocf::heartbeat:IPaddr2): Started NODE1 virtualast_ip (ocf::heartbeat:IPaddr2): Started NODE1 drbdlinks (ocf::heartbeat:drbdlinks): Started NODE1 asterisk (ocf::heartbeat:asterisk): Started NODE1 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled |
Чтобы проверить синхронизацию данных между узлами, нам нужно выполнить следующие шаги.
Теперь мы попытаемся переместить активный в данный момент ресурс узла на другой узел, используя приведенную ниже команду, переводит все узлы в режим ожидания.
1 |
[master ~]# pcs cluster standby NODE1 |
После чего все сервисы кластера запустятся на второй ноде. На этом этапе статья рассмотрена полностью и подошло к концу
А можно ли сделать кластер на рабочей среде asterisk 11, который крутится в hyper-v? Т.е. не делать все с нуля, а применить данную статью к рабочему asterisk.
Возможно, единственное желательно сделать снимок системы. А еще лучше сделать копию машину и на ней откатать все действия. Из-за разницы версий дистрибутивов возможны отдельные подводные камни.
Возможно ли данную статью применить уже к рабочему Asterisk 11 который в свою очередь крутится на HV? Т.е. не создавая кластер из заранее подготовленного чистого Asterisk.
Вопрос к автору:
Если всю эту схему поднять на KVM а не на хоте будит ли она работать.
Второй вопрос при отключении одного хоста на втором хосте Астериск запускать нудно в Ручную ?
На kvm заработает, я при написании инструкции поднимал на virtualbox, на счет астериска точно не помню, но по моему он сам стартовал
pcs cluster standby NODE1 перевести ноду в standby, а как ее вернуть обратно?