HA fronend ucarp + conntrackd » История » Редакция 7
« Предыдущее |
Редакция 7/8
(Разница(diff))
| Следующее »
Константин Пильник, 2017-01-31 16:43
HA fronend: ucarp + conntrackd¶
Данная схема позволяет построить фронтенд высокой доступности, имеющий на борту SNAT/DNAT.
Подразумевается что активен всегда front1 , при его недоступности в работу вступает front2,
при этом, пользователи, подключенные к ssh бэкенда через фронт, а так-же все соединения с
'интернет' на бэкенде не обрываются.
дано¶
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)
- 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
-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
Важно: на фронтендах mac и ip eth0 должны совпадать, маки и ip eth1 должны совпадать backend, где:
- eth0 - 192.168.1.100/24 default gw 192.168.1.10
config conntrackd на фронтах¶
cp /usr/share/doc/conntrackd/examples/sync/primary-backup.sh /etc/conntrackd/
cat /etc/conntrackd/conntrackd.conf
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 } } }
ucarp на фронтах¶
cat /etc/network/interfaces
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 gateway 192.168.2.1 # доступ в интернет в режиме BACKUP dns-nameservers 77.88.8.8 77.88.8.1 metric 10 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 1 # приоритет ucarp-advbase 1 # 1сек
cat /etc/network/ucarp/down.sh
#!/bin/bash /etc/conntrackd/primary-backup.sh backup /sbin/ifdown eth0 /sbin/ifdown eth1
cat /etc/network/ucarp/up.sh
#!/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полезные комманды
- pkill -USR1 ucapr # показать статус ucarp в syslog, пример: [INFO] MASTER on eth2 id 22
- pkill -USR2 ucarp # переключить ucarp в режим BACKUP
- conntrackd -i # показать локальные conntrack соединения
- conntrackd -e # показать внешние conntrack соединения
Обновлено Константин Пильник почти 8 года назад · 8 изменени(я, ий)