keepalived+lvs實現lvs的高可用

keepalived+lvs實現lvs的高可用

keepalived的介紹:      

keepalived是借用VRRP協議來實現高可用性的,VRRP協議是解決單點故障,使路由器和層三交換機實現冗餘功能。

wKiom1QgCO2iQb0XAAaUjNv3LMc633.bmp

keepalived啓動後會有三個進程

父進程:內存管理,子進程管理等等

子進程:VRRP子進程

子進程:healthchecker子進程

從圖上可以看出,兩個子進程都被系統WatchDog看管,兩個子進程各自操作自己的事,healthchecker子進程負責檢查各自服務器的健康程度,例如HTTPLVS等等,如果healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的VRRP子進程,讓他刪除通告,並且去掉虛擬IP,轉換爲BACKUP狀態

 

爲什麼要用keepalived+lvs

lvs是一個在四層上實現後端realserver的負載均衡的集羣,lvs遺留下兩個問題,一個是lvs的單點故障; 第二個是lvs不能檢測後端realserver的健康狀態檢查。

解決lvs的單點故障就用到了高可用集羣:

、可以是heartbeat+ldirectord這種重量級的;

、可以是keepalived+lvs這種輕量級的解決方案。(本博客主要寫keepalived+lvs輕量級的解決方案),

解決lvs不能檢測後端realserver的健康狀態也後很多種方法:

、可以在lvs上寫腳本ping後端realserverip地址,ping幾次發現ip地址ping不通則在ipvs規則裏面刪除,當 後端服務器可以ping了,則把後端realserver添加到ipvs規則裏面。

、可以在lvs上寫腳本請求後端realserver的測試幾次網頁文件,查看狀態碼是否爲200,不是則在ipvs規則 裏面清楚,當測試網頁返回的狀態嗎是200之後,則把後端realserver添加到ipvs規則裏面

、以上兩種方法都是依賴於腳本,keepalived的出現解決了不依賴於腳本,也可以對後端realserver的健康狀態 檢查,keepalived的配置文件裏面可以自行生成ipvs的規則,並且自行檢測後端realserver的狀態,當後端realserver 不能提供服務了,keepalived會自行將其在ipvs規則裏面刪除,當後端realserver可以提供服務了,又自行的在ipvs 規則裏面添加。

實驗環境:

OSCentos 6.5

yum:

[centos]

name=sohu-centos

baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch

gpgcheck=1

enable=0

gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6

[epel]

name=sohu-epel

baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/

enable=1

gpgcheck=0

實驗拓撲圖: 

wKioL1QgCUTAapGrAAraRIHj118679.bmp

拓撲圖的規劃:


IP 地址

軟件

Master

172.16.22.1(VIP 172.16.22.100)

keepalived+ipvsadm

Backup

172.16.22.2(VIP 172.16.22.100)

keepalived+ipvsadm

apache1

172.16.22.3(VIP 172.16.22.100)

httpd

apache2

172.16.22.4(VIP 172.16.22.100)

httpd

注:Master  Backup 上面安裝 ipvsadm 主要是爲了查看 ipvs 的規則

一、安裝配置操作

Master

1、安裝(博主這裏用rpm包安裝,各位朋友可以用源碼編譯安裝keepalived)

[root@localhost ~]# yum -y installkeepalived ipvsadm

2、修改配置文件

[root@localhost ~]# cd/etc/keepalived/

[root@localhost keepalived]# vimkeepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

     root@localhost  #設置報警郵件地址,即收件人地址

   }

  notification_email_from admin@hyd  #設置郵件的發送地址

   smtp_server 127.0.0.1  #設置smtp serverip地址

  smtp_connect_timeout 30#設置連接smtp server的超時時間

   router_idLTT   #表示運行keepalived服務器的一個標識,名字可以隨便取,名字會顯示在發郵件時郵件的主題信息

}

vrrp_instance IN_1 {

    state MASTER  #指定keepalived的角色,此服務爲master

    interface eth0  #指定監測網絡的接口

    virtual_router_id22#虛擬路由的標識

    priority 100  #定義優先級,數字越大優先級越高,1-255之間

    advert_int 1  #設置同步檢查的時間間隔,單位是秒

    authentication{ #設置驗證類型

        auth_typePASS  #驗證類型爲PASS

        auth_passaaaa  #驗證的密碼

    }

   virtual_ipaddress {

        172.16.22.100   #設置虛擬IP

    }

}

virtual_server 172.16.22.10080#定義虛擬服務器,需指定虛擬ip和端口

    delay_loop 6   #設置健康檢查時間,單位爲秒

    lb_algowrr     #設置負載調度算法,此處爲加權輪叫算法

    lb_kind DR      #設置LVS實現負載均衡的模式

    nat_mask 255.255.0.0#設置子網掩碼

    protocolTCP      #設置轉發協議的類型

    real_server 172.16.22.180#定義realserver,需指定ip和端口

        weight 1    #指定權重

        HTTP_GET{  #設置檢測後端realserver的方式爲獲取http協議報文

            url {

              path/

             status_code 200  #狀態碼爲200則證明後端服務器是在線的

           }

            connect_timeout3  #設置超時時間

           nb_get_retry 3    #設置超時時候重試幾次

           delay_before_retry 3#在重試的時候的時間間隔

        }

    }

    real_server 172.16.22.280 {

        weight 1

        HTTP_GET {

            url {

              path/

                status_code200

           }

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

        }

    }

}

[root@localhost keepalived]# scpkeepalived.conf 172.16.22.2:/etc/keepalived/

  #把配置文件copybackup服務器上

3、開啓服務 

[root@localhost keepalived]# servicekeepalived start

Startingkeepalived:                                       [  OK  ]

[root@localhost keepalived]# chkconfig--add keepalived

[root@localhost keepalived]# chkconfigkeepalived on

Backup

1、安裝

[root@hyd ~]# yum -y install keepalived ipvsadm

2、修改配置文件

[root@hyd ~]# cd /etc/keepalived/

[root@hyd keepalived]# vim keepalived.conf   #此配置文件是從Master服務器上copy過來,只需小小改動

    state BACKUP #把這裏原先的MASTER改成BACKUP

    priority 99  #把這裏原先的100改成99

3、開啓服務 

[root@hyd keepalived]# service keepalived start

Startingkeepalived:                                       [  OK  ]

[root@hyd keepalived]# chkconfig --add keepalived

[root@hyd keepalived]# chkconfig keepalived on

apache1

1、安裝(博主這裏用rpm包安裝,各位朋友可以用源碼編譯安裝)

[root@hyd1 ~]# yum -y install httpd

2、建立測試網頁文件

[root@hyd1 ~]# cd /var/www/html/

[root@hyd1 html]# cat index.html #建一個測試網頁

<h1>this is apache1</h1>

3、開啓服務

[root@hyd1 html]# service httpd start

Startinghttpd:                 [  OK  ]

[root@hyd1 html]# chkconfig --add httpd

[root@hyd1 html]# chkconfig httpd on

4、修改內核參數和配置vip

[root@hyd1 html]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@hyd1 html]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

[root@hyd1 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@hyd1 html]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

[root@hyd1 html]# ifconfig lo:1 172.16.22.100 broadcast172.16.22.100 netmask 255.255.255.255 up

[root@hyd1 html]# route add -host 172.16.22.100 dev lo:1

apache2

1、安裝(博主這裏用rpm包安裝,各位朋友可以用源碼編譯安裝)

[root@hyd2 ~]# yum -y install httpd

2、建立測試網頁文件 

[root@hyd2 ~]# cd /var/www/html/

[root@hyd2 html]# cat index.html #建一個測試網頁

<h1>this is apache2</h1>

3、開啓服務 

[root@hyd2 html]# service httpd start

Startinghttpd:                 [  OK  ]

[root@hyd2 html]# chkconfig --add httpd

[root@hyd2 html]# chkconfig httpd on

4、修改內核參數和配置vip 

[root@hyd2 html]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@hyd2 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@hyd2 html]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

[root@hyd2 html]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

[root@hyd2 html]# ifconfig lo:1 172.16.22.100 broadcast172.16.22.100 netmask 255.255.255.255 up

[root@hyd2 html]# route add -host 172.16.22.100 dev lo:1

此致所有安裝已經完成。

二、相關的測試:

查看相關的vip和ipvs規則 

wKiom1QgCWygRwFgAAhbjDjt2yQ618.bmp

測試後端realserver是否可以訪問:

apache1可以訪問

wKioL1QgCa3RUwmoAATKZE1B1vw476.bmp

apache2可以訪問

wKiom1QgCazh_9N4AAMBWKFMadM009.bmp

而且是根據wrr算法,平均負載到realserver 

停掉Masterkeepalived服務,vipipvs規則切換到Backup服務器上

wKioL1QgCfDhI53nAAdUKCqBryk325.bmp

停掉apache1的服務,看ipvs的規則是否清除,顯示已經清楚規則

[root@hyd1 html]# service httpd stop

Stoppinghttpd:                                            [  OK  ]

[root@hyd ~]# ipvsadm -L -n

IPVirtualServer version 1.2.1 (size=4096)

ProtLocalAddress:PortSchedulerFlags

  -> RemoteAddress:Port           ForwardWeightActiveConnInActConn

TCP  172.16.22.100:80 wrr

  -> 172.16.22.4:80               Route  1      0         0

開啓apache1的服務,ipvs自動將其又添加上

[root@hyd1 html]# service httpd start

Starting httpd:                 [  OK  ]

[root@hyd ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP  172.16.22.100:80 wrr

  -> 172.16.22.3:80               Route   1     0          0      

  -> 172.16.22.4:80               Route   1     0          0

此致,keepalived實現lvs的高可用已經完成,可以自動的故障轉移

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章