一臺虛擬機器搞定負載均衡lvs-NAT模式和lvs-DR模式搭建
首先來說一下負載均衡,為了解決一個伺服器不能支撐大併發量使用者的訪問,所以通過負載均衡的方法來解決這個問題,負載均衡有兩種實現方案,一種是通過硬體來實現可以購買 f5裝置,一種是通過軟體來實現如lvs、nginx等,由於lvs直接是linux系統核心級別的,實現起來方便所以仙子主要講解lvs實現負載均衡。、
lvs實現負載均衡有三種模式,分別是 NAT、DR、TUN模式,我只學習了NAT模式和DR模式的,現在主要講解怎麼搭建NAT、DR模式。nat 叫做地址轉換,dr叫做直接路由、tun叫隧道。
一、 NAT模式搭建的環境準備
首先準備一臺安裝了centos 7的虛擬機器,然後完整克隆出幾臺虛擬機器,克隆出來的虛擬機器需要需改幾個地方,第一個地方就是網絡卡的地方 vi /etc/sysconfig/network-script/ifcfg-eth0 裡面的 HWADDR 值需要修改,這個值是mac地址,還有一個需要修改的就是UUID ,這個也要修改稱不一樣的,然後重啟網絡卡。
1、準備工作
1)首先,關閉防火牆,setenforce 0
2)在要當作lvs伺服器上安裝ipvsadm
yum install ipvsadm -y
2、網路拓撲搭建
LVS Director機器: 公網地址:vip 主機名:lvs vip地址: 192.168.0.200 子網掩碼:255.255.255.0 閘道器: 192.168.0.1 網路連線方式:Bridge 私網地址:dip 主機名:lvs dip地址: 172.16.100.1 子網掩碼:255.255.0.0 閘道器: 不指定閘道器 網路連線方式:Host-Only RealServer機器: 私網地址:rip1 主機名:web1 rip1地址:172.16.100.10 子網掩碼:255.255.0.0 閘道器: 172.16.100.1 網路連線方式:Host-Only 私網地址:rip2 主機名:web2 rip1地址:172.16.100.11 子網掩碼:255.255.0.0 閘道器: 172.16.100.1 網路連線方式:Host-Only
3、在RealServer上部署httpd服務並測試
安裝httpd服務,建立httpd測試頁面,啟動httpd服務
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# echo "RS1-web1 Allentuns.com" > /var/www/html/index.html
[[email protected] ~]# yum -y install httpd
[ [email protected] ~]# echo "RS2-web2 Allentuns.com" > /var/www/html/index.html
[[email protected] ~]# service httpd start
測試httpd服務是否OK!
[[email protected] ~]# curl http://localhost RS1-web1 Allentuns.com
[[email protected] ~]# curl http://172.16.100.11 RS2-web2 Allentuns.com
[點選並拖拽以移動]
4、在Director上部署ipvs服務並測試
(1)安裝ipvsadm
[[email protected] ~]# yum -y install ipvsadm
(2)新增叢集服務
[[email protected] ~]# ipvsadm -A -t 192.168.0.200:80 -s rr #定義一個叢集服務
[[email protected] ~]# ipvsadm -a -t 192.168.0.200:80 -r 172.16.100.10 -m #新增RealServer並指派調
度演算法為NAT
[[email protected] ~]# ipvsadm -a -t 192.168.0.200:80 -r 172.16.100.11 -m #新增RealServer並指派排程演算法為NAT
[[email protected] ~]# ipvsadm -L -n #檢視ipvs定義的規則列表 IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.200:80 rr
-> 172.16.100.10:80 Masq 1 0 0
-> 172.16.100.11:80 Masq 1 0 0
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward #檢視Linux是否開啟路由
轉發功能 0
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #啟動Linux的路由轉發功
能 [[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward 1
(3)測試訪問http頁面
[[email protected] ~]# curl http://192.168.0.200/index.html RS2-web2 Allentuns.com #第一次是web2
[[email protected] ~]# curl http://192.168.0.200/index.html RS1-web1 Allentuns.com #第二次是web1
[[email protected] ~]# curl http://192.168.0.200/index.html RS2-web2 Allentuns.com #第三次是web1
[[email protected] ~]# curl http://192.168.0.200/index.html RS1-web1 Allentuns.com #第四次是web2
(4)永久儲存LVS規則並恢復
第一種方法:
[[email protected] ~]# service ipvsadm save ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [確定]
第二種方法:
[[email protected] ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1
模擬清空ipvsadm規則來恢復
[[email protected] ~]# ipvsadm -C
[[email protected] ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[[email protected] ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.s1
[[email protected] ~]# 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.0.200:80 wrr
-> 172.16.100.10:80 Masq 3 0 0
-> 172.16.100.11:80 Masq 1 0 0
二、 DR模式搭建的環境準備
1、在自己的虛擬機器上操作需要準備5臺Linux系統,一臺模擬客戶端、一臺模擬路由器、一臺模擬lvs伺服器,剩下兩臺模擬realServer,作為後臺服務的提供者。這裡的五臺虛擬機器都是克隆出來的話,需要注意的是網絡卡配置資訊裡的HWADDR和uuid要與其他的都不同。
2、網路拓撲的搭建,我認為這一步是最難的,首先ip、網段、路由、後臺的httpd服務都要搞好,這些做完以後配置lvs其實很容易,我搭建dr模式大部分時間也是花費在了網路拓撲的搭建。
3、具體搭建內容太多,說幾個重要的地方吧,也是我踩得坑,第一要模擬內外網,客戶端的掩碼和內網的掩碼要一樣,這點是經驗之談,然後網段可以不一樣,比如外網模擬 192.168.0.22 ,內網模擬 192.168.30.100 ,然後客戶端的網絡卡需要通過橋接模式 ,而路由器需要兩塊網絡卡 與外網相通的需要橋接模式,與內網相通的是僅主機模式,然後各網絡卡的hwaddr 與uuid 都需要不同-----這點我深受其害。
4、然後就是搭建dr模式
1)首先在兩臺real server上執行下面的命令
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
2)並且將vip設定到迴環網絡卡中
ip a a vip/32 dev lo
3)lvs伺服器上的操作
一定要關閉防火牆,
4)配置命令
ipvsadm -A -t 192.168.30.98:80 -s rr
ipvsadm -a -t 192.168.30.98:80 -r 192.168.30.100 -g
ipvsadm -a -t 192.168.30.98:80 -r 192.168.30.101 -g
5)在lvs伺服器上將vip加入到 dip網絡卡上
ip a a 192.168.30.98/32 dev eth0
6)網絡卡檔案配置完以後都需要進行重啟完卡
systemctl restart network
7)在客戶端可以通過curl 命令來測試
下面說一下過程中遇到的一些阻力
1)由於我的linux系統都是克隆出來的,所以有的網絡卡中的hwaddr 與 uuid沒有修改成不同的
2)模擬路由器的那臺裝置 需要開啟路由功能
echo net.ipv4.ip_forward =1 >> /etc/sysctl.conf
sysctl -p
iptables -vnL
3)還有就是在最後網路拓撲都已經配置完以後client端死活ping不通內網ip,最後發現是因為 lvs服務得防火牆沒有關掉導致
4)每個伺服器都要執行 setenforce 0
5)學到的一些命令
route add default gw 192.168.30.1 --------------新增閘道器
route -nn 檢視閘道器
tcpdump -i eth0 -nn port 80 ----------------抓包,獲取80埠的包
tcpdump -i eth0 -nn icmp -----------------抓icmp包
還有就是安裝完httpd服務以後,,直接像 /var/www/html 下寫檔案 vi index.html
啟動 httpd服務 systemctl restart httpd
ipvsadm -A -t 192.168.30.98 -s rr 新增排程演算法
ipvsadm -a -t 192.168.30.98:80 -g 新增策略位dr模式
永久儲存lvs配置 ipvsadm -S -n > /etc/sysconfig/ipvsadm
重啟伺服器以後恢復配置 ipvsadm -R < /etc/sysconfig/ipvsadm
檢視伺服器配置資訊 ipvsadm -Ln
6)這裡要注意vip 子網掩碼是32位 255.255.255.255
7)vip在lvs伺服器上繫結的時候需要在 eth0上繫結,而不能在lo上