1. 程式人生 > >【LVS+Keepalived】 LVS+Keepalived實現tcp、udp負載均衡及HA高可用

【LVS+Keepalived】 LVS+Keepalived實現tcp、udp負載均衡及HA高可用

LVS 安裝下載編譯安裝 yum install -y kernel-devel gcc gcc-c++ yum install libnl* libpopt* popt-static -y解壓完之後進入解壓目錄執行make && make install
編譯成功後通過ipvsadm命令驗證成功。keepalived 下載yum install curl gcc openssl-devel libnl3-devel net-snmp-develyum install -y libnfnetlink-devel ./configure --prefix=/usr/local/keepalived
make && make install


先配置LVS能夠跑起來VIP 172.23.26.233DR172.23.26.212RS IP172.23.26.210 172.23.26.211 212機器安裝lvs執行以下指令碼
#! /bin/bashecho 1 > /proc/sys/net/ipv4/ip_forwardipv=/sbin/ipvsadmvip=172.23.26.233rs1=172.23.26.210rs2=172.23.26.211ifconfig eth0:0 downifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip dev eth0:0
$ipv -C$ipv -A -t $vip:80 -s rr$ipv -a -t $vip:80 -r $rs1:80 -g $ipv -a -t $vip:80 -r $rs2:80 -g
-t tcp負載-g 叢集模式DRrr 輪訓負載演算法210 211上執行以下指令碼
#! /bin/bashvip=172.23.26.233ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip lo:0echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce
測試


輪訓請求,測試成功ipvs命令解釋
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]ipvsadm -D -t|u|f virtual-service-addressipvsadm -Cipvsadm -Ripvsadm -S [-n]ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]ipvsadm -d -t|u|f service-address -r server-addressipvsadm -L|l [options]ipvsadm -Z [-t|u|f service-address]ipvsadm --set tcp tcpfin udpipvsadm --start-daemon state [--mcast-interface interface]ipvsadm --stop-daemonipvsadm -h命令選項解釋:有兩種命令選項格式,長的和短的,具有相同的意思。在實際使用時,兩種都可以。-A --add-service 在核心的虛擬伺服器表中新增一條新的虛擬伺服器記錄。也就是增加一臺新的虛擬伺服器。-E --edit-service 編輯核心虛擬伺服器表中的一條虛擬伺服器記錄。 修改定義過的叢集服務-D --delete-service 刪除核心虛擬伺服器表中的一條虛擬伺服器記錄。-C --clear 清除核心虛擬伺服器表中的所有記錄。-R --restore 恢復虛擬伺服器規則-S --save 儲存虛擬伺服器規則,輸出為-R 選項可讀的格式-a --add-server 在核心虛擬伺服器表的一條記錄裡新增一條新的真實伺服器記錄。也就是在一個虛擬伺服器中增加一臺新的真實伺服器-e --edit-server 編輯一條虛擬伺服器記錄中的某條真實伺服器記錄-d --delete-server 刪除一條虛擬伺服器記錄中的某條真實伺服器記錄-L|-l --list 顯示核心虛擬伺服器表 userver 列表;-Z --zero 虛擬服務表計數器清零(清空當前的連線數量等)--set tcp tcpfin udp 設定連線超時值--start-daemon 啟動同步守護程序。他後面可以是master 或backup,用來說明LVS Router 是master 或是backup。在這個功能上也可以採用keepalived 的VRRP 功能。--stop-daemon 停止同步守護程序-h --help 顯示幫助資訊其他的選項:-t --tcp-service service-address 說明虛擬伺服器提供的是tcp 的服務[vip:port] or [real-server-ip:port]-u --udp-service service-address 說明虛擬伺服器提供的是udp 的服務[vip:port] or [real-server-ip:port]-f --fwmark-service fwmark 說明是經過iptables 標記過的服務型別。通常用於將兩個或兩個以上的服務繫結為一個服務進行處理時使用;-s --scheduler scheduler 使用的排程演算法,有這樣幾個選項 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,預設的排程演算法是:wlc.-p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,將被同一臺真實的伺服器處理。timeout 的預設值為300 秒。 持久連線;-M --netmask netmask persistent granularity mask-r --real-server server-address 真實的伺服器[Real-Server:port]-g --gatewaying 指定LVS 的工作模式為直接路由模式(也是LVS 預設的模式) DR模型-i --ipip 指定LVS 的工作模式為隧道模式-m --masquerading 指定LVS 的工作模式為NAT 模式-w --weight weight 真實伺服器的權值--mcast-interface interface 指定組播的同步介面-c --connection 顯示LVS 目前的連線 如:ipvsadm -L -c--timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout--daemon 顯示同步守護程序狀態--stats 顯示統計資訊 ipvsadm –Ln --state 總共的數量--rate 顯示速率資訊 ipvsadm –Ln --rete 平均值--sort 對虛擬伺服器和真實伺服器排序輸出--numeric -n 輸出IP 地址和埠的數字形式
LVS解決了負載均衡的問題但是LVS沒有健康檢查,即使下游的RS故障了,LVS仍然會轉發到故障節點keepalived則可以解決這個問題,而且還能解決LVS自身的單點故障問題,實現LVS的高可用keepalived編譯安裝完之後執行如下操作:mkdir /etc/keepalived  keepalived.conf拷貝上上述資料夾cp keepalived-1.4.3/keepalived/etc/init.d/keepalived /etc/init.d/cp keepalived-1.4.3/keepalived/etc/sysconfig/keepalived /etc/sysconfig/cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
vrrp_instance VI_1 { state BACKUP interface eth0 #指定HA監測網路的介面 virtual_router_id 51 #虛擬路由標識,同一個vrrp_instance下,master和backup一致 priority 90 advert_int 10 #設定master與backup負載均衡之間同步檢查的時間間隔,單位秒 authentication { auth_type PASS #驗證型別 PASS AH兩種 auth_pass 1111 #驗證密碼,同一個vrrp_instance下的master與backup一致 } virtual_ipaddress { 172.23.26.233 }}virtual_server 172.23.26.233 80 { #VIP delay_loop 6 #執行情況檢查時間,單位秒 lb_algo rr #設定負載排程演算法 lb_kind DR #設定LVS負載均衡機制DR net_mask 255.255.255.0 persistence_timeout 0 #會話保持時間,單位秒 protocol TCP real_server 172.23.26.210 80 { #真實服務地址 weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.23.26.211 80 { #真實服務地址 weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }}
service keepalived start啟動kp這種方式啟動讀取的KEEPALIVE_OPTIONS引數如下:
然後在kp機器上再執行lvs_dr指令碼即可測試驗證成功,能自動將包轉發到活的服務上下面測試UDP的負載均衡及HAlvs_dr指令碼如下:
#! /bin/bashecho 1 > /proc/sys/net/ipv4/ip_forwardipv=/sbin/ipvsadmvip=172.23.26.233rs1=172.23.26.210rs2=172.23.26.211ifconfig eth0:0 downifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip dev eth0:0$ipv -C$ipv -A -u $vip:62000 -s rr$ipv -a -u $vip:62000 -r $rs1:62000 -g $ipv -a -u $vip:62000 -r $rs2:62000 -g
UDP檢測指令碼,安裝ncnc -uvz 172.23.26.210 62000輸出Connection to 172.23.26.210 62000 port [udp/*] succeeded!說明udp檢測成功keepalived.conf配置檔案如下:
vrrp_instance VI_1 { state MASTER interface eth0 #指定HA監測網路的介面 virtual_router_id 51 #虛擬路由標識,同一個vrrp_instance下,master和backup一致 priority 100 advert_int 10 #設定master與backup負載均衡之間同步檢查的時間間隔,單位秒 authentication { auth_type PASS #驗證型別 PASS AH兩種 auth_pass 1111 #驗證密碼,同一個vrrp_instance下的master與backup一致 } virtual_ipaddress { 172.23.26.233 }}virtual_server 172.23.26.233 62000 { #VIP delay_loop 6 #執行情況檢查時間,單位秒 lb_algo rr #設定負載排程演算法 lb_kind DR #設定LVS負載均衡機制DR net_mask 255.255.255.0 persistence_timeout 0 #會話保持時間,單位秒 protocol UDP real_server 172.23.26.210 62000 { #真實服務地址 weight 1 MISC_CHECK { misc_path "/home/lvs/udp_check.sh 172.23.26.210 62000" misc_timeout 10 } } real_server 172.23.26.211 62000 { #真實服務地址 weight 1 MISC_CHECK { misc_path "/home/lvs/udp_check.sh 172.23.26.211 62000" misc_timeout 10 } }}
自己找個UDP客戶端工具或者寫個UDP客戶端發包測試成功