HA fronend ucarp + conntrackd » История » Редакция 3
Редакция 2 (Константин Пильник, 2017-01-30 17:36) → Редакция 3/8 (Константин Пильник, 2017-01-30 17:59)
h1. HA fronend: ucarp + conntrackd
Данная схема позволяет построить фронтенд высокой доступности, имеющий на борту SNAT/DNAT.
Подразумевается что активен всегда front1 , при его недоступности в работу вступает front2,
при этом, пользователи, подключенные к ssh бэкенда через фронт, а так-же все соединения с
'интернет' на бэкенде не обрываются.
h2. дано
*frontend1*, где:
* eth0 - внешний интерфейс (интернет, условно 192.168.0.31/24, mac:50:ff:ff:ff:ff:22)
* eth1 - внутренний интерфейс (локалка 192.168.1.10/24, mac:50:ff:ff:ff:ff:23)
* eth2 - внутренний интерфейс (служебный, только для failover, 192.168.2.11/24)
*frontend2*, где:
* eth0 - внешний интерфейс (интернет, условно 192.168.0.31/24, mac:50:ff:ff:ff:ff:22)
* eth1 - внутренний интерфейс (локалка 192.168.1.10/24, mac:50:ff:ff:ff:ff:23)
* eth2 - внутренний интерфейс (служебный, только для failover, 192.168.2.12/24)
iptables на front-ах, доступ в интернет из локалки + проброс ssh front:220022 -> backend:22
<pre>
-A PREROUTING -d 192.168.0.31/32 -p tcp -m tcp --dport 22022 -j DNAT --to-destination 192.168.1.100:22
-A OUTPUT -s 192.168.0.31/32 -d 192.168.0.31/32 -p tcp -m tcp --dport 22022 -j DNAT --to-destination 192.168.1.100:22
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 192.168.0.31
</pre>
Важно: на фронтендах mac и ip eth0 должны совпадать, маки и ip eth1 должны совпадать
*backend*, где:
* eth0 - 192.168.1.100/24 default gw 192.168.1.10
h2. config conntrackd на фронтах
cp /usr/share/doc/conntrackd/examples/sync/primary-backup.sh /etc/conntrackd/
cat /etc/conntrackd/conntrackd.conf
<pre>
Sync {
Mode NOTRACK {
# настройки таймингов итп.
}
Multicast {
IPv4_address 225.0.0.50
Group 3780
IPv4_interface 192.168.2.11 # на front1 /???/
# IPv4_interface 192.168.2.12 # на front2 /???/ глубже понять этот параметр
Interface eth2
SndSocketBuffer 1249280
RcvSocketBuffer 1249280
Checksum on
}
}
General {
HashSize 8192
HashLimit 65535
Syslog on
LockFile /var/lock/conntrackd.lock
UNIX {
Path /var/run/conntrackd.sock
Backlog 20
}
SocketBufferSize 262142
SocketBufferSizeMaxGrown 655355
Filter {
Protocol Accept {
TCP
}
Address Ignore {
IPv4_address 127.0.0.1 # loopback
IPv4_address 92.168.2.0/24 # sync locale
}
}
}
</pre>
h2. ucarp на фронтах
cat /etc/network/interfaces
<pre>
auto lo
iface lo inet loopback
#auto eth0
iface eth0 inet static
address 192.168.0.31/24
gateway 192.168.0.1
dns-nameservers 77.88.8.8 77.88.8.1
#auto eth1
iface eth1 inet static
address 192.168.1.10
auto eth2
iface eth2 inet static
address 192.168.2.12/24 # для front1
# address 192.168.2.12/24 # для front2
ucarp-vid 22
ucarp-password mysecret5
ucarp-vip 192.168.0.31
ucarp-downscript /etc/network/ucarp/down.sh
ucarp-upscript /etc/network/ucarp/up.sh
ucarp-master no
ucarp-advskew 2
</pre>
cat /etc/network/ucarp/down.sh
<pre>
#!/bin/bash
/etc/conntrackd/primary-backup.sh backup
/sbin/ifdown eth0
/sbin/ifdown eth1
</pre>
cat /etc/network/ucarp/up.sh
<pre>
#!/bin/bash
/etc/conntrackd/primary-backup.sh primary
/sbin/ifup eth0
arping -i eth0 -c1 ff:ff:ff:ff:ff:ff # /???/ постараться избавиться от этого
/sbin/ifup eth1
arping -i eth1 -c1 ff:ff:ff:ff:ff:ff # /???/ постараться избавиться от этого
/etc/init.d/dnsmasq start
/etc/init.d/nginx start
</pre>
полезные комманды
* pkill -USR1 ucapr # показать статус ucarp в syslog, пример: ucarp[1754]: [INFO] MASTER on eth2 id 22
* conntrackd -i # показать локальные conntrack соединения
* conntrackd -e # показать внешние conntrack соединения
полезные ссылки
* http://conntrack-tools.netfilter.org/manual.html
* http://www.ucarp.org/
* https://habrahabr.ru/post/137476/