keepalived實現lvs的高可用

lvs可以做到內核級別的四層負載均衡,具有非常強悍的負載均衡能力。但是,當我們構建lvs的負載均衡集群的時候也會面臨一些很嚴重的問題:

  • lvs的單點故障:當lvs負載均衡器出現故障的時候,那么后端所有的服務器都將無法訪問;

  • lvs對后臺服務器沒有健康監測機制:當后臺服務器宕機之后lvs還是會調度服務到后臺的服務器;

所以我們就需要一款工具來解決以上問題。

keepalived是基于VRRP協議進行工作的,其內部結構為:

  • lvs wrapper:提供lvs的調度

  • checker:進行rs的健康監測機制,配置lvs wrapper進行調度

  • VRRP stack:調用vrrp協議進行工作

  • smtp:進行郵件通知

  • watchdog:發現keepalived內部服務異常立即重啟服務,防止軟件故障;

一、實驗環境

4臺服務器,兩臺lvs負載均衡,兩臺RS服務器提供http服務:

  • lvs-1:192.168.11.100

  • lvs-2:192.168.11.101

  • RS-1:192.168.11.201

  • RS-2:192.168.11.202

拓撲如下:

keepalived實現lvs的高可用

二、實驗步驟

RS配置:

  1. 安裝nginx并提供網頁

  2. 配置Lvs-DR調度方法,在rs執行如下腳本:

    #RS服務器配置VIP地址和主機路由,并且關閉arp應答和響應# #!/bin/bash #  VIP=192.168.11.250 NETMASK=255.255.255.255 BRO=192.168.11.230 NETWORK=lo:0  case $1 in start)         echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore         echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce         echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore         echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce         ifconfig $NETWORK $VIP netmask $NETMASK broadcast $BRO up         route add -host $VIP $NETWORK ;; stop)         echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore         echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce         echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore         echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce         ifconfig $NETWORK down         route del -host $VIP $NETWORK ;; *)         echo "Usage:$0 [start|stop]" esac

keepalived配置:

  1. 采用lvs-dr調度算法,兩臺lvs服務器都需要安裝keepalived

     yum install -y keepalived ipvsadm
  2. 編輯keepalived配置文件/etc/keepalived/keepalived.conf,兩臺lvs配置文件需要一致:

     ! Configuration File for keepalived  global_defs {    notification_email {         root@localhost  #當主從服務器發生變更的時候發郵件到此郵箱進行通知#    }    notification_email_from keepalived@localhost  #通過keepalived@localhost發郵件#    smtp_server 127.0.0.1  #smtp服務器配置#    smtp_connect_timeout 30  #smtp服務器連接超時時長#    router_id node1    #運行keepalived機器的標識#    vrrp_mcast_group4    224.0.115.15 #組播地址為224.0.115.115# }  vrrp_instance VI_1 {   #vrrp VI_1實例#     stater MASTER    #本機為MASTER#     interface ens33    #虛擬ip配置到ens33網卡#     virtual_router_id 14  #虛擬路由編號為14#     priority 100    #自身優先級為100,范圍從1-254#     advert_int 1    #每1秒鐘發出一次組播信息通告自身優先級和虛擬路由編號#     authentication {   #進行認證#         auth_type PASS   #認證方法為簡單字符認證#         auth_pass b1946ac9  #認證字符為b1946ac9,兩臺服務器需要一致#     }     virtual_ipaddress {            192.168.11.250/24 dev ens33  #浮動ip地址為192.168.11.250,并且配置為ens33的輔助ip,也可以綁定到別名網卡上#     } }  virtual_server 192.168.11.250 80 {  #lvs的vip地址#         delay_loop 3     #lvs輪詢時間間隔#         lb_algo rr      #RS調度算法為輪詢# lb_kind DR        #LVS調度方式為DR#         protocol TCP     #使用的協議,僅支持TCP協議#          real_server 192.168.11.201 80 {  #RS-1的地址和端口#                 weight 1     #RS-1權重為1#                 HTTP_GET {     #做應用層健康狀況監測#                         url {                                 path /  #要監控的url為/#                                 status_code 200  #響應狀態碼為200表示健康#                         }                 }                 connect_timeout 1   #RS連接超時時長為1秒#                 nb_get_retry 3    #最大重試連接次數為3次#                 delay_before_retry 1  #兩次連接重試間隔為1秒#         }         real_server 192.168.11.202 80 {  #第二臺RS#                 weight 1                 HTTP_GET {                         url {                                 path /                                 status_code 200                         }                 }                 connect_timeout 1                 nb_get_retry 3                 delay_before_retry 1 }
  3. 兩臺lvs都需要做如此配置,不過第二臺服務器需要修改優先級和狀態為BACKUP;

  4. 啟動keepalived,然后通過ipvsadm -ln可以看到lvs已經配置成功,當一臺RS的網頁文件被刪除之后則被認為RS故障,會從ipvs中移除。

注意:

RS還可以進行傳輸層的健康狀態檢測,參數為:

TCP_CHECK {

connect_ip #向RS的那個地址發起健康狀態檢測,默認為RIP#

connect_port #想RS的哪個端口發起健康狀態檢測,默認為提供服務的端口#

bindto #發出健康狀態檢測的源地址,默認為lvs的dip#

bindto #發出健康狀態檢測的源端口,默認為lvs的對外提供服務端口#

connect_timeout #超時連接時長#

}

原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/79338

(0)
王子豪王子豪
上一篇 2017-07-03 15:39
下一篇 2017-07-03 15:44

相關推薦

  • awk靈活運用

    awk:報告生成器,格式化文本輸出        有多種版本:New awk (nawk ),GNU awk(gawk)gawk:模式掃描和處理語言基本用法:awk [options] ‘program’ var=value file…awk [options] -f progr…

    Linux干貨 2017-04-08
  • sed工具 介紹

    sed工具 地址定界 不給地址:對全文進行處理 單地址: #:指定行 /pattern/:被此處模式所能夠匹配到的每一行 地址范圍: #,# #,+# /pat1/,/pat2/ #,/pat1/ ~:步進 1~2 奇樹行 2~2 偶數行 cat -n passwd >passwd2 新建文件 sep -n ‘/^h//^s/’…

    Linux干貨 2017-05-31
  • 馬哥教育網絡班22期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w | tail -n+3 | cut -d" " -f1 | sort |&…

    Linux干貨 2016-08-29
  • 第二周(8.15-8.21)博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 #touch 如果a.txt不存在,生成一個新的空文檔a.txt。如果a.txt存在,那么只更改該文檔的時間信息 #ls  是list的簡寫,列出當前目錄下的所有文件名 #cp a.txt b.txt  cp是copy的簡寫,用來復制文件。在工作目錄下,將a.t…

    Linux干貨 2016-08-24
  • linux中數組的定義與使用

            我們常說,程序=指令+數據,往細一點的方向說,指令具體指的有哪些?數據又有哪些? 總結一下: 指令大概包括,編程語言中的語法關鍵字(如bash編程中的關鍵字有for,while,case,if,until,continue,break),還包括系統中的命令,和一些自己編寫的函數,這些…

    2017-05-23
  • N22-第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 # who|cut -d' ' -f1|sort|uniq # root 2、取出最后登錄到當前系統的用戶的相關信息。 # last|head -n 1 # …

    Linux干貨 2016-08-29
欧美性久久久久