====== Протокол CARP ======
* [[https://ru.wikipedia.org/wiki/VRRP|VRRP]]
* [[https://ru.wikipedia.org/wiki/CARP|CARP]]
* [[Сервис NTP]]
===== Debian/Ubuntu =====
* [[https://serverfault.com/questions/298776/ucarp-promote-slave-to-master|ucarp: promote slave to master]]
* [[https://askubuntu.com/questions/1149275/using-netplan-with-ucarp|Using netplan with ucarp]] + systemd
==== Установка ====
root@nodeN:~# apt install ucarp
==== Настройка ====
root@nodeN:~# less /usr/share/doc/ucarp/README.Debian
root@nodeN:~# less /etc/network/if-up.d/ucarp
root@nodeN:~# cat /etc/network/interfaces
...
auto eth0
iface eth0 inet static
address 192.168.X.N
netmask 255.255.255.0
ucarp-vid 1
ucarp-vip 192.168.X.254
ucarp-password secret
iface eth0:ucarp inet static
address 192.168.X.254
netmask 255.255.255.255
...
root@nodeN:~# less /usr/share/ucarp/vip-up
#!/bin/sh
/sbin/ifup $1:ucarp
root@nodeN:~# less /usr/share/ucarp/vip-down
#!/bin/sh
/sbin/ifdown $1:ucarp
==== Запуск ====
root@nodeN:~# ifdown --force eth0
root@nodeN:~# ifup eth0
==== Проверка ====
* [[Сигналы#Отправка сигнала]]
root@nodeN:~# ps ax | grep carp
root@nodeN:~# ifconfig eth0:ucarp
root@nodeN:~# pkill -USR1 ucarp
root@nodeN:~# killall -USR1 ucarp
root@nodeN:~# grep carp /var/log/syslog
==== Смена ролей узлов ====
wincmd:\> arp -a
masternode# pkill -USR2 ucarp
masternode# killall -USR2 ucarp
wincmd:\> arp -a
===== FreeBSD (user land) =====
==== Установка ====
[nodeN:~] # pkg install ucarp
==== Настройка ====
[nodeN:~] # less /usr/local/etc/rc.d/ucarp
[nodeN:~] # cat /etc/rc.conf
...
ucarp_src="192.168.X.N"
ucarp_enable="YES"
ucarp_vhid="1"
ucarp_if="em0"
ucarp_addr="192.168.X.254"
ucarp_pass="secret"
ucarp_upscript="/usr/local/sbin/ucarp-up"
ucarp_downscript="/usr/local/sbin/ucarp-down"
[nodeN:~] # cat /usr/local/sbin/ucarp-up
#!/bin/sh
...
/sbin/ifconfig "$1" alias "$2" netmask 255.255.255.255
[nodeN:~] # cat /usr/local/sbin/ucarp-down
#!/bin/sh
...
/sbin/ifconfig "$1" -alias "$2"
...
[nodeN:~] # service ucarp start
===== Дополнительные материалы =====
* [[http://serverfault.com/questions/179263/multiple-ucarp-vips-on-single-interface-with-debian-ubuntu|Multiple UCARP VIPs on single Interface with Debian/Ubuntu]]
==== Ubuntu вариант запуска процесса вручную ====
=== Установка ===
root@nodeN:~# apt-get install ucarp
=== Настройка ===
root@nodeN:~# cat /etc/vip-up.sh
#!/bin/sh
/sbin/ip addr add 192.168.X.254/32 dev "$1"
root@nodeN:~# cat /etc/vip-down.sh
#!/bin/sh
/sbin/ip addr del 192.168.X.254/32 dev "$1"
root@nodeN:~# chmod +x /etc/vip-up.sh /etc/vip-down.sh
=== Запуск (можно прописать в /etc/rc.local) ===
root@node1:~# ucarp -i eth0 -s 192.168.X.1 -v 1 -p secret -a 192.168.X.254 -u /etc/vip-up.sh -d /etc/vip-down.sh -z -B
root@node2:~# ucarp -i eth0 -s 192.168.X.2 -v 1 -p secret -a 192.168.X.254 -u /etc/vip-up.sh -d /etc/vip-down.sh -z -B
Примечания:
* Не смотря на ОБЯЗАТЕЛЬНОЕ наличие ключа -a 192.168.X.254 адрес повторно приходится присваивать/удалять в скриптах
* If you want a "preferred" master to immediately become a master even if another host is already the master: a) add the --preempt (or -P) switch to *all* hosts b)use a lower skew (-k) or a lower base for the "preferred" one.
=== Проверка ===
root@nodeN:~# ip addr show dev eth0
=== Остановка ===
root@nodeN:~# killall ucarp
==== FreeBSD (kernel land) ====
* [[http://www.freebsd.org/doc/en/books/handbook/carp.html|Common Address Redundancy Protocol (CARP) (freebsd handbook)]]
# man carp
[[Управление ядром и модулями в FreeBSD]]
=== Настройка ===
node1# ifconfig carp0 create
node1# ifconfig carp0 vhid 1 pass testpass321 192.168.X.254/24
node2# ifconfig carp0 create
node2# ifconfig carp0 vhid 1 advskew 100 pass testpass321 192.168.X.254/24
node1# cat /etc/rc.conf
...
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass321 192.168.X.254/24"
...
node2# cat /etc/rc.conf
...
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advskew 100 pass testpass321 192.168.X.254/24"
...
=== Проверка ===
nodeN# ifconfig carp0