天天看點

結合keepalived實作lvs的高可用群集故障自動轉移

<a href="http://s3.51cto.com/wyfs02/M02/25/08/wKioL1NYv73gECSrAAEb5uB9sDc275.jpg" target="_blank"></a>

直上幹活

dr1上keepalived的配置:

/etc/keepalived/keepalived.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<code>global_defs {</code>

<code>                </code><code>router_id LVS1          </code><code># 設定lvs的id,在一個網絡内應該是唯一的</code>

<code>}</code>

<code>vrrp_sync_group </code><code>test</code> <code>{           </code><code>#設定vrrp組</code>

<code>        </code><code>group {</code>

<code>        </code><code>loadbalance</code>

<code>        </code><code>}</code>

<code>vrrp_instance loadbalance {</code>

<code>        </code><code>state MASTER       </code><code>#設定lvs的狀态,報錯MASTER和BACKUP兩種,必須大寫</code>

<code>        </code><code>interface eth0     </code><code>#設定對外服務的接口</code>

<code>        </code><code>lvs_sync_daemon_inteface eth0   </code><code>#設定lvs監聽的接口</code>

<code>        </code><code>virtual_router_id 51                     </code><code>#設定虛拟路由表示</code>

<code>        </code><code>priority 180            </code><code>#設定優先級,數值越大,優先級越高</code>

<code>        </code><code>advert_int 1           </code><code>#設定同步時間間隔</code>

<code>        </code><code>authentication {                    </code><code>#設定驗證類型和密碼</code>

<code>                </code><code>auth_type PASS</code>

<code>                </code><code>auth_pass 1111</code>

<code>                </code><code>}</code>

<code>        </code><code>virtual_ipaddress {</code>

<code>                </code><code>192.168.56.200</code>

<code>virtual_server 192.168.56.200 80 {</code>

<code>        </code><code>delay_loop 6          </code><code>#健康檢查時間間隔</code>

<code>        </code><code>lb_algo rr               </code><code>#負載均衡排程算法</code>

<code>        </code><code>lb_kind DR            </code><code>#負載均衡轉發規則</code>

<code>        </code><code>#persistence_timeout 20  #設定會話保持時間,對bbs等很有用</code>

<code>        </code><code>protocol TCP                </code><code>#協定</code>

<code>        </code><code>real_server 192.168.56.105 80 {</code>

<code>        </code><code>weight 3                </code><code>#設定權重</code>

<code>                </code><code>TCP_CHECK {</code>

<code>                        </code><code>connect_timeout 3</code>

<code>                        </code><code>nb_get_retry 3</code>

<code>                        </code><code>delay_before_retry 3</code>

<code>                        </code><code>connect_port 80</code>

<code>                        </code><code>}</code>

<code>        </code><code>real_server 192.168.56.106 80 {</code>

<code>                </code><code>weight 3</code>

dr2上keepalived的配置

<code>        </code><code>router_id LVS2</code>

<code>vrrp_sync_group </code><code>test</code> <code>{</code>

<code>                </code><code>loadbalance</code>

<code>        </code><code>state BACKUP</code>

<code>        </code><code>interface eth0</code>

<code>        </code><code>lvs_sync_daemon_inteface eth0</code>

<code>        </code><code>virtual_router_id 51</code>

<code>        </code><code>priority 150</code>

<code>        </code><code>advert_int 1</code>

<code>        </code><code>authentication {</code>

<code>                        </code><code>auth_pass 1111</code>

<code>        </code><code>delay_loop 6</code>

<code>        </code><code>lb_algo rr</code>

<code>        </code><code>lb_kind DR</code>

<code>        </code><code>#persistence_timeout 20</code>

<code>        </code><code>protocol TCP</code>

<code>}}</code>

啟動dr1上的keepalived

keepalived -f /etc/keepalived/keepalived.conf

檢視資訊

<a href="http://s3.51cto.com/wyfs02/M00/25/09/wKiom1NYxvOCmHcMAAMoNVxBFyc582.jpg" target="_blank"></a>

然後啟動dr2上keepalived

<a href="http://s3.51cto.com/wyfs02/M01/25/09/wKiom1NYx8nhl4n1AAKaKoioS3c510.jpg" target="_blank"></a>

在realserver1與realserver2上分别執行下面的腳本

/home/lhb/sh/rs.sh

<code>#!/bin/bash</code>

<code>vip=192.168.56.200</code>

<code>ifconfig</code> <code>lo:0 $vip netmask 255.255.255.255</code>

<code>route add -host $vip dev lo:0</code>

<code>route -n</code>

<code>echo</code> <code>"1"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>

<code>echo</code> <code>"2"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>

<code>echo</code> <code>"1"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>echo</code> <code>"2"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>#sysctl -p  #檢視sysctl的配置變化,可不執行</code>

<a href="http://s3.51cto.com/wyfs02/M00/25/09/wKiom1NYyDXTImz2AAHTkozDMno067.jpg" target="_blank"></a>

然後我們開一個用戶端方位vip:

<a href="http://s3.51cto.com/wyfs02/M00/25/09/wKioL1NYyHXA8U9yAAHUq-ZWgvc199.jpg" target="_blank"></a>

在dr1上執行ipvsadm -ln

<a href="http://s3.51cto.com/wyfs02/M02/25/09/wKioL1NYyNfy7pCqAAEA0Z0Mlx0814.jpg" target="_blank"></a>

然後我們在dr1上關閉keepalived

<a href="http://s3.51cto.com/wyfs02/M01/25/09/wKioL1NYydfA9cLFAAXOgO94ZwQ400.jpg" target="_blank"></a>

這是我們繼續通路vip,通路正常如圖所示:

<a href="http://s3.51cto.com/wyfs02/M02/25/09/wKiom1NYynOAM32jAAJeU8RHV4Q819.jpg" target="_blank"></a>

通路正常,說明web業務沒有停止:

由此推斷我們的dr2已經開始接管業務了.然後到dr2上看一下資訊:

<a href="http://s3.51cto.com/wyfs02/M00/25/09/wKiom1NYyzzws4yBAALlXvAOuwE270.jpg" target="_blank"></a>

說明故障發生時,業務服務已經自動從dr1轉移到dr2上了。

然後當我們的dr1修複好後,我們執行keepalived -f /etc/keepalived/keepalived.conf

<a href="http://s3.51cto.com/wyfs02/M01/25/09/wKioL1NYzDTz3s0PAANmoNF-YaQ951.jpg" target="_blank"></a>

此時通路vip,業務仍然正常通路.

回到dr2上看資訊

<a href="http://s3.51cto.com/wyfs02/M01/25/09/wKioL1NYzLCgcPMsAAGgGIJqWv8612.jpg" target="_blank"></a>

到此為止,keepalived實作lvs的故障在主備機自動切換已經展示完畢。

本文轉自birdinroom 51CTO部落格,原文連結:http://blog.51cto.com/birdinroom/1402004,如需轉載請自行聯系原作者

繼續閱讀