歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> CentOS7 Keepalived+LVS 負載均衡 後台節點健康檢查

CentOS7 Keepalived+LVS 負載均衡 後台節點健康檢查

日期:2017/3/3 11:26:02   编辑:Linux技術
CentOS7 安裝Keepalived以及基本配置 這篇文章介紹了如何安裝keepalived以及配置虛擬IP實現雙機故障切換。
本文主要介紹 Keepalived+LVS 負載均衡配置與後台節點健康檢查。

1.安裝LVS

1:下載RPM軟件包http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26-1.src.rpm
2:安裝 rpm -ivh ipvsadm-1.26-1.src.rpm 包
3:yum install ipvsadm 安裝軟件
4:執行 ipvsadm 看是否有下面輸出說明安裝成功

5:執行命令 lsmod|grep ip_vs 檢查當前加載的內核模塊,看是否存在 ip_vs 模塊

注 1、只有執行 ipvsadm 以後,才會在內核加載 ip_vs 模塊

2.安裝keepalived

1:CentOS7 安裝Keepalived以及基本配置

2:配置文件/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {  
   notification_email {  
     root@localhost  
   }  
   notification_email_from root@localhost  
   smtp_server localhost  
   smtp_connect_timeout 30  
   router_id  NodeA  
} 

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.220
    }
}

virtual_server 192.168.1.220 8080 { 
   delay_loop 6                  
   lb_algo rr                     
   lb_kind DR                     
   nat_mask 255.255.255.0           
   persistence_timeout 0           
   protocol TCP                    
   real_server 192.168.1.107 8080 {   
       weight 1                      
        HTTP_GET {
            url { 
              path /index.jsp
              digest d654f21f87b7e6900b887f07c19e73fe
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }       
   }
   real_server 192.168.1.108 8080 {    
       weight 11
        HTTP_GET {
            url { 
              path /index.jsp
              digest 625eddd79c61cf84c71c0c17448f8093
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }        
   }
}

vrrp_instance VI_1 :不在這裡解釋了,看我另外一篇文章,地址在上面。
virtual_server 192.168.1.220 8080 : 這裡配置虛擬服務器 (192.168.1.220 為虛擬IP, 監聽8080端口)客戶端就訪問這個地址。
delay_loop :健康檢查時間間隔,單位是秒。
lb_algo :負載均衡調度算法,互聯網應用常使用 wlc 或 rr。
lb_kind :負載均衡轉發規則。一般包括 DR,NAT,TUN3 種,在我的方案中,都使用DR 的方式。
persistence_timeout. :會話保持時間,單位是秒。這個會話是網絡7層傳輸協議中的(第三層)會話。比如我們把它設置為60,那麼客戶端60秒內訪問LVS虛擬服務器的請求都會被轉到到同1個後台服務器節點。如果設置為0,那麼每次請求都會根據配置的調度情況進行分發。
轉發協議 protocol. 一般有 tcp 和 udp 兩種。實話說,我還沒嘗試過 udp 協議類的轉發。
real_server 192.168.1.107 8080 : 這裡配置真實服務器的地址與端口。
weight 1 :權重,不解釋了。一般都是機器性能好的高一些,低的小一些。
HTTP_GET:配置健康檢查
url {
path /index.jsp 健康檢查的頁面
digest 625eddd79c61cf84c71c0c17448f8093 根據頁面計算出的MD5的值,這個值一定不能隨便寫,不然keepliv
}
下面說一下如何計算digest
我的keepalived的安裝目錄在 /usr/local/keepalive/
進入到/usr/local/keepalive/bin
./genhash -s 192.168.1.107 -p 8080 -u /index.jsp
通過上訴命令計算digest 然後寫到配置文件上就可以了。
connect_timeout 5 :連接超時時間
nb_get_retry 3 :重連次數
delay_before_retry 3 :重連間隔時間
connect_port 8080 :檢測端口

3:啟動keepalived

1:CentOS7 下配置Keepalived為系統服務,開機自動啟動。 systemctl start keepalived.service
2:也可以直接 /usr/local/keepalive/sbin/keepalived -D 啟動,怎麼啟動都行。
3:啟動成功輸入命令 ps aux | grep keepalived

Keepalived 正常運行時,共啟動 3 個進程,其中一個進程是父進程,負責監控其子進程;一個是 vrrp 子進程;另外一個是 checkers 子進程。
4:也可以查看日志:tail -f /var/log/message
5:可以用其它服務器去ping 192.168.1.220這個虛擬IP,Telnet 8080端口,測試虛擬服務器是否有問題。


4:配置真實服務器

說明:一般真實互聯網應用都配置為lb_kind = dr 模式,因為這種模式效率是最高的,缺點就是配置稍微復雜一點,需要配置客戶端。
DR模式原理請參考:http://atong.blog.51cto.com/2393905/1348602
簡單說一下: 假設A為前端負載均衡服務器, B,C為後端真實服務器。 A接收到數據包以後,會把數據包的MAC地址改成B的(根據調度算法,假設發給B服務器),然後把數據包重新發出去,交換機收到數據包根據MAC地址找到B,把數據包交給B。 這時B會收到數據包,同時驗證請求IP地址,由於數據包裡的IP地址是給A的,所以正常情況下B會丟棄數據包,為了防止這種情況,需要在B機器的回環網卡上配置A的IP地址。並設置ARP壓制。

1:在真實服務器上運行腳本文件

#!/bin/bash  
#description : start realserver
VIP=192.168.1.220
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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 "Usage: $0 {start|stop}"
exit 1
esac

VIP=192.168.1.220 大家只要修改這個地方為虛擬IP即可,別的地方都不需要改。

2:需要對腳本授權

chmod +x lvs_real.sh


3:如果腳本是在windows編輯在拷貝過去的會有問題,好像是回車換行符不同導致的。

sed -i 's/\r$//' lvs_real.sh


4:運行腳本

./lvs_real.sh

5:輸入ifconfig查看虛擬IP是否已經綁定到回環網卡


6:測試的時候最好先關閉防火牆,免得給自己挖坑。

7:如果想知道當前測試機的訪問請求被轉發到那個服務器去了,可以在 ipvsadm 命令後帶一個選項,其完整形式為:ipvsadm –lcn | grep 159.226.240.63 (你的IP)。

5.其它健康檢查方式

1:TCP方式檢查

virtual_server 192.168.80.120 8080 { 
   delay_loop 6                  
   lb_algo rr                     
   lb_kind DR                     
   nat_mask 255.255.255.0           
   persistence_timeout 0           
   protocol TCP                    
   real_server 192.168.80.129 8080 {   
       weight 1                      
      TCP_CHECK {
        connect_port    8080
        connect_timeout 5
      }      
   }
   real_server 192.168.80.131 8080 {    
       weight 1
      TCP_CHECK {
        connect_port    8080
        connect_timeout 5
      }      
   }
}

2:其它方式請參考keepalived提供的配置文件
Copyright © Linux教程網 All Rights Reserved