keepalived基础及使用DR模型构建一个real_server
keepalived
? ? HA的解決方案的兩大流派分為heartbeat、corosync和keepalived
? ? keepalived在誕生時被賦予的使命僅僅是為lvs的director的HA、生成ipvs規則和監控后端主機的健康狀況
keepalived是可以模擬并以進程的方式實現vrrp協議,并以此協議進行工作的HA解決方案
vrrp:虛擬冗余路由協議
? ? vrrp的工作方式:將兩個或兩個以上的物理路由設備定義成一個虛擬的路由器,這種方式稱作為一個路由組,這組路由設備共同構建成為一個虛擬的路由,在此路由上配置一個VIP和與此VIP相對應的VMAC,在此路由組中,每個路由器都有自己的優先級,當路由器開啟時都會自我初始化,然后發送廣播通告路由組中的所有路由器自己的優先級,以此推選出主節點MASTER和備用節點BACKUP級別的路由器,只有當主節點故障或優先級降低時才會通告其他節點,然后其他節點再次通過比較優先級推選出另外一個主節點,另外一個主節點會去奪取之前主節點的IP地址等信息
在keepalived中有三種節點類型:
? ? MASTER:主節點類型
? ? BACKUP:備用節點類型
? ? Initialized:表初始化
下面是keepalived的常用案例:
案例環境:
主節點:172.16.25.1
從節點:172.16.25.2
先在兩臺節點上安裝keepalived程序包
這里使用yum的方式安裝
#yum install keepalived
兩臺主機都安裝完以后,開始我們的案例
1、先做簡單的主從節點
主節點配置:
編輯keepalived的配置文件,在編輯之前先將此文件備份,以免以后使用 [root@localhost?keepalived]#?vim?keepalived.conf 在此文件中暫時沒用的信息都刪除,然后開始定義所需的配置,這里我們開始直接進行定義 vrrp_instance?VI_1?{??state?MASTER???//表示設置此主機的節點信息為主節點interface?eth0??//表示使用eth0網卡virtual_router_id?51??//默認的id號priority?100???//優先級為100advert_int?1??//表示發送自己在線信息,兩節點的時間必須一樣authentication?{??//表示設置認證方式auth_type?PASSauth_pass?1111}virtual_ipaddress?{??//表示設置一個虛擬的IP地址172.16.25.30} }從節點配置:
編輯keepalived的配置文件 [root@localhost?keepalived]#?vim?keepalived.conf在此文件中暫時沒用的信息都刪除,然后開始定義所需的配置,這里我們開始直接進行定義 vrrp_instance?VI_1?{??state?BACKUP???//表示設置此主機的節點信息為備節點interface?eth0??//表示使用eth0網卡virtual_router_id?51??//默認的id號priority??99??//優先級為99advert_int?1??//表示發送自己在線信息,兩節點的時間必須一樣authentication?{??//表示設置認證方式auth_type?PASSauth_pass?1111}virtual_ipaddress?{??//表示設置一個虛擬的IP地址172.16.25.30} }這樣兩節點的主備配置就已完成,然后啟動服務,就可以測試了 [root@localhost?keepalived]#?service?keepalived?restart 啟動完以后,將主節點的服務停掉,然后查看備節點的情況 [root@localhost?keepalived]#?service?keepalived?stop 然后在備節點使用ip?addr?show查看剛才設定的IP是否已經從主節點上獲取到備節點上;從中可以看出備節點上已經得到了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 如果再把主節點啟動起來的話,因為主節點的優先級大于從節點,主節點就會把IP奪回自己的主機2、雙主模型
只需要在兩臺主機的剛才的配置文件中再添加配置定義信息即可
在主節點配置:
[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?{??//設置第二個虛擬IP為60172.16.25.60} }在從節點配置:
vrrp_instance?VI_2?{state?MASTERinterface?eth0virtual_router_id?61priority?100advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{172.16.25.60} }??
配置完以后將兩主機的服務都重新啟動,然后都使用ip ?addr ?show命令查看配置結果
會發現在主節點上會得出172.16.25.30的IP地址;而在從節點上會看出有172.16.25.60的IP地址
2、使用自定義腳本監控設定當主節點所設定的服務出現問題時自動切換到備用節點
在/usr/share/doc/keepalived-1.2.7/目錄下有一個名叫keepalived.conf.vrrp.localcheck的文件,里面存放有運行實例
? ? 定義檢測腳本:
? ? ? ? 使用單獨的配置段定義檢測機制
? ? ?
??????vrrp_script?CHK_NAME?{script??"/path/to/somefile.sh"??//檢測的方式interval?#?//表示檢測的間隔時間,單位為秒鐘weight?-5?//表示當檢測失敗時,此主機的優先級減去5fall?3?//表示當檢測失敗時,再檢測3次rise?1?//?從正常到失敗要檢測幾次,一般來說1次即可定義完成以后,要在實例調用定義的檢測機制,才能生效vrrp_instance?NAME?{track_script?{CHK_NAME}}使用示例:
主節點配置:
在兩節點上都安裝nginx程序,保證nginx運行無誤后,配置keepalived?
編輯配置文件,在global_defs下面定義內容 vrrp_script?chk_nginx?{script?"killall?-0?nginx"??//表示檢測此進程是否運行,killall?-0?nginx表示此進程的是否運行,使用此命令不會打印到屏幕信息,使用echo?$?查看狀態返回值interval?1??//檢測間隔時間為1秒weight?-5?//檢測失敗時優先級減5fall?2??//檢測失敗時再檢測2次rise?1??//從正常到失敗要檢測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?{?//調用定義機制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" }備用節點配置:
!?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" }?????????? 兩節點都配置完后,便可進行測試。為了讓測試結果更加信息,可以把主從節點的nginx的主頁設置不同,以便區分,然后關閉兩個節點的其中一個,再使用瀏覽器訪問虛擬IP,查看得到的結果,這里測試步驟不在做演示。vrrp_script?chk_sched_down?{?//表示當需要自己手動調試keepalived,可使用此方法script?"[?-e?/etc/keepalived/down?]?&&?exit?1?||?exit?0?"?//表示當此文件存在時便顯示失敗,不存在則顯示成功interval?2???//失敗后檢查2秒weight?-50?//優先級減50fall?2??//檢測失敗時再檢測2次rise?1?//從正常到失敗要檢測1次 }然后在使用track_script調用定義便可,然后再從節點配置相同內容;配置完成后查看配置結果,然后再/etc/keepalived/下創建一個down文件,便發現在此節點上的keepalived下線了。
3、使用DR模型構建一個real_server
172.16.25.1:主節點
172.16.25.2:備節點
172.16.25.3:real_server?
172.16.25.3配置
創建一個目錄 [root@www?~]#?mkdir?-pv?/web/htdocs/a 并添加一個頁面文件 [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> 更改內核信息 [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? 設置路由[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配置
將之前配置的文件刪除,并復制最開始的配置文件 [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}} } 配置完后主備節點都重啟keepalived服務 [root@localhost?keepalived]#?service?keepalived?restart配置完使用瀏覽器查訪問虛擬IP地址,可看到已經得到了172.16.25.3的http頁面
轉載于:https://blog.51cto.com/nydia/1556781
總結
以上是生活随笔為你收集整理的keepalived基础及使用DR模型构建一个real_server的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse工程 'cocostudi
- 下一篇: Redis数据持久化之AOF持久化