LVS 負載均衡叢集構建

2020-10-09 11:00:38

負載均衡叢集(LBC)

1.負載均衡叢集的概述
所有節點的工作內容一致,做的都是同一件事,互相分擔節點伺服器的壓力。如存取量,單臺節點的存取量不能夠很好的滿足使用者端的存取,這個時候,我們就可以增加伺服器的數量來解決這個問題,這樣就可以很好的提高使用者存取的效率

2.叢集中各節點的特點
每臺伺服器分擔叢集節點的壓力、工作目標明確、工作內容一致、提供的是工作效率

3.LVS負載均衡叢集的分類

模式工作原理
LVS-DR模式又叫直接路由模式,使用者端傳送一個包含VIP地址的請求到負載排程器上,負載排程器根據演演算法提交給內網真實伺服器處理,然後內網真實伺服器直接返回給使用者端。唯一的好處就是返回的封包不經過負載排程器,減輕了負載排程器的壓力
LVS-NAT模式使用者端請求負載排程器,負載排程器根據NAT地址轉換功能,將請求傳送給內網真實伺服器去處理,真實服務處理了之後返回負載排程器,再由負載排程器返回給使用者端。整個過程都要經過負載排程器,極大的增加負載排程器的壓力

LVS-DR模式的搭建

準備工作

1.準備三臺centos 7 的作業系統
2.一臺為LVS負載排程器、兩臺為httpd伺服器
3.LVS負載排程器上存在兩張網路卡,一張內網網路卡,主要連線兩臺httpd伺服器的。一張外網,主要和外網進行通訊
3.兩臺httpd伺服器存在於內網當中

關閉防火牆、selinux以及網路卡守護行程

[root@lvs-dr ~]# systemctl stop firewalld
[root@lvs-dr ~]# systemctl disable firewalld
[root@lvs-dr ~]# vi /etc/selinux/config 
......
SELINUX=disabled
......
[root@lvs-dr ~]# setenforce 0
[root@lvs-dr ~]# systemctl stop NetworkManager   //關閉網路卡守護行程
[root@lvs-dr ~]# systemctl disable NetworkManager 

注:所有系統均有執行以上操作

Lvs-dr 負載排程器的設定

[root@lvs-dr ~]# vi /etc/sysctl.conf    //編輯這個檔案
net.ipv4.conf.all.send_redirects = 0       
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs-dr ~]# sysctl -p     //執行這個生效
[root@lvs-dr ~]# yum install -y ipvsadm    //安裝ipvsadm軟體
[root@lvs-dr ~]# modprobe ip_vs    //把ipvsadm載入到核心當中去
[root@lvs-dr ~]# ipvsadm -Ln      //檢視當前ipvsadm的狀態
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs-dr ~]# cd /etc/sysconfig/network-scripts/   //進入網路卡組態檔所在的目錄
[root@lvs-dr network-scripts]# cp -r ifcfg-ens33 ifcfg-ens33:0     //複製內網網路卡作為子網路卡
[root@lvs-dr network-scripts]# vi ifcfg-ens33:0   //編輯這張網路卡,修改如下的內容
IPADDR=192.168.1.150     //修改IP地址
NAME="ens33:0"      //修改名稱
#UUID="76ac6300-c65f-4cae-baa5-ca12c5bdcde0"    //註釋這一行
DEVICE="ens33:0"  
[root@lvs-dr network-scripts]# systemctl restart network   //然後重新啟動網路卡即可
[root@lvs-dr network-scripts]# ip a   //使用這個命令就可以檢視得到我們設定的效果了
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d8:b0:c3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.150/24 brd 192.168.1.255 scope global secondary ens33:0

以上操作完成以後,我們就可以新增叢集以及主機了
[root@lvs-dr ~]# ipvsadm -A -t 192.168.1.150:80 -s rr  //建立一個叢集
[root@lvs-dr ~]# ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.20:80 -g    //為叢集新增主機
[root@lvs-dr ~]# ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.30:80 -g 
[root@lvs-dr ~]# ipvsadm -ln    //檢視新增的狀態
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.150:80 rr
  -> 192.168.1.20:80              Route   1      0          0         
  -> 192.168.1.30:80              Route   1      0          0 
注:-A 建立一個叢集  -t 指定VIP 地址  -s 指定演演算法  rr 代表輪詢 -a  新增主機  -g  代表 lvs-dr 模式 

優化操作
[root@lvs-dr ~]# ipvsadm -Sn     //儲存設定
-A -t 192.168.1.150:80 -s rr
-a -t 192.168.1.150:80 -r 192.168.1.20:80 -g -w 1
-a -t 192.168.1.150:80 -r 192.168.1.30:80 -g -w 1
[root@lvs-dr ~]# echo "ipvsadm -Sn" >> /etc/sysconfig/ipvsadm     //將輸出的內容儲存到一個檔案當中
[root@lvs-dr ~]# ipvsadm -C     //清除當前ipvsadm的所有設定
[root@lvs-dr ~]# ipvsadm-restore <    /etc/sysconfig/ipvsadm     //重新載入設定
[root@lvs-dr ~]# echo "ipvsadm-restore < /etc/sysconfig/ipvsadm" >> /etc/rc.local   //加入到開機自啟 
[root@lvs-dr ~]# ipvsadm -Ln --stats     //檢視狀態
IP Virtual Server version 1.2.1 (size=4096)
[root@lvs-dr ~]# 
[root@lvs-dr ~]# ipvsadm -Sn
-A -t 192.168.1.150:80 -s rr
-a -t 192.168.1.150:80 -r 192.168.1.20:80 -g -w 1
-a -t 192.168.1.150:80 -r 192.168.1.30:80 -g -w 1

httpd伺服器的設定

[root@server1 ~]# yum install -y httpd    //下載httpd伺服器
[root@server1 ~]# systemctl start httpd 
[root@server1 ~]# systemctl enable httpd 
[root@server1 ~]# echo "this is server 1" >> /var/www/html/index.html 
[root@server1 ~]# curl localhost
this is server 1
注:兩臺httpdserver 都要執行以上操作,唯一不同的就是網頁的內容,儘量讓他們不一樣,雖然在真實環境下所有真實伺服器的內容都是一致,為了實現實驗的效果,只好將他們設定為不一樣

以上操作完成以後,在來執行以下操作(兩臺httpd伺服器操作一致)
[root@server1 ~]# cd /etc/sysconfig/network-scripts/  //進入網路卡組態檔
[root@server1 network-scripts]# cp -r ifcfg-lo ifcfg-lo:0    //複製迴環網路卡增加一個子網路卡
[root@server1 network-scripts]# vi ifcfg-lo:0  //修改這個網路卡,修改如下內容
DEVICE=lo:0
IPADDR=192.168.1.150
NETMASK=255.255.255.255

為了存取IP地址方式衝突我們進行修改arp的相應級別操作
[root@server1 network-scripts]# vi /etc/sysctl.conf   //編輯這個檔案   新增如下內容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@server1 network-scripts]# sysctl -p    //執行這個生效
[root@server1 ~]# systemctl restart network    //重新啟動網路卡操作
[root@server1 ~]# ip a      //檢視設定是否生效
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.1.150/32 brd 192.168.1.150 scope global lo:0
       valid_lft forever preferred_lft forever

然後我們新增一條路由(當來自192.168.1.150的資料都交給lo:0網路卡去處理)
[root@server1 ~]# route add -host 192.168.1.150 dev lo:0
[root@server1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.1.150   0.0.0.0         255.255.255.255 UH    0      0        0 lo
[root@server1 ~]# echo "route add -host 192.168.1.150 dev lo:0" >> /etc/rc.local    //寫入到開機自動

驗證測試
第一次存取
在這裡插入圖片描述
當我們不斷點選重新整理按鈕時(就會在兩個伺服器之間來回切換)
在這裡插入圖片描述
負載排程器上檢視分擔的量

[root@lvs-dr ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.1.150:80                    6      191        0    52055        0
  -> 192.168.1.20:80                     3      121        0    34211        0
  -> 192.168.1.30:80                     3       70        0    17844        0

以上就是LVS-DR 模式的構建

LVS-NAT模式的搭建

我們基於以上的主機來建立,因為我之前拍攝的有快照,所有這裡就直接恢復然後進行操作了

lvs-nat 負載排程器的設定

[root@lvs-nat ~]# vi /etc/sysctl.conf    //編輯這個檔案
net.ipv4.ip_forward = 1     //開啟路由轉發功能
[root@lvs-nat ~]# sysctl -p
[root@lvs-nat ~]# yum install -y ipvsadm    //安裝ipvsadm
[root@lvs-nat ~]# ipvsadm -A -t 10.1.1.10:80 -s rr    //建立叢集並且新增主機  
[root@lvs-nat ~]# ipvsadm -a -t 10.1.1.10:80 -r 192.168.1.20:80 -m
[root@lvs-nat ~]# ipvsadm -a -t 10.1.1.10:80 -r 192.168.1.30:80 -m
[root@lvs-nat ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.1.10:80 rr
  -> 192.168.1.20:80              Masq    1      0          0         
  -> 192.168.1.30:80              Masq    1      0          0      
注:這裡的叢集對外的IP地址為負載排程器上外網路卡的IP地址

優化操作 和LVS-DR模式的一致,這裡就不寫了

httpd伺服器的設定 (兩臺伺服器的操作一致)

[root@server2 ~]# yum install -y httpd 
[root@server2 ~]# systemctl start httpd 
[root@server2 ~]# echo  "this is server 1" >> /var/www/html/index.html 
[root@server2 ~]# curl localhost
this is server 1
這裡還是一樣,兩臺伺服器的內容一致,主要好區分效果

然後我們為兩臺伺服器新增閘道器,閘道器指向負載排程器上內網網路卡的IP地址
[root@server2 ~]# echo "GATEWAY=192.168.1.10" >>/etc/sysconfig/network-scripts/ifcfg-ens33 
[root@server2 ~]# systemctl restart network 

瀏覽器上測試
第一次存取
在這裡插入圖片描述
第二次存取(不斷重新整理頁面)
在這裡插入圖片描述
至此,負載均衡叢集的兩種模式就此搭建完成,如有錯誤,歡迎指出改正