Я пытаюсь добиться простого переключения при отказе с помощью Keeplalived, postgres и gluster.
Использование CentOs 7
Я смонтировал реплицированный том gluster на обоих узлах в '/ var / lib / pgsql'.
Shared ip(Keepalived): 192.168.1.20
node01: 192.168.1.11
node02: 192.168.1.12
Содержимое скрипта pgsql-check:
#!/usr/bin/python
import subprocess
import sys
try:
subprocess.check_call(['/usr/bin/systemctl', 'status', 'postgresql.service'])
sys.exit(0)
except subprocess.CalledProcessError:
sys.exit(3)
Уведомить содержимое скрипта:
#!/usr/bin/python
import sys
import subprocess
if sys.argv[3] == "MASTER":
try:
subprocess.check_call(['/usr/bin/systemctl start postgresql.service'])
except subprocess.CalledProcessError:
pass
sys.exit(0)
if sys.argv[3] == "BACKUP":
try:
subprocess.check_call(['/usr/bin/systemctl', 'stop', 'postgresql.service'])
except subprocess.CalledProcessError:
pass
sys.exit(0)
if sys.argv[3] == "FAULT":
try:
subprocess.check_call(['/usr/bin/systemctl', 'stop', 'postgresql.service'])
except subprocess.CalledProcessError:
pass
sys.exit(0)
sys.exit(1)
keepalived.conf:
vrrp_script chk_pgsql {
script "/etc/keepalived/pgsql-check"
interval 2 # check every 2 seconds
fall 2 # require 2 failures for KO
rise 2 # require 2 successes for OK
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.20
}
track_script {
chk_pgsql
}
notify "/etc/keepalived/notify"
}
Когда машины загружаются, они переходят в состояние ОТКАЗ. Но главная машина должна перейти в состояние МАСТЕР. Когда я запускаю postgres вручную и перезапускаю keepalived на мастере, все в порядке. Когда я пытаюсь выполнить аварийное переключение, обе машины находятся в состоянии FAULT и не восстанавливаются.
Кто-нибудь может помочь с конфигом / скриптами? Я неправильно понимаю механизм уведомления или проверки?
При указании веса для скрипта 1 вот так:
vrrp_script chk_pgsql {
script "/etc/keepalived/check-pgsql"
interval 1
fall 3
rise 1
weight 1
}
Затем внезапно все работает, как ожидалось. Вес по умолчанию был 0.
Я узнал об этом после прочтения этой ссылки: http://comments.gmane.org/gmane.linux.keepalived.devel/2586
Это не ответ, но он указал мне правильное направление.
Текущая конфигурация:
vrrp_script chk_pgsql {
script "/etc/keepalived/check-pgsql"
interval 1
fall 3
rise 1
weight 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_pgsql
}
virtual_ipaddress {
192.168.1.20
}
notify_master "/etc/keepalived/start-pgsql"
notify_backup "/etc/keepalived/stop-pgsql"
notify_fault "/etc/keepalived/stop-pgsql"
notify_stop "/etc/keepalived/stop-pgsql"
}