четверг, 11 июня 2015 г.

keepalived

Есть разные методы для балансировки 1 адреса между несколькими машинами, и один из методов - VRRP, и его реализация в линуксе keepalived



Хороший документ для старта, но надо учитывать что документ 2002 года и в статусе deprecated
http://www.keepalived.org/pdf/UserGuide.pdf
и нет многих вещей, того же nopreempt

Далее можно почитать хабр, все основные параметры там описаны
http://habrahabr.ru/company/acronis/blog/198934/

Не забываем про фаервол!

Момент про master-slave: это имеет значение только при начальном выборе мастера, а дальше работает параметр priority, и мастером станет тот, у кого приорити максимальный (особый случай nopreempt, см ниже).

Для одного инстанса на обоих серверах параметр virtual_router_id должен стать одинаковым, и избегайте разных инстансов с одинаковым id! А вот router_id должен быть уникальным даже в пределах одного инстанса.

Поскольку приложения надо вешать на общий айпи, а на резерве на момент старта приложения этого айпи нету, есть 3 метода решения:
1)
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf

2) вешать общий айпи на резерве на loopback (lo), а при смене мастера перевешивать его

3) сделать автостарт и автостоп софта по факту переключения

Когда нужно, чтобы после переключения на резерв не было автовозврата на мастер, есть опция nopreempt
http://article.gmane.org/gmane.linux.keepalived.devel/1537
If you want "nopreempt" to work, _both_ machines need to be set to "state
BACKUP".  Then what is considered the primary is simply the machine with
the higher priority.
Хотя в нескольких доках для таких случаев писали state EQUAL

В ряде случаев будет нужнее preempt_delay, задержка на переключение.

Для "группировки" каналов и отказе одного переключать и остальные, есть секция
    vrrp_sync_group VG1 {
        group {
          VI_1
          VI_2
        }
    }

При изменении статуса можно запускать скрипты, формат
notify_master "/etc/keepalived/notify.sh del app2"
notify_backup "/etc/keepalived/notify.sh add app2"
notify_fault "/etc/keepalived/notify.sh add app2”

Ещё вариант, в основной части
vrrp_script chk_redis {
    script "killall -0 redis-server"
    interval 2
!    weight 2
}
и в инстансе
    track_script {
        chk_redis
    }
https://aricgardner.com/databases/redis/redis-with-replication-and-failover-keepalived/

Если надо не просто проверять "живость" ноды, но и конкретные сервисы - тут же есть секция virtual_server IP PORT, где задаются правила проверки сервисов, какие там реальные сервера (подсекции real-server) итд, информации там много.
Примеры - первый же линк или к примеру
http://keepalived.org/LVS-NAT-Keepalived-HOWTO.html

линки
http://keepalived.org/documentation.html
http://dragonflybsd.blogspot.ru/2012/04/vrrp.html
http://keepalived.org/Keepalived-LVS-NAT-Director-ProxyArp-Firewall-HOWTO.html
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/ch-initial-setup-VSA.html

Комментариев нет:

Отправить комментарий