Назад | Перейти на главную страницу

Postgresql keepalived gluster | Состояние ошибки

Я пытаюсь добиться простого переключения при отказе с помощью 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"
}