Установка и настройка Keepalived

Keepalived позволяет использовать виртуальный IP адрес. В случае выхода из строя одного из узлов postgres, этот  IP адрес будет автоматически присвоен другому хосту в порядке указания приоритета.
В нашем случае, для конкретики примем VIP 10.0.9.60, а адреса хостов с установленным keepalived:  postgres1 10.0.9.61, postgres2 10.0.9.62, postgres3 10.0.9.63.

Таким образом, при отказе хоста postgres1, узел postgres2 автоматически присвоит себе виртуальный адрес 10.0.9.60, так как он является вторым по приоритету. Далее соединение подхватывает демон proxy, запущенный на этой ВМ (и на двух других тоже), который знает, какой из трех узлов в данный момент является мастером. В свою очередь он транслирует запросы от клиента напрямую в master базу данных.

Ставим keepalived:

apt-get install keepalived -y
На всех узлах добавим возможность перенаправления пакетов в /etc/sysctl.conf

net.ipv4.ip_forward=1

Применим изменения из файла

sysctl -p

Теперь надо создать конфигуратор настройки. На всех трех узлах он будет почти одинаковый. 
Пример файла /etc/keepalived/keepalived.conf для хоста postgres1.

  ! this is who emails will go to on alerts
   notification_email {
    admin@your_domain.ru
    ! add a few more email addresses here if you would like
   }

   notification_email_from servers@ your_domain.ru
   ! I use the local machine to relay mail
   smtp_server smtp.yuor_domain.local
   smtp_connect_timeout 30
   ! each load balancer should have a different ID
   ! this will be used in SMTP alerts, so you should make
   ! each router easily identifiable
   lvs_id CLUSTER_POSTGRES1
}

}

vrrp_instance postgres1 {
        interface eth0
        state MASTER
        virtual_router_id VROUTER
        priority 150

  ! send an alert when this instance changes state from MASTER to BACKUP
        smtp_alert
        authentication {
            auth_type PASS
            auth_pass passwordforcluster
        }

        track_script {
            chk_http_port
        }

        virtual_ipaddress {
                10.0.9.60/32 dev eth0

        }

        ! add here your notification code, if you want
}

Перестартуем службу

/etc/init.d/keepalived restart

Опубликовано: 10.05.2017