LVS之部署實戰

四、LVS軟件包組成

  • 程序包:ipvsadm(LVS管理工具)
  • Unit File: ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 規則保存工具:/usr/sbin/ipvsadm-save
  • 規則重載工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config

 
grep -i -C 10 “ipvs” /boot/config-VERSION-RELEASE.x86_64 #查看內核是否支持IPVS

LVS命令使用

  • -A --add-service在服務器列表中新添加一條新的虛擬服務器記錄
  • -t 表示爲tcp服務
  • -u 表示爲udp服務
  • -s --scheduler 使用的調度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默認調度算法是 wlc

例:ipvsadm -A -t 192.168.64.7:80 -s wlc

 

  • -a --add-server #在服務器表中添加一條新的真實主機記錄
  • -t --tcp-service 說明虛擬服務器提供tcp服務
  • -u --udp-service 說明虛擬服務器提供udp服務
  • -r --real-server 真實服務器地址
  • -m --masquerading 指定LVS工作模式爲NAT模式
  • -w --weight 真實服務器的權值
  • -g --gatewaying 指定LVS工作模式爲直接路由器模式(也是LVS默認的模式)
  • -i --ip 指定LVS的工作模式爲隧道模式
  • -p 會話保持時間,定義流量唄轉到同一個realserver的會話存留時間

ipvsadm -a -t 192.168.64.7:80 -r 192.168.64.107:80 -m -w 1

 
 

  • -E –edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。
  • -D –delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。
  • -C –clear 清除內核虛擬服務器表中的所有記錄。
  • -R –restore 恢復虛擬服務器規則
  • -S –save 保存虛擬服務器規則,輸出爲-R 選項可讀的格式
  • -e –edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄
  • -d –delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄

-L|-l –list 顯示內核虛擬服務器表

  • –numeric, -n:以數字形式輸出地址和端口號
  • –exact:擴展信息,精確值
  • –connection,-c:當前IPVS連接輸出
  • –stats:統計信息
  • –rate :輸出速率信息 參數也可以從/proc/net/ip_vs*映射文件中查看

-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)

 
 

五、部署實戰(NAT模式)

​ NAT模式
​ LVS+keepalived

 

5.1 NAT

準備三臺虛擬機

一臺做LVS調度器,兩臺做後端服務器,四臺最好,還有一臺可做客戶端

環境說明

HOST OS hostname GATEWAY
192.168.217.136 centos7 LVS 192.168.217.2
192.168.217.137 centos7 r1 192.168.217.136
192.168.217.138 centos7 r2 192.168.217.136

不懂???那就結束吧,

 
好吧,開始配置,

爲了好辨認

192.168.217.136 改名爲lvs這臺機子有兩個網卡,

192.168.217.137 改名爲r1

192.168.217.138 改名爲r2

 
 

5.1.1 LVS調度器

1.增加一塊外網網卡

在這裏插入圖片描述

 
 

2.配置/etc/sysconfig/network-scripts/ifcfg-

先查看網卡ip
在這裏插入圖片描述

這裏新添加的網卡名爲ens37

配置文件

[root@lvs ~]# ifconfig
[root@lvs ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens37
[root@lvs ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37

配置ip

在這裏插入圖片描述
重啓服務

[root@lvs ~]# systemctl restart network
[root@lvs ~]# ifconfig

 

3.安裝ipvsadm

yum安裝就很快

[root@lvs ~]# yum install -y ipvsadm

編譯安裝

wget …

tar xvf …

這裏沒有configure,自己解決吧、

make && make install

 

4.開啓路由轉發、關閉ICMP重定向、防火牆規則

[root@lvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 
[root@lvs ~]# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects   
[root@lvs ~]# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects 
[root@lvs ~]# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects 
[root@lvs ~]# echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects 
[root@lvs ~]# iptables -t nat -F  
[root@lvs ~]# iptables -t nat -X
[root@lvs ~]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE

 

5.配置ipvsadm

[root@lvs ~]# ipvsadm -C 清空
[root@lvs ~]# ipvsadm -A -t 192.168.124.29:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.124.29:80 -r 192.168.217.137:80 -m -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.124.29:80 -r 192.168.217.138:80 -m -w 1
[root@lvs ~]# ipvsadm -L -n

查看

在這裏插入圖片描述

參數說明:

-A:表示增加一個虛擬服務

-a:表示增加一個real server

-t:表示TCP服務

-r:指定real server的ip地址

-s:指定調度算法

-m:選擇NAT方式調度(-i tun模式、-g dr模式)

-w:指定權重

 
 

5.1.2 r1操作

1.下載httpd

[root@r1 ~]# yum install -y httpd
[root@r1 ~]# systemctl start httpd

 

2.創建index.html文件

[root@r1 ~]# vim /var/www/html/index.html

寫入

在這裏插入圖片描述

 

3.修改/etc/sysconfig/network-scripts/ifcfg-ens33中的網關

[root@r1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改如下

在這裏插入圖片描述

r2同理

在這裏插入圖片描述

到這基本上就完成配置了。

 
 

5.1.3 測試

在lvs上操作或者在客戶端

[root@lvs ~]# curl 192.168.124.29
[root@lvs ~]# curl 192.168.124.29
[root@lvs ~]#  watch -n 1 ipvsadm -L -n  #動態查看訪問記錄

測試結果

在這裏插入圖片描述

動態查看訪問記錄

在這裏插入圖片描述

 

5.2DR

環境就不說了,開始配置吧

5.2.1 LVS調度器

1.清空ipvsadm規則

[root@lvs ~]# ipvsadm -C

 

2.關掉ens37

[root@lvs ~]# ifdown ens37
[root@lvs ~]# ifconfig

在這裏插入圖片描述
 

3.配置VIP 192.168.217.200

[root@lvs ~]# ifconfig ens33:1 192.168.217.200/24 up
[root@lvs ~]# ifconfig ens33:1

在這裏插入圖片描述
 

4.配置ipvsadm

[root@lvs ~]# ipvsadm -A -t 192.168.217.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.217.200:80 -r 192.168.217.137 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.217.200:80 -r 192.168.217.138 -g -w 1
[root@lvs ~]# ipvsadm -ln

在這裏插入圖片描述

 
 

5.2.2 r1操作

1.修改/etc/sysconfig/network-scripts/ifcfg-ens33

[root@r1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
將網關改回來GATEWAY=192.168.217.2
[root@r1 ~]# systemctl restart network

 

2.在RS節點上的lo(網卡的迴環接口)接口上配置vip(192.168.217.200)

[root@r1 ~]# ifconfig lo:1 192.168.217.200/32 up
[root@r1 ~]# ifconfig lo:1

 

3.在RS節點上抑制ARP響應 (RS1和RS2上分別執行)

[root@r1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@r1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@r1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@r1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

r2操作同理

在這裏插入圖片描述

 

5.2.3 測試

在這裏插入圖片描述

[root@localhost ~]# curl 192.168.217.200
<h>hello 192.168.217.137</h>
[root@localhost ~]# curl 192.168.217.200
<h>hello 192.168.217.138</h>
[root@localhost ~]# curl 192.168.217.200
<h>hello 192.168.217.137</h>
[root@localhost ~]# curl 192.168.217.200
<h>hello 192.168.217.138</h>

在現實的應用中,LVS得到了大量的部署,請參考 http://www.linuxvirtualserver.org/deployment.html

 
 

5.3 lvs+DR+keepalive

5.3.1 配置

(1)在realserver上部署Nginx並配置主頁

[root@rs1 ~]# yum install -y nginx
[root@rs2 ~]# yum install -y nginx
[root@rs1 ~]# echo "welcome to use RS1 192.168.217.137" > /usr/share/nginx/html/index.html
[root@rs2 ~]# echo "<h1>welcome to use RS2 192.168.217.138</h1>" > /usr/share/nginx/html/index.html
[root@rs1 ~]# curl 192.168.217.137
<h1>welcome to use RS1 192.168.217.137</h1>
[root@rs2 ~]# curl 192.168.217.138
<h1>welcome to use RS2 192.168.217.138</h1>

 
(2)在rs1和rs2上編輯realserver腳本並執行,此處貼rs1腳本詳情

[root@rs1 ~]# vim /etc/init.d/realserver
#!/bin/bash
SNS_VIP=192.168.217.200
/etc/init.d/functions
case "$1" in
start)
       ifconfig lo:1 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:1
       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:1 down
       route del $SNS_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 Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

[root@rs1 ~]# chmod +x /etc/init.d/realserver 
[root@rs1 ~]# /etc/init.d/realserver start
RealServer Start OK

 
 

5.3.2 配置主負載均衡器

(1)lvs和lvsbackup上安裝Keepalived

[root@lvs ~]# yum install -y keepalived
[root@lvsbackup ~]# yum install -y keepalived

(2)編輯lb01和lb02上的keepalived.conf配置文件

[root@lvs ~]# cp /etc/keepalived/keepalived.conf{,.bak}  #備份源文件
[root@lvs ~]# > /etc/keepalived/keepalived.conf       #清空源文件
[root@lvs ~]# vim /etc/keepalived/keepalived.conf      #編輯keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
    [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lvs
}
vrrp_instance VI_1 {
    state MASTER  #指定Keepalived的角色,MASTER爲主,BACKUP爲備
    interface ens33
    virtual_router_id 55  #虛擬路由id號,主備需要一直
    priority 150  #優先級,數值越大,優先級越高
    advert_int 1  #檢測間隔,默認爲1s
    authentication {
        auth_type PASS  #認證類型
        auth_pass 1111  #認證密碼
    }
    virtual_ipaddress {
        192.168.217.200/24   #設置DR的虛擬ip,可以多設,一行一個
    }
}

virtual_server 192.168.217.200 80 {  #定義LVS對外提供服務的VIP爲192.168.217.200和port爲80
    delay_loop 6  #設置健康檢查時間,單位爲秒
    lb_algo wrr   #設置負載均衡調度算法爲wrr
    lb_kind DR    #設置LVS實現負載均衡機制爲DR模式
    nat_mask 255.255.255.0  
    persistence_timeout 20  #會話保持超時配置
    protocol TCP  #使用TCP協議檢查realserver的狀態
    
    real_server 192.168.217.137 80 {  #配置真實服務器節點和端口
		weight 100  #權重
        TCP_CHECK {
			connect_timeout 10  #連接超時,單位爲秒
			nb_get_retry 3    #重試連接次數
			connect_port 80     #連接端口
        }
    }
    
    real_server 192.168.217.138 80 {
		weight 100
		TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			connect_port 80
    	}
    }
}

從負載均衡服務器與主負載服務器大致相同,只是在keepalived的配置文件中需要改以下兩處:
  (1)將state由MASTER改爲BACKUP
  (2)將priority由150改爲120
  (3)將router_id由lvs改爲lvsbackup

配置完成後,啓動Keepalived

[root@lvs ~]# systemctl start keepalived
[root@lvsbackup ~]# systemctl start keepalived
[root@lvs ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.217.200:80 wrr persistent 20
  -> 192.168.217.137:80           Route   100    0          0         
  -> 192.168.217.138:80           Route   100    0          0     
[root@lvsbackup ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.217.200:80 wrr persistent 20
  -> 192.168.217.137:80           Route   100    0          0         
  -> 192.168.217.138:80           Route   100    0          0          
[root@lvs ~]# ip addr |grep 192.168.217.200  #查看lb01上是否存在VIP
    inet 192.168.217.200/24 scope global secondary ens33
[root@lvsbackup ~]# ip addr |grep 192.168.217.200  #查看lb02上是否存在VIP,如果有說明存在腦裂

 
 

5.3.3 驗證測試訪問http://http://192.168.217.200

(1)指定請求的均衡轉發:因爲兩個Web服務器的權重都一樣,所以會依次轉發給兩個Web服務器

在這裏插入圖片描述

(2)Web服務器發生故障時

模擬停止192.168.217.138,暫停其Nginx服務,再進行訪192.168.217.200,可以看到只會從137上獲取頁面

[root@r2 ~]# /etc/init.d/nginx stop
Stopping nginx:                                            [  OK  ]

在這裏插入圖片描述

從負載均衡器的狀態監控上,也可以看到192.168.217.138這臺服務器已經從集羣中剔除,當故障修復後,再查看調度器狀態信息,可以看到rs2已經重新加入集羣當中

[root@lvs ~]# ipvsadm -L -n  #lb01上查看調度信息,可以看到rs2已經從集羣中剔除
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.217.200:80 wrr persistent 20
  -> 192.168.217.137:80           Route   100    1          0              
[root@r2 ~]# /etc/init.d/nginx start  #重啓rs2上的nginx服務
Starting nginx:                                              [  OK  ]
[root@lvs ~]# ipvsadm -L -n   #可以看到rs2又重新加入到集羣當中提供服務
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.217.200:80 wrr persistent 20
  -> 192.168.217.137:80           Route   100    1          0         
  -> 192.168.217.138:80           Route   100    1          0             

(3)主負載均衡服務器發生故障時,備機立即充當主機角色提供請求轉發服務

模擬停止lb01上的keepalived服務,可以看到lb01上的vip漂移到了lb02上,但繼續訪問vip卻不受影響。當主負載均衡器(lb01)服務恢復時,vip又會重新漂移到主負載均衡器上(lb01)

[root@lvs ~]# ip addr |grep 192.168.217.200
    inet 192.168.217.200/24 scope global secondary ens33
[root@lvs ~]# systemctl stop keepalived
[root@lvs ~]# ip addr |grep 192.168.217.200
[root@lvsbackup ~]# ip addr |grep 192.168.217.200
    inet 192.168.217.200/24 scope global secondary ens33

此時依然正常運行

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章