1.負載均衡叢集的概述
所有節點的工作內容一致,做的都是同一件事,互相分擔節點伺服器的壓力。如存取量,單臺節點的存取量不能夠很好的滿足使用者端的存取,這個時候,我們就可以增加伺服器的數量來解決這個問題,這樣就可以很好的提高使用者存取的效率
2.叢集中各節點的特點
每臺伺服器分擔叢集節點的壓力、工作目標明確、工作內容一致、提供的是工作效率
3.LVS負載均衡叢集的分類
模式 | 工作原理 |
---|---|
LVS-DR模式 | 又叫直接路由模式,使用者端傳送一個包含VIP地址的請求到負載排程器上,負載排程器根據演演算法提交給內網真實伺服器處理,然後內網真實伺服器直接返回給使用者端。唯一的好處就是返回的封包不經過負載排程器,減輕了負載排程器的壓力 |
LVS-NAT模式 | 使用者端請求負載排程器,負載排程器根據NAT地址轉換功能,將請求傳送給內網真實伺服器去處理,真實服務處理了之後返回負載排程器,再由負載排程器返回給使用者端。整個過程都要經過負載排程器,極大的增加負載排程器的壓力 |
準備工作
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 負載排程器的設定
[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
瀏覽器上測試
第一次存取
第二次存取(不斷重新整理頁面)
至此,負載均衡叢集的兩種模式就此搭建完成,如有錯誤,歡迎指出改正