Что происходит? Когда я начинаю keepalived, все работает нормально. Когда node01 терпит неудачу и он не может начать postgresql, он будет постоянно пытаться заставить выборы. Даже если postgresql не может начаться. Выборы происходят каждую секунду.keepalived script делает переход на другой ресурс безумным
Что я хочу достичь Он должен проверить, PostgreSQL может быть запущен на node01 когда node02 является хозяином, а не силой на выборах все время. Может кто-то попытаться помочь и понять?
Это мой код
стоп-PgSQL:
#!/usr/bin/python
import sys
import subprocess
sys.exit(
subprocess.call(['/usr/bin/systemctl', 'stop', 'postgresql.service'])
)
уведомить:
#!/usr/bin/python
import sys
import subprocess
state = sys.argv[3]
with open('/var/run/keepalived.pgsql.state', 'w+') as f:
f.write(state)
if state == 'MASTER':
sys.exit(
subprocess.call(['/usr/bin/systemctl', 'start', 'postgresql.service'])
)
if state == 'BACKUP':
sys.exit(
subprocess.call(['/usr/bin/systemctl', 'stop', 'postgresql.service'])
)
if state == 'FAULT':
sys.exit(
subprocess.call(['/usr/bin/systemctl', 'stop', 'postgresql.service'])
)
регистрация PgSQL:
#!/usr/bin/python
import sys
import subprocess
from time import sleep
sleep(1)
with open('/var/run/keepalived.pgsql.state', 'r') as f:
state = f.read().strip().strip("\n")
# status 0: Postgresql is running
# status 3: Postgresql has been stopped
status = subprocess.call(['/usr/bin/systemctl', 'status', 'postgresql.service'])
if status == 0 and state == 'MASTER':
sys.exit(0)
if status == 0 and state == 'BACKUP':
sys.exit(3)
if status == 3 and state == 'MASTER':
sys.exit(3)
if status == 3 and state == 'BACKUP':
sys.exit(0)
keepalived config:
vrrp_script chk_pgsql {
script "/etc/keepalived/check-pgsql"
interval 1
fall 3
rise 3
weight -4
}
vrrp_instance pgsql_vip {
state EQUAL
interface eth0
virtual_router_id 4
priority 100(node01)|99{node02}
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_pgsql
}
virtual_ipaddress {
192.168.1.20
}
notify "/etc/keepalived/notify"
notify_stop "/etc/keepalived/stop"
}