前言
vrrp介紹:
vrrp(Virtual Router Redundancy Protocol)虛擬路由冗余協議;就是把多個路由器或多個網關設備加入到組中,然后在這一組中虛擬出一個路由器,此虛擬路由器有真是的IP和MAC地址,客戶端將網關指向此虛擬路由器的IP;客戶端向此虛擬路由器的IP和MAC地址發起請求時,由活動路由器負責響應;當活動路由器發生故障時,由備份路由器響應客戶端請求,同時備份路由器轉變為活動路由器,從而實現客戶端網關無縫切換,保證客戶端無感知情況下正常上網。
keepalived介紹:
keepalived就是vrrp協議在Linux主機上以守護進程方式的實現,能根據配置文件生成ipvs規則,不需要ipvsadm客戶端工具,還能對后端real server主機做健康狀態檢查,當real sever主機發生故障時,自動從ipvs中刪除;當故障real server恢復后,還可以自動加入到ipvs中;從而實現業務正常運轉。
keepalived官方結構圖如下所示:
一、安裝配置keepalived高可用lvs
1、實驗環境:
keepalived主機:
node1: 172.16.2.14/24
node2:172.16.2.13/24
web主機:
node3:172.16.2.12/24
Virtual:
Virtaul 1:172.16.2.15/24
2、安裝keepalived:
# yum -y install keepalived
2.1配置keepalived:
node1配置:
[root@node1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { \\全局定義 notification_email { \\定義郵件的接收者 node1@mylinux.com node2@mylinux.com notification_email_from root@mylinux.com \\定義郵件的發送者 smtp_server 127.0.0.1 \\定義郵件發送服務器 smtp_connect_timeout 30 \\定義與郵件服務器的連接超時時長 router_id LVS_DEVEL \\定義主機名稱,默認即可 } vrrp_instance mylinux_1 { \\定義實例,名稱為mylinux_1 state BACKUP \\為備份節點 interface eth0 \\工作在eth0接口 virtual_router_id 51 \\虛節點路由id,每個實例節點id不能相同 priority 98 \\優先級, advert_int 1 \\定義vrrp間隔時間 authentication { \\定義認證類型以及秘鑰 auth_type PASS \\常用的認證類型有PASS||AH auth_pass 111122233334444 \\定義秘鑰 } virtual_ipaddress { \\定義虛擬ip地址,也就是VIP地址 172.16.2.15/24 dev eth0 label eth0:0 }\\可以直接使用172.16.2.15不加其他選項是只能使用ip addr list查看,加上此參數可以使用ifconfig查看 virtual_routers { 定義路由 172.16.2.15/24 dev eth0:0 \\定義主機路由 } } virual_server 172.16.2.15 80 { \\定義ipvs dealay_loop 6 \\定義時延 lb_algo rr \\調度方法,常用的調度方法有rr|wrr|lc|wlc|lblc|sh|dh lb_kind DR \\ipvs的工作類型 persistence_timeout 10 \\持久連接為10s,可根據需求自定義 protocol TCP \\ipvs的協議 sorry_server 127.0.0.1 \\當后端所有real_server故障,使用本機web響應信息 real_server 172.16.2.12 80 { \\添加后端主機real_server weight 1 \\定義權重 HTTP_GET { \\在應用層,對后端real_server健康檢測 url { path / \\請求的url為根路徑 status_code 200 \\當返回的狀態碼為200時則證明此real_server正常;可以使用digest做校驗,前提是事先利用genhash對請求的url做hash,然后將結果保存到此位置 } connect_timeout 3 \\后端real_server連接超時時長 nb_get_retry 3 \\確定當重試多少次之后連接不到后端real_server認為其發生故障 delay_before_retry 3 \\在嘗試去連接時的時間間隔 } } }
node2節點配置:
[root@node2 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { node1@mylinux.com node2@mylinux.com } notification_email_from root@mylinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance mylinux_1 { state MASTER \\此處MASTER,為主節點 interface eth0 virtual_router_id 51 priority 100 \\優先級比backup要高 advert_int 1 authentication { auth_type PASS auth_pass 111122233334444 } virtual_ipaddress { 172.16.2.15/24 dev eth0 label eth0:0 } virtual_routers { 172.16.2.15/24 dev eth0:0 } } virual_server 172.16.2.15 80 { dealay_loop 6 lb_algo rr lb_kind DR persistence_timeout 10 protocol TCP sorry_server 127.0.0.1 real_server 172.16.2.12 80 { weight 1 HTTP_GET { url { status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
3、在node3安裝httpd服務
3.1安裝httpd服務
[root@node3 ~]# yum -y install httpd
3.2添加默認文檔
[root@node3 ~]# echo "<h1>test keepalived</h1>" >/var/www/html/index.html
3.3 修改node3的相關參數:
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
3.4 配置vip地址和主機路由:
[root@node3 ~]# ifconfig lo:0 172.16.2.15 broadcast 172.16.2.15 netmask 255.255.255.255 up [root@node3 ~]# route add -host 172.16.2.15 dev lo:0
3.5 啟動httpd
[root@node3 ~]# /etc/init.d/httpd start
3.5 訪問測試http是否可以正常訪問
4、 啟動keepalived
4.1 啟動
[root@node1 ~]# /etc/init.d/keepalived start; ssh node2 '/etc/init.d/keepalived start '
4.2 查看vip地址,ipvs規則
4.3訪問測試:
5、知識擴展:
參考/usr/share/doc/keepalived-1.2.13/samples/目錄下的文件,可以參考里面的文件自定檢查腳本
例如:
在全局中定義檢查: vrrp_script chk_nginx { killall -0 nginx \\檢查nginx進程,如果錯誤此主機在keepalived中的權重減去5,檢查時間間隔為5s interval 1 weight -5 } } vrrp_script chk_haproxy {\\檢查haproxy進程,如果錯誤此主機在keepalived中的權重減去5,檢查時間間隔為5s killall -0 haproxy interval 1 weight -5 } vrrp_script chk_keealived_down {\\當/etc/keepalived/目錄中有down文件時,則此服務器再keepalived中的權限將會減5,檢查時間間隔為5s [[ -f /etc/keepalived/down ]] && exit 1 || exit 0 interval 1 weight -5 } 在實例中引用: track_script { \\在實例中調用此檢查腳本 chk_nginx chk_haproxy chk_keepalived_down }
原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/6384