keepalived+lvs實現lvs的高可用html
keepalived的介紹:nginx
keepalived是借用VRRP協議來實現高可用性的,VRRP協議是解決單點故障,使路由器和層三交換機實現冗餘功能。算法
keepalived啓動後會有三個進程apache
父進程:內存管理,子進程管理等等vim
子進程:VRRP子進程後端
子進程:healthchecker子進程centos
從圖上能夠看出,兩個子進程都被系統WatchDog看管,兩個子進程各自操做本身的事,healthchecker子進程負責檢查各自服務器的健康程度,例如HTTP,LVS等等,若是healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的VRRP子進程,讓他刪除通告,而且去掉虛擬IP,轉換爲BACKUP狀態bash
爲何要用keepalived+lvs?服務器
lvs是一個在四層上實現後端realserver的負載均衡的集羣,lvs遺留下兩個問題,一個是lvs的單點故障;第二個是lvs不能檢測後端realserver的健康狀態檢查。網絡
解決lvs的單點故障就用到了高可用集羣:
①、能夠是heartbeat+ldirectord這種重量級的;
②、能夠是keepalived+lvs這種輕量級的解決方案。(本博客主要寫keepalived+lvs輕量級的解決方案),
解決lvs不能檢測後端realserver的健康狀態也後不少種方法:
①、能夠在lvs上寫腳本ping後端realserver的ip地址,ping幾回發現ip地址ping不通則在ipvs規則裏面刪除,當後端服務器能夠ping了,則把後端realserver添加到ipvs規則裏面。
②、能夠在lvs上寫腳本請求後端realserver的測試幾回網頁文件,查看狀態碼是否爲200,不是則在ipvs規則裏面清楚,當測試網頁返回的狀態嗎是200以後,則把後端realserver添加到ipvs規則裏面
③、以上兩種方法都是依賴於腳本,keepalived的出現解決了不依賴於腳本,也能夠對後端realserver的健康狀態檢查,keepalived的配置文件裏面能夠自行生成ipvs的規則,而且自行檢測後端realserver的狀態,當後端realserver不能提供服務了,keepalived會自行將其在ipvs規則裏面刪除,當後端realserver能夠提供服務了,又自行的在ipvs規則裏面添加。
實驗環境:
OS:Centos 6.4(redhat 6.4)
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
實驗拓撲圖:
拓撲圖的規劃:
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的規則
1、安裝配置操做
Master:
一、安裝(博主這裏用rpm包安裝,各位朋友能夠用源碼編譯安裝keepalived)
[root@jie1 ~]# yum -y install keepalived ipvsadm
二、修改配置文件
[root@jie1 ~]# cd /etc/keepalived/ [root@jie1 keepalived]# vim keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost #設置報警郵件地址,即收件人地址 } notification_email_from admin@localhost #設置郵件的發送地址 smtp_server 127.0.0.1 #設置smtp server的ip地址 smtp_connect_timeout 30 #設置鏈接smtp server的超時時間 router_id LTT #表示運行keepalived服務器的一個標識,名字能夠隨便取,名字會顯示在發郵件時郵件的主題信息 } vrrp_instance IN_1 { state MASTER #指定keepalived的角色,此服務爲master interface eth0 #指定監測網絡的接口 virtual_router_id 22 #虛擬路由的標識 priority 100 #定義優先級,數字越大優先級越高,1-255之間 advert_int 1 #設置同步檢查的時間間隔,單位是秒 authentication { #設置驗證類型 auth_type PASS #驗證類型爲PASS auth_pass aaaa #驗證的密碼 } virtual_ipaddress { 172.16.22.100 #設置虛擬IP } } virtual_server 172.16.22.100 80 { #定義虛擬服務器,需指定虛擬ip和端口 delay_loop 6 #設置健康檢查時間,單位爲秒 lb_algo wrr #設置負載調度算法,此處爲加權輪叫算法 lb_kind DR #設置LVS實現負載均衡的模式 nat_mask 255.255.0.0 #設置子網掩碼 protocol TCP #設置轉發協議的類型 real_server 172.16.22.1 80 { #定義realserver,需指定ip和端口 weight 1 #指定權重 HTTP_GET { #設置檢測後端realserver的方式爲獲取http協議報文 url { path / status_code 200 #狀態碼爲200則證實後端服務器是在線的 } connect_timeout 3 #設置超時時間 nb_get_retry 3 #設置超時時候重試幾回 delay_before_retry 3 #在重試的時候的時間間隔 } } real_server 172.16.22.2 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@jie1 keepalived]# scp keepalived.conf 172.16.22.2:/etc/keepalived/ #把配置文件copy到backup服務器上
三、開啓服務
[root@jie1 keepalived]# service keepalived start Starting keepalived: [ OK ] [root@jie1 keepalived]# chkconfig --add keepalived [root@jie1 keepalived]# chkconfig keepalived on
Backup:
一、安裝
[root@jie2 ~]# yum -y install keepalived ipvsadm
二、修改配置文件
[root@jie2 ~]# cd /etc/keepalived/ [root@jie2 keepalived]# vim keepalived.conf #此配置文件是從Master服務器上copy過來,只需小小改動 state BACKUP #把這裏原先的MASTER改爲BACKUP priority 99 #把這裏原先的100改爲99
三、開啓服務
[root@jie2 keepalived]# service keepalived start Starting keepalived: [ OK ] [root@jie2 keepalived]# chkconfig --add keepalived [root@jie2 keepalived]# chkconfig keepalived on
apache1:
一、安裝(博主這裏用rpm包安裝,各位朋友能夠用源碼編譯安裝)
[root@jie3 ~]# yum -y install httpd
二、創建測試網頁文件
[root@jie3 ~]# cd /var/www/html/ [root@jie3 html]# cat index.html #建一個測試網頁 <h1>this is apache1</h1>
三、開啓服務
[root@jie3 html]# service httpd start Starting httpd: [ OK ] [root@jie3 html]# chkconfig --add httpd [root@jie3 html]# chkconfig httpd on
四、修改內核參數和配置vip
[root@jie3 html]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@jie3 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@jie3 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@jie3 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@jie3 html]# ifconfig lo:1 172.16.22.100 broadcast 172.16.22.100 netmask 255.255.255.255 up [root@jie3 html]# route add -host 172.16.22.100 dev lo:1
apache2:
一、安裝(博主這裏用rpm包安裝,各位朋友能夠用源碼編譯安裝)
[root@jie4 ~]# yum -y install httpd
二、創建測試網頁文件
[root@jie4 ~]# cd /var/www/html/ [root@jie4 html]# cat index.html #建一個測試網頁 <h1>this is apache2</h1>
三、開啓服務
[root@jie4 html]# service httpd start Starting httpd: [ OK ] [root@jie4 html]# chkconfig --add httpd [root@jie4 html]# chkconfig httpd on
四、修改內核參數和配置vip
[root@jie4 html]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@jie4 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@jie4 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@jie4 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@jie4 html]# ifconfig lo:1 172.16.22.100 broadcast 172.16.22.100 netmask 255.255.255.255 up [root@jie4 html]# route add -host 172.16.22.100 dev lo:1
此致全部安裝已經完成。
2、相關的測試:
查看相關的vip和ipvs規則
測試後端realserver是否能夠訪問:
apache1能夠訪問
apache2能夠訪問
並且是根據wrr算法,平均負載到realserver上
停掉Master的keepalived服務,vip和ipvs規則切換到Backup服務器上
停掉apache1的服務,看ipvs的規則是否清除,顯示已經清楚規則
[root@jie3 html]# service httpd stop Stopping httpd: [ OK ] [root@jie2 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.22.100:80 wrr -> 172.16.22.4:80 Route 1 0 0
開啓apache1的服務,ipvs自動將其又添加上
[root@jie3 html]# service httpd start Starting httpd: [ OK ] [root@jie2 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight 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的高可用已經完成,能夠自動的故障轉移,還能夠根據後端realserver的狀態,自動的修改其規則