Проект

Общее

Профиль

HA fronend ucarp + conntrackd » История » Редакция 4

Редакция 3 (Константин Пильник, 2017-01-30 17:59) → Редакция 4/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/