LVS的运用
前文:本文主要介紹,輪詢(Round Robin) ,加權輪詢(Weighted Round Robin)? ,最少連接(Least Connections),? 加權最少連接(Weighted Least Connections),這4種常用調度算法,及LVS三種方法的NAT,DR這兩種模式,以及最后的一個實例
目錄
一.LVS的簡潔
1.LVS是負載均衡(LB)集群
2. LVS集群組成?
3.LVS術語?
4.LVS工作模式?
5.負載均衡調度算法?
二.ipvsadm的語法格式 .及應用示例
1.語法
2.基本示例
3.部署LVS-NAT集群
4.部署LVS-DR集群
4.手動編寫動態檢測腳本
一.LVS的簡潔
1.LVS是負載均衡(LB)集群
??????? LVS的優點
???????????? - 負載能力強,工作在4層,對內存.CPU消耗第
???????????? - 配置性低,沒有太多可配置性,減少人為錯誤
???????????? - 應用面廣,幾乎可以為所有應用提供負載均衡
???????? 缺點
????????????? - 不支持正則表達式,不能實現動靜分離
????????????? - 如果網站架構龐大,LVS-DR配置比較繁瑣
2. LVS集群組成?
????????前端:負載均衡層 由一臺或多臺負載調度器構成?
????????中間:服務器群組層? 由一組實際運行應用服務的服務器組成?
????????底端:數據共享存儲層 提供共享存儲空間的存儲區域
3.LVS術語?
Director Server: 調度服務器?
????????將負載分發到Real Server的服務器?
RealServer:真實服務器?
????????真正提供應用服務的服務器?
VIP:虛擬IP地址?
????????公布給用戶訪問的虛擬IP地址?
DIP:調度器連接后端節點服務器的IP地址?
RIP:真實IP地址? 集群節點上使用的IP地址
4.LVS工作模式?
VS/NAT?
????????-通過網絡地址轉換實現的虛擬服務器?
????????-大并發訪問時,調度器的性能成為瓶頸?
VS/DR?
????????-直接使用路由技術實現虛擬服務器?
????????-節點服務器需要配置VIP, 注意MAC地址廣播?
VS/TUN?
-通過隧道方式實現虛擬服務器
5.負載均衡調度算法?
LVS目前實現了10種調度算法
1.輪詢調度 2.加權輪詢調度 3.最小連接調度 4.加權最小連接調度 5.基于局部的最少連接 6.帶復制的基于局部性的最少連接 7.目標地址散列調度 8.源地址散列調度U 9.最短的期望的延遲 10.最少隊列調度二.ipvsadm的語法格式 .及應用示例
1.語法
?
L是list查看,n是number數字格式顯示
-r:指定
-s后面指定調度算法,如rr(輪詢)、wrr(加權輪詢)、lc(最少連接)、wlc(加權最少連接)等等
-m指定集群工作模式為NAT模式,
-g則代表使用DR模式
-i代表TUN模式? -w 權重
2.基本示例
1)創建LVS虛擬集群服務器(算法為加權輪詢:wrr)
yum -y install ipvsadm ipvsadm -A -t 192.168.4.5:80 -s wrr #添加虛擬服務器 ipvsadm -Ln #查看2)為集群添加若干真實服務
ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 #添加真實服務器器并指定調度服務器 ipvsadm -Ln #查看 ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -m -w 2 #添加真實服務器器并指定調度服務器并一NAT模式加權為2 ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.201 -m -w 3 #添加真實服務器器并指定調度服務器并一NAT模式加權為3 ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.202 -m -w 4 #添加真實服務器器并指定調度服務器并一NAT模式加權為4-a:真實服務器 -t:TCP -r:指定 -m:NAT模式 -w:權重3)修改集群服務器設置(修改調度器算法,將加權輪詢修改為輪詢)
ipvsadm -E -t 192.168.4.5:80 -s rr #-E修改虛擬服務器,-t:TCP -s修改算法 rr論詢 ipvsadm -Ln #查看4)修改真實服務器
ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.202 -g #修改真實服務器將NAT模式改為DR -g:DR模式5)查看LVS狀態
ipvsadm -Ln6)刪除所有集群服務設置
ipvsadm -D -t 192.168.4.5:807)創建另一個集群(算法為最少連接算法;使用-m選項,設置工作模式為NAT模式)
ipvsadm -A -t 192.168.4.5:3306 -s lc ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.100 -m ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.200 -m8)永久保存所有規則(非必須的操作)
ipvsadm-save -n > /etc/sysconfig/ipvsadm9)清空所有規則
ipvsadm -C注意:查到規則永久規則需要確保ipvsadm服務為開機啟動服務才可以。
3.部署LVS-NAT集群
1)設置Web服務器
[root@web1 ~]# yum -y install httpd????????#安裝軟件 [root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html????#創建網頁文件 [root@web1 ~]# firewall-cmd --set-default-zone=trusted????????????#設置防火墻 [root@web1 ~]# setenforce 0 [root@web1 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config [root@web2 ~]# yum -y install httpd????????#安裝軟件 [root@web2 ~]# echo "192.168.2.200" > /var/www/html/index.html????#創建網頁文件 [root@web2 ~]# firewall-cmd --set-default-zone=trusted????????????#設置防火墻 [root@web2 ~]# setenforce 0 [root@web2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config2)啟動Web服務器軟件
[root@web1 ~]# systemctl restart httpd [root@web2 ~]# systemctl restart httpd沒有域名服務的服務要長時間開啟是沒有域名,系統要找,所以慢在服務器上改配置 /etc/httpd/conf/httpd.conf? #找ServerName開頭的行去掉注釋行有域名
完成后可以使用proxy主機測試下是否可以訪問web1和web2
?
3)配置網關,將web1和web2的網關設置為調度器ip,如:192.168.2.5(不能照抄網卡名稱)
nmcli connection modify eth1 ipv4.method manual ipv4.gateway 192.168.2.5nmcli connection up eth1ip route show???????? #查看默認網關 [root@web2 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.gateway 192.168.2.5 #備注:網卡名稱不能照抄,需要自己查看下的網卡名稱 [root@web2 ~]# nmcli connection up eth1 [root@web2 ~]# ip route show????????#查看默認網關,default后面的IP就是默認網關實驗拓撲
LVS采用的是路由器的NAT通訊原理!通訊流程如下: 1)客戶端發送請求數據包(src:4.10,dst:4.5) 2)數據包被發送給LVS調度器,調度器做NAT地址轉換(外網轉內網,內網轉外網)a)數據包被修改為src:4.10,dst:2.100(dst也有可能被修改為2.200,隨機的)b)LVS調度器把數據包轉發給后端真正的web服務器(2.100) 3)web1收到數據包開始回應數據(rsc:2.100,dst:4.10)備注:誰訪問就給誰回復數據,因為src是4.10,所以應該給4.10回應數據!但是,自己是2.100,對方是4.10,跨網段默認無法通訊,如何解決???Web1和web2都需要設置默認網關(也就是192.168.2.5) 4)web1想發送數據給4.10但是又無法與其通訊,所以數據包被交給默認網關 5)LVS調度器(軟路由)收到后端web發送過來的數據后,再次做NAT地址轉換a)數據包被修改為src:4.5,dst:4.10b)LVS調度器把數據包轉發給客戶端主機 6)客戶端接收網頁數據內容 注意:客戶端訪問的是4.5,最后是4.5給客戶端回復的網頁數據!!!!4)確認調度器的路由轉發功能(如果已經開啟,可以忽略)\
(1)臨時?
???????? echo 1 > /proc/sys/net/ipv4/ip_forward???? #開啟路由轉發,臨時有效
?????????cat /proc/sys/net/ipv4/ip_forward????????? #查看效果
?(2)修改配置文件,設置永久規則
????????echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
5)創建集群服務器
yum -y install ipvsadm ipvsadm -A -t 192.168.4.5:80 -s wrr6)添加真實服務器
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m [root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 1 -m?7)查看規則列表(L是list查看,n是number數字格式顯示)
ipvsadm -Ln8)設置防火墻,SELinux
[root@proxy ~]# firewall-cmd --set-default-zone=trusted [root@proxy ~]# setenforce 0 [root@proxy ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/configLVS NAT實驗請求數據包從LVS調度器進,web的相應數據包也從LVS調度器出,那么LVS調度器就需要承載所有數據的壓力,會成為整個集群的瓶頸!!
4.部署LVS-DR集群
1)網絡中的基本原則是A訪問B,必須是B返回數據給A,現在4.10訪問4.5,最終4.100給4.10返回網頁數據,所有數據包都會被丟棄!!!那怎么辦呢?地址欺騙!
注意:為了防止沖突,VIP必須要配置在網卡的虛擬接口
?2)設置Proxy服務器的VIP和DIP
[root@proxy ~]# cd /etc/sysconfig/network-scripts/(網卡配置文件) [root@proxy ~]# cp ifcfg-eth0 ifcfg-eth0:0(選擇與客戶端相同的網卡名位置) [root@proxy ~]# vim ifcfg-eth0:0 #網卡類型為:以太網卡 TYPE=Ethernet #none手動配置IP,或者dhcp自動配置IP BOOTPROTO=none #網卡名稱 NAME=eth0:0 #設備名稱 DEVICE=eth0:0 #開機時是否自動激活該網卡 ONBOOT=yes #IP地址 IPADDR=192.168.4.15 #子網掩碼 PREFIX=24 [root@proxy ~]# systemctl restart network????#重啟網絡服務(遠程的時候會斷一瞬間) [root@proxy ~]# ip a s #會看到一個網卡下面有兩個IP地址常見問題:RHEL7和Centos7系統中有兩個管理網絡的服務,有可能沖突?
解決方法:關閉NetworkManager服務后重啟network即可
systemctl stop NetworkManager systemctl restart network3)設置服務器網絡參數
[root@web1 ~]# nmcli connection modify eth0 ipv4.method manual \ ipv4.addresses 192.168.4.100/24 connection.autoconnect yes [root@web1 ~]# nmcli connection up eth0接下來給web1配置VIP地址。
注意:這里的子網掩碼必須是32(也就是全255),網絡地址與IP地址一樣,廣播地址與IP地址也一樣。Lo是本地回環
如果沒有lo則查裝包:先查 yum provides "*ifcfg-lo*"
[root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 ~]# cp ifcfg-lo ifcfg-lo:0 [root@web1 ~]# vim ifcfg-lo:0 #設備名稱 DEVICE=lo:0 #IP地址 IPADDR=192.168.4.15 #子網掩碼 NETMASK=255.255.255.255(主機性ip) #網絡地址 NETWORK=192.168.4.15 #廣播地址 BROADCAST=192.168.4.15 #開機是否激活本網卡 ONBOOT=yes #網卡名稱 NAME=lo:0防止地址沖突的問題:
????????這里因為web1也配置與調度器一樣的VIP地址,默認肯定會出現地址沖突;
????????sysctl.conf文件寫入這下面四行的主要目的就是訪問192.168.4.15的數據包,只有調度器會響應,其他主機都不做任何響應,這樣防止地址沖突的問題
root@web1 ~]# vim /etc/sysctl.conf #文件末尾手動寫入如下4行內容,防止地址沖突(如果不加的話,arp廣播會應答使其沖突) net.ipv4.conf.all.arp_ignore = 1(0不忽略,應答;1忽略) net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2(0,對外宣告,1.通常不告訴別人,2.絕對不告訴別人) net.ipv4.conf.all.arp_announce = 2 #當有arp廣播問誰是192.168.4.15時,本機忽略該ARP廣播,不做任何回應(防止進站沖突) #本機不要向外宣告自己的lo回環地址是192.168.4.15(防止出站沖突) [root@web1 ~]# sysctl -p # (先刷新)在重啟網絡服務 [root@web1 ~]# systemctl restart network????????#重啟網絡服務 [root@web1 ~]# ip a s #會看到一個網卡下面有兩個IP地址常見錯誤:如果重啟網絡后未正確配置lo:0,有可能是NetworkManager和network服務有沖突,關閉NetworkManager后重啟network即可
[root@web1 ~]# systemctl stop NetworkManager [root@web1 ~]# systemctl restart network注:如果有多臺的話配置如上
4)查看規則列表(L代表list查看規則,n代表number數字格式顯示)
ipvsadm -Ln5)客戶端測試
客戶端使用curl命令反復連接http://192.168.4.15(此ip為調度服務器ip)
4.手動編寫動態檢測腳本
[root@proxy ~]# vim check.sh #!/bin/bash VIP=192.168.4.15:80 RIP1=192.168.4.100 RIP2=192.168.4.200 while : dofor IP in $RIP1 $RIP2docurl -s http://$IP &>/dev/null if [ $? -eq 0 ];thenipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IPelseipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IPfidone sleep 1 done總結
- 上一篇: 使用Dockerfile创建一个tomc
- 下一篇: 高可用keepalived实例