1. 程式人生 > >部署LVS-DR + keepalived 高可用群集

部署LVS-DR + keepalived 高可用群集

mar 虛擬ip tin nfs服務 性能 opd conn 高可用 Oz

  • LVS集群采用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。為此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。
  • 直接路由(DirectRouting);簡稱DR模式,采用半開放式的網絡結構,與TUN模式的結構類似,但各節點並不是分散在各地,而是與調度器位於同一個物理網絡。負載調度器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道。
  • Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務器。

  • 實驗需求
  • 技術分享圖片

    服務器主機 IP: ( VIP:192.168.200.100) 需要安裝配置
    NFS共享服務器 192.168.200.105 NFS共享存儲
    LVS主調度器 192.168.200.103 keepalived 、ipvsadm
    LVS從調度器 192.168.200.104 keepalived 、ipvsadm
    節點服務器1 192.168.200.101 httpd 、NFS
    節點服務器2 192.168.200.102 httpd 、NFS
    windows客戶機 192.168.200.200 測試專用
    • LVS調度服務器
    • 主從調度服務器配置基本相同(不同之處已經標註)

      # yum install keepalived ipvsadm -y
    • 調整proc響應參數

      # vi /etc/sysctl.conf     
          net.ipv4.ip_forward=1
          net.ipv4.conf.all.send_redirects = 0
          net.ipv4.conf.default.send_redirects = 0
          net.ipv4.conf.ens33.send_redirects = 0
          //proc響應關閉重定向功能//
          # sysctl -p    //立即生效
    • 配置虛擬VIP

      # cd /etc/sysconfig/network-scripts
      # cp ifcfg-ens33 ifcfg-ens33:0
      # vim  ifcfg-ens33:0
          DEVICE=ens33:0
          ONBOOT=yes
          IPADDR=192.168.200.100
          NETMASK=255.255.255.0
      
      # ifup ens33:0     //啟用虛擬IP
    • 配置負載分配策略
    • 編寫腳本方便管理

          # cd /etc/init.d/
          # vi dr.sh
              #!/bin/bash
              GW=192.168.200.1
              VIP=192.168.200.100
              RIP1=192.168.200.101
              RIP2=192.168.200.102
              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
      
          # chmod +x dr.sh
          # service dr.sh start
    • keepalived部署

      # vim /etc/keepalived/keepalived.conf
          global_defs {
      ...
      smtp_server 127.0.0.1           #指向本地
      router_id LVS_01   #指定名稱,備份服務器不同名稱
      ...             
      }
      vrrp_instance VI_1 {
      state MASTER             #備份服務器是BACKUP
      virtual_router_id 10     # 組號   備份服務器相同
      ...
      auth_pass abc123         #驗證密碼  備份服務器相同
      priority 100              #優先級  備份小於主
      ...
      virtual_ipaddress {
      192.168.200.100          //指定VIP地址
          }
      ...
      virtual_server 192.168.200.100 80 {
          lb_kind DR            //指定DR模式
      ...
      real_server 192.168.200.101 80 {        #web節點地址端口
      weight 1                         #節點的權重
      TCP_CHECK {               #健康檢查方式
          connect_port 80         #添加端口
          connect_timeout 3    #連接超時
          nb_get_retry 3           #重試次數
          delay_before_retry 3   #重試間隔(秒)
      }   
          }   
          real_server 192.168.200.102 80 {
      weight 1
      TCP_CHECK {
          connect_port 80              #添加端口
          connect_timeout 3          
          nb_get_retry 3
          delay_before_retry 3
      }   
          }    
      }
      # systemctl start keepalived 
      # ip addr show dev ens33:0         #查看虛擬網卡
      # systemctl stop firewalld.service   #關防火墻
      # setenforce 0
    • 配置NFS共享服務器

      # systemctl stop firewalld.service   //關防火墻
      # setenforce 0
      # yum install nfs-utils rpcbind -y   //安裝NFS服務
      # systemctl start rpcbind.service
      # systemctl start nfs.service  
      # cd /opt | mkdir benet accp  //創建共享目錄
      (在實際工作中 還是要共享掛載磁盤陣列raid的目錄)
      # vi /etc/exports
          /usr/share *(ro,sync)
          /opt/benet 192.168.200.0/24(rw,sync)            
          /opt/accp 192.168.200.0/24(rw,sync) 
      # exportfs -rv    //發布共享
    • 節點服務器配置
    • 兩個節點服務器配置基本相同(不同之處已經標註)

      # yum install nfs-utils rpcbind -y   //安裝NFS服務
      # mount.nfs 192.168.200.105:/opt/benet /var/www/html  //掛載NFS
      # yum install -y httpd   #安裝httpd服務
      # systemctl start httpd.service      #啟動httpd服務
      # systemctl stop firewalld.service    #關防火墻
      # setenforce 0
    • 建立一個測試頁面
    • 兩個節點服務器測試頁面要不同

      # echo "this is 7.1 web" > /var/www/html/index.html    #節點服務器1
      # echo "this is 7.2 web" > /var/www/html/index.html    #節點服務器2 (方便查看測試結果)
    • 配置虛擬VIP
    • 作用:僅發送web響應數據包的源地址

      # cd /etc/sysconfig/network-scripts
      # cp ifcfg-lo ifcfg-lo:0
      # vim ifcfg-lo:0
          DEVICE=lo:0
          IPADDR=192.168.200.100
          NETMASK=255.255.255.0
          ONBOOT=yes
    • 編寫服務腳本方便管理
    • 添加VIP本地訪問路由
    • 調整proc響應

          # cd /etc/init.d/
          # vim web.sh
                  #!/bin/bash
                  VIP=192.168.200.100
                  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
      
          # chmod +x web.sh
          # service web.sh start
          # ifup lo:0        //啟用虛擬VIP
          # firefox "http://127.0.0.1/" &     //火狐查看測試頁
          # service web.sh stop
          # service web.sh start    //(建議重啟服務)
    • 測試

      在windows7  瀏覽器輸入 虛擬VIP 192.168.200.100 
      (多刷新幾次可以看到節點1和節點2的測試頁面為成功)

    技術分享圖片技術分享圖片

    部署LVS-DR + keepalived 高可用群集