HA fronend ucarp + conntrackd » История » Редакция 6
Редакция 5 (Константин Пильник, 2017-01-31 16:39) → Редакция 6/8 (Константин Пильник, 2017-01-31 16:40)
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 1 # приоритет ucarp-advbase 1 # 1сек 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, пример: [INFO] MASTER on eth2 id 22 * pkill -USR2 ucarp # переключить ucarp в режим BACKUP * conntrackd -i # показать локальные conntrack соединения * conntrackd -e # показать внешние conntrack соединения полезные ссылки * http://conntrack-tools.netfilter.org/manual.html * http://www.ucarp.org/ * https://habrahabr.ru/post/137476/