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/ |