Проект

Общее

Профиль

HA fronend ucarp + conntrackd » История » Версия 4

Константин Пильник, 2017-01-30 17:59

1 1 Константин Пильник
h1. HA fronend: ucarp + conntrackd
2
3
Данная схема позволяет построить фронтенд высокой доступности, имеющий на борту SNAT/DNAT.
4
Подразумевается что активен всегда front1 , при его недоступности в работу вступает front2,
5
при этом, пользователи, подключенные к ssh бэкенда через фронт, а так-же все соединения с
6
'интернет' на бэкенде не обрываются.
7
8
h2. дано
9
10
*frontend1*, где:
11
* eth0 - внешний интерфейс (интернет, условно 192.168.0.31/24, mac:50:ff:ff:ff:ff:22)
12
* eth1 - внутренний интерфейс (локалка 192.168.1.10/24, mac:50:ff:ff:ff:ff:23)
13
* eth2 - внутренний интерфейс (служебный, только для failover, 192.168.2.11/24)
14
15
*frontend2*, где:
16
* eth0 - внешний интерфейс (интернет, условно 192.168.0.31/24, mac:50:ff:ff:ff:ff:22)
17
* eth1 - внутренний интерфейс (локалка 192.168.1.10/24, mac:50:ff:ff:ff:ff:23)
18
* eth2 - внутренний интерфейс (служебный, только для failover, 192.168.2.12/24)
19
20
iptables на front-ах, доступ в интернет из локалки + проброс ssh front:220022 -> backend:22
21
<pre>
22
-A PREROUTING -d 192.168.0.31/32 -p tcp -m tcp --dport 22022 -j DNAT --to-destination 192.168.1.100:22
23
-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
24
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 192.168.0.31
25
</pre>
26
Важно: на фронтендах mac и ip eth0 должны совпадать, маки и ip eth1 должны совпадать
27
28
*backend*, где:
29
* eth0 - 192.168.1.100/24 default gw 192.168.1.10
30
31
h2. config conntrackd на фронтах
32
33
cp /usr/share/doc/conntrackd/examples/sync/primary-backup.sh /etc/conntrackd/
34
cat /etc/conntrackd/conntrackd.conf
35
<pre>
36
Sync {
37
	Mode NOTRACK {
38
# настройки таймингов итп.
39
	}
40
	Multicast {
41
		IPv4_address 225.0.0.50
42
		Group 3780
43
		IPv4_interface 192.168.2.11 # на front1 /???/
44
#		IPv4_interface 192.168.2.12 # на front2 /???/ глубже понять этот параметр
45
		Interface eth2
46
		SndSocketBuffer 1249280
47
		RcvSocketBuffer 1249280
48
		Checksum on
49
	}
50
}
51
General {
52
	HashSize 8192
53
	HashLimit 65535
54
	Syslog on
55
	LockFile /var/lock/conntrackd.lock
56
	UNIX {
57
		Path /var/run/conntrackd.sock
58
		Backlog 20
59
	}
60
	SocketBufferSize 262142
61
	SocketBufferSizeMaxGrown 655355
62
	Filter {
63
		Protocol Accept {
64
			TCP
65
		}
66
		Address Ignore {
67
			IPv4_address 127.0.0.1 # loopback
68
			IPv4_address 92.168.2.0/24 # sync locale
69
		}
70
	}
71
}
72
</pre>
73
74
h2. ucarp на фронтах
75
76
cat /etc/network/interfaces 
77
<pre>
78
auto lo
79
iface lo inet loopback
80
81
#auto eth0
82
iface eth0 inet static
83
        address 192.168.0.31/24
84
	gateway 192.168.0.1
85
	dns-nameservers 77.88.8.8 77.88.8.1
86
87
#auto eth1
88
iface eth1 inet static
89
        address 192.168.1.10
90
91
auto eth2
92
iface eth2 inet static
93
        address 192.168.2.12/24 # для front1
94
#        address 192.168.2.12/24 # для front2
95
	ucarp-vid 22
96
	ucarp-password mysecret5
97
	ucarp-vip 192.168.0.31
98
	ucarp-downscript /etc/network/ucarp/down.sh
99
	ucarp-upscript /etc/network/ucarp/up.sh	
100
	ucarp-master no
101
	ucarp-advskew 2
102
</pre>
103
104
cat /etc/network/ucarp/down.sh
105
<pre>
106
#!/bin/bash
107
108
/etc/conntrackd/primary-backup.sh backup
109
110
/sbin/ifdown eth0
111
/sbin/ifdown eth1
112
</pre>
113
114
cat /etc/network/ucarp/up.sh
115
<pre>
116
#!/bin/bash
117
118
/etc/conntrackd/primary-backup.sh primary
119
120
/sbin/ifup eth0
121
arping -i eth0 -c1 ff:ff:ff:ff:ff:ff # /???/ постараться избавиться от этого
122
123
/sbin/ifup eth1
124
arping -i eth1 -c1 ff:ff:ff:ff:ff:ff # /???/ постараться избавиться от этого
125
126
/etc/init.d/dnsmasq start
127
/etc/init.d/nginx start
128
</pre>
129 2 Константин Пильник
130 3 Константин Пильник
полезные комманды
131 4 Константин Пильник
* pkill -USR1 ucapr # показать статус ucarp в syslog, пример: [INFO] MASTER on eth2 id 22
132 3 Константин Пильник
* conntrackd -i # показать локальные conntrack соединения
133
* conntrackd -e # показать внешние conntrack соединения
134
135 2 Константин Пильник
полезные ссылки
136
* http://conntrack-tools.netfilter.org/manual.html
137
* http://www.ucarp.org/
138
* https://habrahabr.ru/post/137476/