1. 程式人生 > >部署LVS-DR+Keepalived搭建高可用web群集

部署LVS-DR+Keepalived搭建高可用web群集

chm com 優先級 install 調整 state wall boot shadow

  • 實現LVS的DR模式

    一. 實驗環境

  • 三臺機器:

    • Director節點: (ens33 192.168.10.53 vip ens33:0 192.168.10.80)

    • Real server1: (ens33 192.168.10.51 vip lo:0 192.168.10.80)

    • Real server2: (ens33 192.168.10.52 vip lo:0 192.168.10.80)

    二. 安裝和配置

    1. 配置兩個real server服務器

    (1) 配置虛擬IP地址(VIP)

    VIP地址僅用作發送Web響應數據包的源地址,並不需要監聽客戶機的訪問請求(改由調度器Director監聽並分發)。因此使用虛接口lo:0來承載VIP地址。

    cd /etc/sysconfig/network-scripts/
    cp ifcfg-lo ifcfg-lo:0
    vim ifcfg-lo:0
     DEVICE=lo:0
     IPADDR=192.168.10.80
     NETMASK=255.255.255.255   #子網掩碼必須全為1
     ONBOOT=yes 1
    ifup lo:0     #開啟虛擬接口 

    技術分享圖片
    (2)安裝httpd,創建測試網頁

    #安裝httpd
    yum install httpd -y
    #real server1創建測試網頁
    echo "Server 192.168.10.51" > /var/www/html/index.html
    #real server2創建測試網頁
    echo "Server 192.168.10.52" > /var/www/html/index.html

    (3)啟動httpd服務,關閉防火墻和安全性策略

    #啟動httpd服務
    systemctl start httpd.service 
    systemctl enable httpd.service 
    #關閉防火墻和安全性策略
    systemctl stop  firewalld.service 
    systemctl disable firewalld.service
    setenforce 0

    (4)在兩臺real server上配置啟動腳本

    vim /etc/init.d/rs.sh
      #!/bin/bash
      VIP=192.168.10.80
            case "$1" in
            start)
                    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                    /sbin/route add -host $VIP dev lo:0      #為本機添加一條路由記錄
                    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
                    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                    sysctl -p >/dev/null 2>&1
                    echo "RealServer Start OK "
                    ;;
            stop)
                    ifconfig lo:0 down
                    route del $VIP /dev/null 2>&1
                    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                    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/all/arp_announce
                    echo "RealServer Stopd"
                    ;;
            *)
                    echo "Usage: $0 {start|stop}"
                    exit 1
            esac
            exit 0

    這裏需要註意的是避免ARP通信紊亂,解決方案是:修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制其不能響應對VIP地址解析請求。

    • arp_ignore=1表示系統只響應目的IP為本地IP的ARP請求。

    • arp_announce=2表示系統不使用IP包的源地址來設置ARP請求的源地址,而選擇發送接口的IP地址。
      (5)運行啟動腳本
      chmod +x rs.sh
      service rs.sh start

      最後在本機上自測訪問網站服務
      技術分享圖片
      技術分享圖片

      2. 配置Director server服務器

      (1)配置虛擬IP地址,以便響應群集訪問

      cd /etc/sysconfig/network-scripts/
      cp ifcfg-ens33 ifcfg-ens33:0
      vim ifcfg-ens33:0
      DEVICE=ens33:0
      ONBOOT=yes
      IPADDR=192.168.10.80
      NETMASK=255.255.255.0
      ifup ens33:0 

      技術分享圖片
      (2)安裝ipvsadm管理工具

      yum install ipvsadm -y  

      (3)開啟路由功能

      vim /etc/sysctl.conf
      net.ipv4.ip_forward=1
      sysctl -p     #保存

      (4)調整/proc響應參數,關閉Linux內核重定向參數響應

      vim /etc/sysctl.conf
      net.ipv4.conf.all.send_redirects = 0  
      net.ipv4.conf.default.send_redirects = 0
      net.ipv4.conf.ens33.send_redirects = 0
      sysctl -p #保存

      (5)配置Director啟動腳本

      vim /etc/init.d/dr.sh
      #!/bin/bash
      GW=192.168.10.1
      VIP=192.168.10.80
      RIP1=192.168.10.51
      RIP2=192.168.10.52
      case "$1" in
          start)
          /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
          systemctl start ipvsadm
          /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
          /sbin/route add -host $VIP dev ens33:0
          /sbin/ipvsadm -A -t $VIP:80 -s rr
          /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
          /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
          echo "ipvsadm starting --------------------[ok]"
          ;;
          stop)
          /sbin/ipvsadm -C
          systemctl stop ipvsadm
          ifconfig ens33:0 down
          route del $VIP
          echo "ipvsamd stoped----------------------[ok]"
           ;;
          status)
          if [ ! -e /var/lock/subsys/ipvsadm ];then
          echo "ipvsadm stoped---------------"
          exit 1
                  else
                  echo "ipvsamd Runing ---------[ok]"
          fi
          ;;
          *)
          echo "Usage: $0 {start|stop|status}"
          exit 1
      esac
      exit 0

      (6)啟動腳本,添加兩個Real Server節點服務器

      chmod +x /etc/init.d/dr.sh
      service dr.sh start

      (7)#關閉防火墻和安全策略

      systemctl stop firewalld.service
      systemctl disable firewalld.service
      setenforce 0

      三.測試LVS群集

      用Windows客戶端直接訪問http://192.168.10.80/, 將能夠看到由真實服務器提供的網頁內容。

    第一次訪問:
    技術分享圖片
    Real Server連接次數查看:
    技術分享圖片

    刷新一次:
    技術分享圖片

    Real Server連接次數查看:
    技術分享圖片

    • LVS結合keepalive

      LVS可以實現負載均衡,但是不能夠故障切換和健康檢查,也就是當一個rs服務器出現故障時,LVS仍然會把請求轉發給故障的rs服務器,這樣就會導致請求無效。keepalive軟件可以解決 LVS 單點故障的問題,能同時實現 LVS 的高可用性。這裏以LVS-DR模式為例。

    一.實驗環境

    五臺機器:

    • Keepalived1 + lvs1(Director1):192.168.10.53 (主)
    • Keepalived2 + lvs2(Director2):192.168.10.54 (從)
    • Real server1:192.168.10.51
    • Real server2:192.168.10.52
    • NFS Server: 192.168.10.55
    • VIP: 192.168.10.80

    二.安裝配置

    在實現LVS的DR模式前提下,在兩個Director Server 節點服務器部署keepalived服務。

    (1)安裝keepalive軟件

    yum install keepalived -y

    (2)主keepalived節點配置(lvs1)

    #主節點( MASTER )配置文件
    vim /etc/keepalived/keepalived.conf
     global_defs {
      ...    #省略部分
      smtp_server 127.0.0.1           #指向本地
      router_id LVS_01               #指定名稱,備份服務器不同名稱
      ...    #省略部分          
    }
    
     vrrp_instance VI_1 {        #定義VRRP熱備實例
        state MASTER            #MASTER表示主調度器
        interface ens33         #承載VIP地址的物理接口
        virtual_router_id 51    #虛擬路由器的ID號,每個熱備組保持一致
        priority 100            #主調度器優先級
        advert_int 1            #通告間隔秒數
        authentication {        #認證信息
            auth_type PASS      #認證類型
            auth_pass 1111      #字碼密串
        }
        virtual_ipaddress {     #指定群集VIP地址,也就是漂移地址
            192.168.10.80
        }
    }
    
    virtual_server 192.168.10.80 80 {  #虛擬服務器VIP地址
        delay_loop 6                   #健康檢查的間隔時間
        lb_algo rr                     #輪詢rr的調度算法
        lb_kind DR                     #直接路由工作模式
        persistence_timeout 0          #連接保持時間
        protocol TCP                   #應用服務采用的是TCP協議
    
        real_server 192.168.10.51 80 {  
    
                            #第一個web節點的服務器地址、端口
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80       
            }
        }
    
        real_server 192.168.10.52 80 {  
    
                           #第二個web節點的服務器地址、端口
     router_id LVS_01         weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    

    (3)從keepalived節點配置(lvs2)
    拷貝主節點的配置文件keepalived.conf,然後修改如下內容:

    router_id LV ->  router_id LVS_02 #從調度器名稱
    state MASTER -> state BACKUP  #從調度器
    priority 100 -> priority 90   #從調度器優先級

    (4)啟動keepalive

    #先主後從分別啟動keepalive
    systemctl start keepalived

    三.測試 keepalived 的HA特性

    (1)虛擬IP地址漂移

    首先在master(lvs1)上執行命令 ip addr ,可以看到vip在master節點上的;
    技術分享圖片
    這時如果在master上執行 systemctl stop keepalived 命令,這時vip已經不在master上,在slave節點上執行 ip addr 命令可以看到 vip 已經正確漂到slave節點。
    技術分享圖片
    這時客戶端去訪問 http://192.168.10.80 訪問依然正常。
    技術分享圖片

    (2)連通性

    在客戶機執行“ping 192.168.10.80 -t”,能夠正常ping通。
    禁用master(lvs1)的ens33網卡,發現還是能正常ping通。
    技術分享圖片
    技術分享圖片

    (3)web訪問測試

    禁用master(lvs1)的ens33網卡,再次訪問上述web服務,網頁文檔顯示正常。
    技術分享圖片
    技術分享圖片
    技術分享圖片

    部署LVS-DR+Keepalived搭建高可用web群集