天天看點

高可用服務之Keepalived高可用LVS叢集

高可用服務之Keepalived高可用LVS叢集

我們知道一個服務通常是以一個套接字形式對外提供服務,所謂套接字就是ip+端口;前面的部落格中我們主要聊到了keepalived對ip位址的高可用,但通常對ip位址高可用沒有多大實質的作用,重要的是我們高可用的ip位址後端對應的服務才是根本,這一篇部落客要講怎麼利用keepalived高可用LVS叢集,生成ipvs規則,以及對LVS叢集的rs做健康狀态檢測;

  前文我們聊了下keepalived的郵件通知相關配置,回顧請參考​​https://blog.51cto.com/u_15127593/2803760​​;今天我們來說說keepalived高可用LVS叢集;

  我們知道一個服務通常是以一個套接字形式對外提供服務,所謂套接字就是ip+端口;前面的部落格中我們主要聊到了keepalived對ip位址的高可用,但通常對ip位址高可用沒有多大實質的作用,重要的是我們高可用的ip位址後端對應的服務才是根本,這一篇部落客要講怎麼利用keepalived高可用LVS叢集,生成ipvs規則,以及對LVS叢集的rs做健康狀态檢測;

  環境說明

名稱 ip位址 端口
keepalived-node01(master) 192.168.0.41 \
keepalived-node02(backup) 192.168.0.42
LVS-RS1 192.168.0.43 80
LVS-RS2 192.168.0.44
VIP 192.168.0.111

  準備LVS叢集RS1和RS2

  1、安裝webserver

yum install nginx -y      

  提示:rs1和rs2上都要安裝nginx服務,用于後端rs提供的服務;

  2、提供測試頁

高可用服務之Keepalived高可用LVS叢集

  3、啟動rs1和rs2上的nginx服務

高可用服務之Keepalived高可用LVS叢集

  4、編寫修改核心參數,并配置vip給RS1和RS2的腳本

高可用服務之Keepalived高可用LVS叢集
高可用服務之Keepalived高可用LVS叢集
高可用服務之Keepalived高可用LVS叢集
#/bin/bash
#
vip='192.168.0.111'mask='255.255.255.255'interface='lo:0'
 case $1 instart)        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore        ifconfig $interface  $vip netmask $mask broadcast $vip up
        route add -host $vip dev $interface
        ;;
stop)        ifconfig $interface down        echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce        echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce        echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore        echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
        ;;*)        echo "Usage:bash $0 start|stop"
        exit 1
        ;;esac      

View Code

  提示:以上腳本主要實作了兩個參數,給定start參數就把對應的核心參數修改以後,并把vip配置到指定的接口;給stop參數就把vip從指定的端口上删除,并還原核心參數的設定;

  在rs1和rs2上執行設定核心參數的腳本

高可用服務之Keepalived高可用LVS叢集
高可用服務之Keepalived高可用LVS叢集

  提示:到此後端兩個RS的環境就準備好了;

  配置keepalived,生成lvs規則

高可用服務之Keepalived高可用LVS叢集

  完整的配置

高可用服務之Keepalived高可用LVS叢集
高可用服務之Keepalived高可用LVS叢集
[root@node01 ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node01_keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node01
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.12.132}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {        192.168.0.111/24 brd 192.168.0.255 dev ens33 label ens33:1
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault  "/etc/keepalived/notify.sh fault"}

virtual_server 192.168.0.111 80 {
        delay_loop 3
        lb_algo wrr
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80

        real_server 192.168.0.43 80 {
                weight 1
                nb_get_retry 2
                delay_before_retry 2
                connect_timeout 30
                HTTP_GET {
                    url {
                    path /index.html
                    status_code 200
                    }
                }
        }
        real_server 192.168.0.44 80 {
                weight 1
                nb_get_retry 2
                delay_before_retry 2
                connect_timeout 30
                HTTP_GET {
                    url {
                    path /index.html
                    status_code 200
                    }
                }
        }
}

[root@node01 ~]#      

  提示:virtual_server用于定義LVS對外叢集ip位址和端口(vip),用大括号括起來,其中delay_loop用于指定對後端rs做健康狀态檢查的時間間隔;lb_algo/lvs_sched用于指定lvs的排程算法,常用的算法有rr,wrr,lc,wlc,lblc,sh,dh;lb_kind/lvs_method用于指定lvs叢集的類型,常用的類型有DR,NAT,TUN,需注意這裡的類型的值必須大寫,否則服務有異常;有關LVS叢集類型的相關說明;protocol用于指定4層協定,常用的4層協定有TCP ,UDP,SCTP,需注意這裡的值必須大寫;sorry_server用于指定,當後端RS都當機情況下,臨時對使用者說sorry的伺服器位址和端口;real_server:用來定義後端RS的相關配置,其中weight用于指定目前rs的權重,nb_get_retry用指定對rs檢測的重試次數,如果在指定的次數上都監測失敗就标記該RS為下線狀态,并從目前叢集中下線;delay_before_retry用于指定重試之前延遲的時間;connect_timeout用于指定對rs檢測的逾時時長;HTTP_GET 用于配置對rs的檢查方法,HTTP_GET表示應用層http檢測,其中path用于指定檢測到uri,status_code用于指定對指定URI檢測到狀态碼,通常為200;以上virtual_server的配置在node02上也是相同的配置;

  安裝sorryserver,并配置測試頁面

高可用服務之Keepalived高可用LVS叢集
高可用服務之Keepalived高可用LVS叢集

  啟動keepalived

高可用服務之Keepalived高可用LVS叢集

  提示:到此基于keepalived高可用LVS叢集就配置完成了;

  驗證:用浏覽器對VIP通路,看看是否能夠通路到後端RS提供的頁面?

高可用服務之Keepalived高可用LVS叢集

  提示:我們用浏覽器通路VIP并沒有通路到後端的rs提供的頁面;其中的原因是我們在配置keepalived時,開啟了嚴格遵守vrrp協定,是以啟動keepalived它預設會自動生成iptables規則,禁止任何位址通路VIP;

高可用服務之Keepalived高可用LVS叢集

  提示:解決辦法用iptables -F清空iptables規則;這種清空iptables規則的方式隻是臨時的方式,重新開機以後,或者vip飄逸後,對應的規則又會生成,永久解決辦法是在keepalived的配置檔案,禁用它自動生成iptabels規則;

高可用服務之Keepalived高可用LVS叢集

  提示:在/etc/keepalived/keepalived.conf的global_defs中加上vrrp_iptables這個配置,這個配置表示禁用自動生成iptables規則;當然我們也可配置不嚴格遵守vrrp協定,把vrrp_strict去掉也行;選擇其中一種方式即可;

  驗證:重新開機keepalived,看看對應iptables規則是否還會生成?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到現在vip所在節點的iptables規則就沒有在自動生成了,對于node02也是相同的配置,重新開機keepalived即可解決自動生成iptables規則的問題;

  現在在用浏覽器通路vip,看看是否能夠通路到後端RS提供的頁面?

高可用服務之Keepalived高可用LVS叢集
高可用服務之Keepalived高可用LVS叢集

  提示:可以看到我們在浏覽器上通路VIP是可以正常通路到後端rs提供的頁面;

  驗證:把node01上的keepalived停掉,看看node02是否會自動将vip配置上對應的接口?用浏覽器是否還會通路到rs提供的頁面呢?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到當node01的keepalived當機以後,對應vip會自動飄逸到node02上去,并且在用戶端通路VIP幾乎不受影響;

  驗證:在node01上檢視ipvs規則,看看是否都生成了ipvs規則呢?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到node01上并沒有生成ipvs規則,原因是keepalived停掉了,對應的ipvs規則也就删除了;node02上的keepalived是活躍狀态,是以對應ipvs規則也是有keepalived自動生成;

  驗證:把rs1的web服務停掉,看看keepalived是否會檢測到rs1不再線,進而把rs1自動從叢集踢出去呢?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到當rs1故障以後,keepalived會檢測到rs1故障,然後把rs1從叢集中提出去,是以我們在ipvs規則表中就沒有rs1;

  驗證:把rs2停掉,看看對應的sorryserver是否會被激活?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到把rs2停掉以後,對應ipvs規則表中就沒有RS2,并且它會把我們之前配置的sorryserver 的位址和端口配置上;

  驗證:用浏覽器通路VIP看看對應相應的内容是否是vip所在節點的sorryserver提供的頁面呢?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到當rs都當機以後,再次通路VIP就會響應我們之前在配置檔案中提供的sorryserver的頁面;

  驗證:啟動rs1或rs2看看對應sorryserver是否會下線呢?

高可用服務之Keepalived高可用LVS叢集

  提示:可以看到當rs2恢複以後,對應的sorryserver就從叢集下線;

繼續閱讀