天天看點

建構高可用伺服器之五 Keepalive備援LVS

    LVS隻是做一個負載均衡,通過通路VIP來通路後端的網站程式,一旦LVS當機,整個網站就通路不了,這就出現了單點。是以要結合keepalive這種高可用軟體來保證整個網站的高可用。本文将介紹如何利用keepalive來實作LVS的高可用(以LVS的DR模式為例,生産環境背景的real server 網站内容是一緻的,為了看到實驗效果,這裡是兩個不同的頁面)。 

一、環境介紹

VIP:192.168.1.188

RIP1(Web1): 192.168.1.2

RIP2(Web2): 192.168.1.5

LVS1 :192.168.1.6

LVS2: 192.168.1.7

web1頁面

<a href="http://s3.51cto.com/wyfs02/M00/6D/89/wKioL1Vlx4HRVzwsAAB4QQhSn2A022.jpg" target="_blank"></a>

web2頁面

<a href="http://s3.51cto.com/wyfs02/M00/6D/8D/wKiom1VlxfGT8hXeAAB26U4-POA544.jpg" target="_blank"></a>

二、配置realserver

分别在web1和web2上執行lvs_rserver.sh

1

2

3

4

5

6

<code>[root@web1 ~]</code><code># ./lvs_rserver.sh  start</code>

<code>RealServer Start OK</code>

<code>[root@web1 ~]</code><code>#</code>

<code>[root@web2 ~]</code><code># ./lvs_rserver.sh  start</code>

<code>[root@web2 ~]</code><code>#</code>

lvs_rserver.sh腳本内容如下:

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

<code>[root@web1 ~]</code><code># cat lvs_rserver.sh</code>

<code>#!/bin/sh</code>

<code>#LVS Client Server</code>

<code>VIP=192.168.1.188</code>

<code>case</code> <code>$1  </code><code>in</code>                                                                                                                                                                                                                                                   

<code>start)                                                                                                                                                                                                                                           </code>

<code>   </code><code>ifconfig</code> <code>lo:0  $VIP  netmask  255.255.255.255  broadcast  $VIP</code>

<code>   </code><code>/sbin/route</code>  <code>add –host  $VIP  dev lo:0</code>

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

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

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

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

<code>   </code><code>sysctl -p &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>   </code><code>echo</code> <code>"RealServer Start OK"</code>

<code>   </code><code>exit</code> <code>0</code>

<code>;;                                                                                                                                                                                                                                        </code>

<code>stop)</code>

<code>   </code><code>ifconfig</code> <code>lo:0 down</code>

<code>   </code><code>route del $VIP &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

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

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

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

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

<code>   </code><code>echo</code> <code>"RealServer Stoped OK"</code>

<code>   </code><code>exit</code> <code>1</code>

<code>;;</code>

<code>*)</code>

<code>   </code><code>echo</code> <code>"Usage: $0 {start|stop}"</code>

<code>esac</code>

三、安裝配置lvs及keepalive

分别在lvs1和lvs2上安裝lvs及keepalive

在lvs1和lvs2上配置VIP并加載相關子產品

<code>[root@lvs1 ~]</code><code># ifconfig eth0:0192.168.1.188 netmask 255.255.255.0</code>

<code>[root@lvs1 ~]</code><code># modprobe ip_vs</code>

<code>[root@lvs1 ~]</code><code># modprobe ip_vs_rr</code>

<code>[root@lvs1 ~]</code><code># modprobe ip_vs_wrr</code>

<code>[root@lvs1 ~]</code><code>#</code>

<code>[root@lvs2 ~]</code><code># ifconfig eth0:0192.168.1.188 netmask 255.255.255.0</code>

<code>[root@lvs2 ~]</code><code># modprobe ip_vs</code>

<code>[root@lvs2 ~]</code><code># modprobe ip_vs_rr</code>

<code>[root@lvs2 ~]</code><code># modprobe ip_vs_wrr</code>

<code>[root@lvs2 ~]</code><code>#</code>

在lvs1上修改keepalive.conf檔案,修改後内容如下

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

<code>[root@lvs1 ~]</code><code># vim/etc/keepalived/keepalived.conf</code>

<code>[root@lvs1 ~]</code><code># cat/etc/keepalived/keepalived.conf</code>

<code>! Configuration File </code><code>for</code> <code>keepalived</code>

<code> </code> 

<code>global_defs {</code>

<code>   </code><code>notification_email {</code>

<code>     </code><code>[email protected]</code>

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

<code>  </code><code>notification_email_from [email protected]</code>

<code>  </code><code>smtp_server 127.0.0.1</code>

<code>  </code><code>smtp_connect_timeout 30</code>

<code>  </code><code>router_id LVS_DEVEL</code>

<code>}</code>

<code># VIP1</code>

<code>vrrp_instance VI_1 {</code>

<code>   </code><code>state MASTER</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 100</code>

<code>   </code><code>advert_int 5</code>

<code>   </code><code>nopreempt</code>

<code>   </code><code>authentication {</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.1.188  </code>

<code>virtual_server 192.168.1.188 80 {</code>

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

<code>   </code><code>lb_algo wrr   </code>

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

<code>#   persistence_timeout 60   </code>

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

<code>   </code><code>real_server 192.168.1.2 80 {</code>

<code>       </code><code>weight 100       </code>

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

<code>       </code><code>connect_timeout 10</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.1.5 80 {</code>

<code>       </code><code>weight 100</code>

<code>       </code> 

lvs2上的keepalive.conf檔案基本和lvs1上的一緻,但是state這一項lvs1上是MASTER,而lvs2上的BACKUP;優先級priority在lvs1上為100,在lvs2上為90

在lvs2上修改keepalive.conf檔案,修改後内容如下

<code>[root@lvs2 ~]</code><code># cat/etc/keepalived/keepalived.conf</code>

<code>  </code><code>notification_email {</code>

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

<code>     </code><code>priority 90</code>

四、測試

停掉lvs1的網卡

去ping VIP一樣一直在通信(配置有nopreempt)

<a href="http://s3.51cto.com/wyfs02/M01/6D/8D/wKiom1VlxjbCuoE_AAKXVkxtx28353.jpg" target="_blank"></a>

通過VIP通路網站

<a href="http://s3.51cto.com/wyfs02/M02/6D/89/wKioL1Vlx8jAZwxQAAC-GF1rLm0878.jpg" target="_blank"></a>

重新整理

<a href="http://s3.51cto.com/wyfs02/M02/6D/89/wKioL1Vlx8nzo7YPAACYbDYOU9o621.jpg" target="_blank"></a>

即使lvs1當機後又恢複,此時依舊是通過lvs2通路(由是否配置nopreempt決定)。

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

繼續閱讀