1 基于LVS-NAT的設計:實現nat模式的lvs實驗
搭建環境:先將各主機的防火墻策略和selinux關閉,打開80端口
拓撲圖
image.png
cip:作為客戶端,ip地址設為172.18.252.22 并且路由指向 LVS的172ip地址的網卡,route add default gw 172.18.254.242 。
作為模擬環境要關掉cip的內網網卡,也就是說將僅主機模式的網卡暫時關閉
LVS:開啟路由轉發功能 echo 1 > /proc/sys/net/ipv4/ip_forward,并設置兩個網卡,一個為192.168.136.170
另一個172.18.254.242
RS1和RS2的網段和LVS的內網在同一網段,相當于模擬出交換機環境,網關指向route add default gw 192.168.136.170,將RS服務器的外網網卡關閉
image.png
image.png
在lvs上進行調度:
ipvsadm -A -t 172.18.254.242:80 -s rr(指定調度方式為輪詢方式,默認為wlc方式)——設置調度機制
ipvsadm -a -t 172.18.254.242:80 -r 192.168.136.134 -m(訪問模式,默認狀態為nat) ——加入rs服務器
ipvsadm -a -t 172.18.254.242:80 -r 192.168.136.183 -m
image.png
curl命令進行測試
image.png
擴展:可以將LVS的調度機制進行調整,加入權重進行測試
lvs:
ipvsadm -C 清除之前的設置
ipvsadm -A -t 172.18.254.242:80 -s wrr(加入權重的訪問)
ipvsadm -a -t 172.18.254.242:80 -r 192.168.136.183 -m -w 3 (-w指定權重,后面不接數字默認為1)
ipvsadm -a -t 172.18.254.242:80 -r 192.168.136.134 -m
image.png
基于sh算法的調度:實現session綁定,從而達到只要是從同一地址發送的請求都會發往固定的rs服務器上
lvs服務器上:ipvsadm -E(修改調度模式,不用刪除后再添加新的設置) -t 172.18.254.242:80 -s sh
image.png實現端口的映射,原理是在lvs上以80端口訪問,但是rs服務器上不一定將80端口作為http服務的監聽端口
將rs1的服務器上的httpd的主配置文件的監聽80端口改為8080端口
然后重新在Lvs服務器上設置調度策略
ipvsadm -C
ipvsadm -A -t 172.18.254.242:80 -s rr
ipvsadm -a -t 172.18.254.242:80 -r 192.168.136.183:80 -m -w 3
ipvsadm -a -t 172.18.254.242:80-r 192.168.136.134:8080 -m
image.png
在拓撲圖中將交換機改為路由器后,設置要發生一些改變
首先由于路由器替代了交換機所以lvs的內網不能和rs服務器在同一網段,因此將Lvs的內網設置在vmnet10的環境中,路由器的外網也要設置在vmnet10環境中
在lvs中外網不做改變
ifconfig eth0 192.168.2.170/24 網關指向路由器的外網 route add default gw 192.168.2.180
在路由器上
內網不做改變,外網改為vmnet10,ip地址改為 ifconfig eth1 192.168.2.180,并且不要忘記開啟路由功能
為了方便可以直接在/etc/sysctl中進行修改,以便保存,執行sysctl -p生效
image.png
vim /etc/sysconfig/network-scripts/ifcfg-eth1
image.png
此時rs服務器的網關也要重新設置,要指向路由器的內網
route add default gw 192.168.136.180
至此環境配置成功,通過ping命令進行測試
image.png
實現基于nat模式下的https服務
實現步驟:首先yum install mod_ssl 然后在rs服務器上各自生成自簽名證書
cd /etc/pki/tls/certs
make httpd.crt 會顯示讓你輸入私鑰口令,然后填寫國家,地區,省市,職位公司名等
填寫完后生成私鑰和證書,將證書和私鑰移動到/etc/httpd/conf.d/下
但是由于私鑰有加密口令,導致每次登陸或重啟時,等待時間長,且還要輸入口令比較麻煩,因此執行 openssl rsa -in httpd.key -out httpd2.key——實現解密
在執行mv httpd.key httpd.key.bak
mv httpd2.key httpd.key
vim /etc/httpd/cocnf.d/ssl.conf
image.png
重啟服務
為了使觀察效果明顯,cd /app下創建一個目錄 mkdir site echo /app/site rs1 > /app/site/index.html
在lvs上設置調度 443為https的端口
curl命令進行測試
image.png
注意:在設置https服務時,如果是rs服務器是centos7,要在ssl.conf中設置加權
DocumentRoot "/app/site"
<directory /app/site>
require all granted
</directory>
2 LVS-DR模式
網絡拓撲圖
image.png
環境的搭建,dr模式的工作模式是將rs服務器上都綁定vip(LVS上的外網地址)的地址,但是mac地址是rs服務器本身的mac地址
因此dip(lvs上的內網地址)和rs服務器必須屬于同一個網段
配置環境:
在路由器上:
內網網址為192.168.136.180,外網地址為橋接模式的172.18.62.180
在vs服務器上:
斷掉橋接模式網卡,vs服務器上的vip和dip與rs服務器上的rip屬于同一網段中
為了使vs服務器也具有訪問網絡的功能,它的網關要指向路由器的內網地址
route add default gw 192.168.136.180
在rs服務器上:各自的網關要指向路由器的內網網關
客戶端網關指向路由器外網網卡地址 route add default gw 172.18.62.180
注意:在實現目的之前要解決地址沖突問題,因為每個rs服務器上都有vip(lvs調度器的外網地址)
決方案:在各rs服務器上修改內核參數來限制arp的響應和通告級別
步驟:首先在lvs調度器上設置dip地址
ip a a 192.168.136.62 dev eth0
ip a del 192.168.136.170 dev eth0刪掉原來內網卡的ip ,在內網卡上在添加一個ip
ifconfig eth0:0 192.168.136.170/32 broadcast 192.168.136.170 up
image.png
此時在服務器上執行一個腳本 lvs_dr_vs.sh,執行之前來修改腳本
image.png
修改后執行 bash lvs_dr_vs.sh start
image.png
在兩個rs服務器上修改腳本lvs_dr_rs.sh
image.png
image.png
執行腳本
image.png
測試網絡環境
image.png
3.M:FIREWALL MARK
現統一調度http和https服務
image.png
實現方法:
在lvs調度器上 iptables -t mangle -A PREROUTING -d 192.168.136.170 -p tcp -m --dports 80,443 -j MARK
--set-mark 12
image.png
ipvsadm -C
ipvsadm -A -f 12 -s wrr
ipvsadm -a -f 12 -r 192.168.136.134 -g -w -3
ipvsadm -a -f 12 -r 192.168.136.183 -g
image.png
for i in {1..10};do curl http://192.168.136.170/;curl -k https://192.168.136.170 ;done
image.png
權重比3:1
基于dr模式下的持久連接:
session綁定中:對共享同一組RS的多個集群服務,需要統一進行綁 定,lvs sh算法無法實現
持久連接::實現無論使用任何調度算法 ,在一段時間內(默認360s ),能夠實現將來自同一個地址的請求 始終發往同一個RS
修改方法:在vs服務器上執行ipvsadm -E -f 12 -s wrr -p (-p代表指定的時間,不寫具體時間。默認為360秒)
image.png
但是在實際應用中由于Lvs的局限性,當某個rs服務器出現故障時,lvs無法識別仍然要將某些用戶的訪問調度到該服務器上去,導致訪問出現問題
image.png
image.png
解決方案1:
在vs服務器上執行 curl 192.168.136.134 || ipvsadm -d -f 12 -r 192.168.136.134
image.png
在客戶端上:image.png
當Rs恢復后,再執行curl 192.168.136.134 && ipvsadm -a -f 12 -r 192.168.136.134
但是該方法效率低下因此引入另一個解決方案
基于ldirectord實現判斷和調度
directord:監控和控制LVS守護進程,可管理LVS規則
首先在lvs服務器上 yum install ldirectord-3.9.5-5.1.x86_64.rpm
然后cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
echo error pages > /var/www/html/index.html
此時開啟服務systemctl start ldirectord
image.png
開始設置vim /etc/ha.d/ldirectord.cf
image.png
image.png
image.png
for i in {1..10};do curl http://192.168.136.170/ ;done
image.png
image.png
當rs服務器都出現故障時,進行測試
image.png
image.png