keepalived基础及使用DR模型构建一个real_server
keepalived
? ? HA的解決方案的兩大流派分為heartbeat、corosync和keepalived
? ? keepalived在誕生時(shí)被賦予的使命僅僅是為lvs的director的HA、生成ipvs規(guī)則和監(jiān)控后端主機(jī)的健康狀況
keepalived是可以模擬并以進(jìn)程的方式實(shí)現(xiàn)vrrp協(xié)議,并以此協(xié)議進(jìn)行工作的HA解決方案
vrrp:虛擬冗余路由協(xié)議
? ? vrrp的工作方式:將兩個(gè)或兩個(gè)以上的物理路由設(shè)備定義成一個(gè)虛擬的路由器,這種方式稱作為一個(gè)路由組,這組路由設(shè)備共同構(gòu)建成為一個(gè)虛擬的路由,在此路由上配置一個(gè)VIP和與此VIP相對(duì)應(yīng)的VMAC,在此路由組中,每個(gè)路由器都有自己的優(yōu)先級(jí),當(dāng)路由器開(kāi)啟時(shí)都會(huì)自我初始化,然后發(fā)送廣播通告路由組中的所有路由器自己的優(yōu)先級(jí),以此推選出主節(jié)點(diǎn)MASTER和備用節(jié)點(diǎn)BACKUP級(jí)別的路由器,只有當(dāng)主節(jié)點(diǎn)故障或優(yōu)先級(jí)降低時(shí)才會(huì)通告其他節(jié)點(diǎn),然后其他節(jié)點(diǎn)再次通過(guò)比較優(yōu)先級(jí)推選出另外一個(gè)主節(jié)點(diǎn),另外一個(gè)主節(jié)點(diǎn)會(huì)去奪取之前主節(jié)點(diǎn)的IP地址等信息
在keepalived中有三種節(jié)點(diǎn)類型:
? ? MASTER:主節(jié)點(diǎn)類型
? ? BACKUP:備用節(jié)點(diǎn)類型
? ? Initialized:表初始化
下面是keepalived的常用案例:
案例環(huán)境:
主節(jié)點(diǎn):172.16.25.1
從節(jié)點(diǎn):172.16.25.2
先在兩臺(tái)節(jié)點(diǎn)上安裝keepalived程序包
這里使用yum的方式安裝
#yum install keepalived
兩臺(tái)主機(jī)都安裝完以后,開(kāi)始我們的案例
1、先做簡(jiǎn)單的主從節(jié)點(diǎn)
主節(jié)點(diǎn)配置:
編輯keepalived的配置文件,在編輯之前先將此文件備份,以免以后使用 [root@localhost?keepalived]#?vim?keepalived.conf 在此文件中暫時(shí)沒(méi)用的信息都刪除,然后開(kāi)始定義所需的配置,這里我們開(kāi)始直接進(jìn)行定義 vrrp_instance?VI_1?{??state?MASTER???//表示設(shè)置此主機(jī)的節(jié)點(diǎn)信息為主節(jié)點(diǎn)interface?eth0??//表示使用eth0網(wǎng)卡virtual_router_id?51??//默認(rèn)的id號(hào)priority?100???//優(yōu)先級(jí)為100advert_int?1??//表示發(fā)送自己在線信息,兩節(jié)點(diǎn)的時(shí)間必須一樣authentication?{??//表示設(shè)置認(rèn)證方式auth_type?PASSauth_pass?1111}virtual_ipaddress?{??//表示設(shè)置一個(gè)虛擬的IP地址172.16.25.30} }從節(jié)點(diǎn)配置:
編輯keepalived的配置文件 [root@localhost?keepalived]#?vim?keepalived.conf在此文件中暫時(shí)沒(méi)用的信息都刪除,然后開(kāi)始定義所需的配置,這里我們開(kāi)始直接進(jìn)行定義 vrrp_instance?VI_1?{??state?BACKUP???//表示設(shè)置此主機(jī)的節(jié)點(diǎn)信息為備節(jié)點(diǎn)interface?eth0??//表示使用eth0網(wǎng)卡virtual_router_id?51??//默認(rèn)的id號(hào)priority??99??//優(yōu)先級(jí)為99advert_int?1??//表示發(fā)送自己在線信息,兩節(jié)點(diǎn)的時(shí)間必須一樣authentication?{??//表示設(shè)置認(rèn)證方式auth_type?PASSauth_pass?1111}virtual_ipaddress?{??//表示設(shè)置一個(gè)虛擬的IP地址172.16.25.30} }這樣兩節(jié)點(diǎn)的主備配置就已完成,然后啟動(dòng)服務(wù),就可以測(cè)試了 [root@localhost?keepalived]#?service?keepalived?restart 啟動(dòng)完以后,將主節(jié)點(diǎn)的服務(wù)停掉,然后查看備節(jié)點(diǎn)的情況 [root@localhost?keepalived]#?service?keepalived?stop 然后在備節(jié)點(diǎn)使用ip?addr?show查看剛才設(shè)定的IP是否已經(jīng)從主節(jié)點(diǎn)上獲取到備節(jié)點(diǎn)上;從中可以看出備節(jié)點(diǎn)上已經(jīng)得到了IP [root@localhost?keepalived]#?ip?addr?show?1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?16436?qdisc?noqueue?state?UNKNOWN?link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00?inet?127.0.0.1/8?scope?host?lo?inet6?::1/128?scope?host?valid_lft?forever?preferred_lft?forever?2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UP?qlen?1000?link/ether?00:0c:29:62:4d:37?brd?ff:ff:ff:ff:ff:ff?inet?172.16.25.2/16?brd?172.16.255.255?scope?global?eth0?inet?172.16.25.30/32?scope?global?eth0 如果再把主節(jié)點(diǎn)啟動(dòng)起來(lái)的話,因?yàn)橹鞴?jié)點(diǎn)的優(yōu)先級(jí)大于從節(jié)點(diǎn),主節(jié)點(diǎn)就會(huì)把IP奪回自己的主機(jī)2、雙主模型
只需要在兩臺(tái)主機(jī)的剛才的配置文件中再添加配置定義信息即可
在主節(jié)點(diǎn)配置:
[root@localhost?keepalived]#?vim?keepalived.conf vrrp_instance?VI_2?{?//改下次名稱state?BACKUP???interface?eth0virtual_router_id?61priority?99??advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{??//設(shè)置第二個(gè)虛擬IP為60172.16.25.60} }在從節(jié)點(diǎn)配置:
vrrp_instance?VI_2?{state?MASTERinterface?eth0virtual_router_id?61priority?100advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{172.16.25.60} }??
配置完以后將兩主機(jī)的服務(wù)都重新啟動(dòng),然后都使用ip ?addr ?show命令查看配置結(jié)果
會(huì)發(fā)現(xiàn)在主節(jié)點(diǎn)上會(huì)得出172.16.25.30的IP地址;而在從節(jié)點(diǎn)上會(huì)看出有172.16.25.60的IP地址
2、使用自定義腳本監(jiān)控設(shè)定當(dāng)主節(jié)點(diǎn)所設(shè)定的服務(wù)出現(xiàn)問(wèn)題時(shí)自動(dòng)切換到備用節(jié)點(diǎn)
在/usr/share/doc/keepalived-1.2.7/目錄下有一個(gè)名叫keepalived.conf.vrrp.localcheck的文件,里面存放有運(yùn)行實(shí)例
? ? 定義檢測(cè)腳本:
? ? ? ? 使用單獨(dú)的配置段定義檢測(cè)機(jī)制
? ? ?
??????vrrp_script?CHK_NAME?{script??"/path/to/somefile.sh"??//檢測(cè)的方式interval?#?//表示檢測(cè)的間隔時(shí)間,單位為秒鐘weight?-5?//表示當(dāng)檢測(cè)失敗時(shí),此主機(jī)的優(yōu)先級(jí)減去5fall?3?//表示當(dāng)檢測(cè)失敗時(shí),再檢測(cè)3次rise?1?//?從正常到失敗要檢測(cè)幾次,一般來(lái)說(shuō)1次即可定義完成以后,要在實(shí)例調(diào)用定義的檢測(cè)機(jī)制,才能生效vrrp_instance?NAME?{track_script?{CHK_NAME}}使用示例:
主節(jié)點(diǎn)配置:
在兩節(jié)點(diǎn)上都安裝nginx程序,保證nginx運(yùn)行無(wú)誤后,配置keepalived?
編輯配置文件,在global_defs下面定義內(nèi)容 vrrp_script?chk_nginx?{script?"killall?-0?nginx"??//表示檢測(cè)此進(jìn)程是否運(yùn)行,killall?-0?nginx表示此進(jìn)程的是否運(yùn)行,使用此命令不會(huì)打印到屏幕信息,使用echo?$?查看狀態(tài)返回值interval?1??//檢測(cè)間隔時(shí)間為1秒weight?-5?//檢測(cè)失敗時(shí)優(yōu)先級(jí)減5fall?2??//檢測(cè)失敗時(shí)再檢測(cè)2次rise?1??//從正常到失敗要檢測(cè)1次 } vrrp_instance?VI_1?{state?MASTERinterface?eth0virtual_router_id?51priority?100advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{172.16.25.30}track_script?{?//調(diào)用定義機(jī)制chk_nginx }notify_master?"/etc/rc.d/init.d/nginx?start"???//調(diào)用信息notify_backup?"/etc/rc.d/init.d/nginx?stop"notify_fault?"/etc/rc.d/init.d/nginx?stop" }備用節(jié)點(diǎn)配置:
!?Configuration?File?for?keepalived global_defs?{notification_email?{acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from?Alexandre.Cassen@firewall.loc smtp_server?192.168.200.1 smtp_connect_timeout?30 router_id?LVS_DEVEL } vrrp_script?chk_nginx?{ script?"killall?-0?nginx" interval?1 weight?-5 fall?2 rise?1 } vrrp_instance?VI_1?{ state?BACKUP interface?eth0 virtual_router_id?51 priority?99 advert_int?1 authentication?{ auth_type?PASS auth_pass?1111 } virtual_ipaddress?{ 172.16.25.30 } track_script?{ chk_nginx } notify_master?"/etc/rc.d/init.d/nginx?start" notify_backup?"/etc/rc.d/init.d/nginx?stop" notify_fault?"/etc/rc.d/init.d/nginx?stop" }?????????? 兩節(jié)點(diǎn)都配置完后,便可進(jìn)行測(cè)試。為了讓測(cè)試結(jié)果更加信息,可以把主從節(jié)點(diǎn)的nginx的主頁(yè)設(shè)置不同,以便區(qū)分,然后關(guān)閉兩個(gè)節(jié)點(diǎn)的其中一個(gè),再使用瀏覽器訪問(wèn)虛擬IP,查看得到的結(jié)果,這里測(cè)試步驟不在做演示。vrrp_script?chk_sched_down?{?//表示當(dāng)需要自己手動(dòng)調(diào)試keepalived,可使用此方法script?"[?-e?/etc/keepalived/down?]?&&?exit?1?||?exit?0?"?//表示當(dāng)此文件存在時(shí)便顯示失敗,不存在則顯示成功interval?2???//失敗后檢查2秒weight?-50?//優(yōu)先級(jí)減50fall?2??//檢測(cè)失敗時(shí)再檢測(cè)2次rise?1?//從正常到失敗要檢測(cè)1次 }然后在使用track_script調(diào)用定義便可,然后再?gòu)墓?jié)點(diǎn)配置相同內(nèi)容;配置完成后查看配置結(jié)果,然后再/etc/keepalived/下創(chuàng)建一個(gè)down文件,便發(fā)現(xiàn)在此節(jié)點(diǎn)上的keepalived下線了。
3、使用DR模型構(gòu)建一個(gè)real_server
172.16.25.1:主節(jié)點(diǎn)
172.16.25.2:備節(jié)點(diǎn)
172.16.25.3:real_server?
172.16.25.3配置
創(chuàng)建一個(gè)目錄 [root@www?~]#?mkdir?-pv?/web/htdocs/a 并添加一個(gè)頁(yè)面文件 [root@www?~]#?vim?/web/htdocs/a/index.html 配置httpd的主配置文件 [root@www?~]#?vim?/etc/httpd/conf/httpd.conf <VirtualHost??*:80>DocumentRoot?/web/htdocs/aServerName?www1.how.com </VirtualHost> 更改內(nèi)核信息 [root@www?~]#?echo?1?>?/proc/sys/net/ipv4/conf/all/arp_ignore?[root@www?~]#?echo?1?>?/proc/sys/net/ipv4/conf/eth0/arp_ignore?[root@www?~]#?echo?2?>?/proc/sys/net/ipv4/conf/eth0/arp_announce?[root@www?~]#?echo?2?>?/proc/sys/net/ipv4/conf/all/arp_announce? 設(shè)置路由[root@www?~]#?ifconfig?lo:0?172.16.25.30?netmask?255.255.255.255?broadcast?172.16.25.30?up [root@www?~]#?route?add?-host?172.16.25.30?dev?lo:0172.16.25.1配置
將之前配置的文件刪除,并復(fù)制最開(kāi)始的配置文件 [root@localhost?keepalived]#?cp?keepalived.bak?keepalived.conf? 配置此文件[root@localhost?keepalived]#?vim?keepalived.conf vrrp_instance?VI_1?{state?MASTERinterface?eth0virtual_router_id?51priority?100advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{172.16.25.30} } virtual_server?172.16.25.30?80?{delay_loop?6lb_algo?rrlb_kind?NATnat_mask?255.255.0.0protocol?TCPreal_server?172.16.25.3?80?{weight?1HTTP_GET?{url?{path?/status_code?200}connect_timeout?2nb_get_retry?3delay_before_retry?1}} } 安裝ipvsadm [root@localhost?keepalived]#?yum?install?ipvsadm [root@localhost?keepalived]#?ipvsadm?-L?-n172.16.25.2配置
[root@localhost?keepalived]#?cp?keepalived.bak?keepalived.conf?[root@localhost?keepalived]#?vim?keepalived.conf vrrp_instance?VI_1?{state?BACKUPinterface?eth0virtual_router_id?51priority?99advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{172.16.25.30} } virtual_server?172.16.25.30?80?{delay_loop?6lb_algo?rrlb_kind?NATnat_mask?255.255.0.0protocol?TCPreal_server?172.16.25.3?80?{weight?1HTTP_GET?{url?{path?/status_code?200}connect_timeout?2nb_get_retry?3delay_before_retry?1}} } 配置完后主備節(jié)點(diǎn)都重啟keepalived服務(wù) [root@localhost?keepalived]#?service?keepalived?restart配置完使用瀏覽器查訪問(wèn)虛擬IP地址,可看到已經(jīng)得到了172.16.25.3的http頁(yè)面
轉(zhuǎn)載于:https://blog.51cto.com/nydia/1556781
總結(jié)
以上是生活随笔為你收集整理的keepalived基础及使用DR模型构建一个real_server的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: eclipse工程 'cocostudi
- 下一篇: nginx限速