LVS-DR模式實現調度負載
本篇文章主要梳理一下LVS前端調度過程及用戶請求過程
實驗架構
準備工作
添加各主機路由聯通主機通信
Client IP
route add default gw 172.20.17.19
Route
路由主機開啟地址轉發功能
- 將/etc/sysctl.conf文件中的net.ipv4.ip_forward 值改為 1,後執行sysctl -p
後端主機
後端主機包括LVS,web server 主機,在其主機添加響應路由
route add -net 172.20.17.0 netmask 255.255.255.0 gw 192.168.214.133
部署HTTPserver
RS1與RS2安裝web環境
[root@www ~]# yum install httpd php-fpm php-mysql -y
在RS1和RS2主機的httpd.conf中添加如下內容
<IfModule dir_module> DirectoryIndex index.html DirectoryIndex index.php #添加這一行 </IfModule> # AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
配置完成後重啟服務單點測試web服務
RS1和RS2服務設置arp抑制規則
ARP抑制要在添加VIP之前,否正會產生不輪詢的現象
RS1和RS2都執行
[root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_announce [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
LVS,RS1,RS2添加VIP
三臺主機執行:
ip addr add 192.168.214.140 dev lo
配置LVS集群規則
[root@LVS ~]# yum install ipvsadm -y
添加LVS集群,定義調度模式為RR輪詢
[root@LVS ~]# ipvsadm -A -t 192.168.214.140:80 -s rr
將後端兩臺RS 主機加入集群,設置工作模式為DR模型
[root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.145 -g
[root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.143 -g
工作模式
-g: gateway, dr模式,默認
-i: ipip, tun模式
-m: masquerade, nat模式
-w weight:權重
查看ipvsadm規則信息
[root@LVS ~]# 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.214.140:80 rr
-> 192.168.214.143:80 Route 1 0 0
-> 192.168.214.145:80 Route 1 0 0
Client查看測試
[root@yufu ~]# for i in {1..10};do curl 192.168.214.140;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
部署DNS
這裏用DNS是讓客戶端使用域名解析的方式訪問web服務,這樣比較完整地模擬出正常環境下用戶的請求響應過程
安裝DNS
[root@DNS ~]# yum install bind -y
啟動服務
[root@DNS ~]# systemctl start named
編輯named.conf文件內容如下
options {
// listen-on port 53 { 127.0.0.1; };
listen-on port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; };
allow-query { any; };
編輯named.rfc1912.zones文件添加如下配置段
zone "yufu123.com" IN {
type master;
file "yufu123.com.zone";
};
在/var/named/目錄下創建yufu123.com.zone
vim /var/named/yufu123.com.zone
$TTL 1D
@ IN SOA ns1.yufu123.com. admin.yufu.com (
20180703
1H
5M
7D
1D )
IN NS ns1.yufu123.com.
ns1 IN A 172.20.17.20
www.yufu123.com. IN A 192.168.214.140
yufu123.com. IN A 192.168.214.140
給DNS主機添加一條路由指向路由器的網口
[root@DNS ~]# route add -net 192.168.214.0 netmask 255.255.255.0 gw 172.20.17.19
Client使用域名測試
使用域名解析時,需要將路由表中的地址改為DNS服務的主機地址,如下
echo "nameserver 172.20.17.20" > /etc/resolv.conf
使用域名測試訪問
[root@yufu ~]# for i in {1..10};do curl http://www.yufu123.com;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
不帶www測試
[root@yufu ~]# for i in {1..10};do curl http://yufu123.com;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
一些問題
至此LVS前端負載調度的過程已經實現了,但是還存在很多的問題:比如LVS的角度節點存在單點問題,因為我只部署了一臺,在圖中畫出了備用的節點,可以使用Keepalived實現LVS的高可用,但是這裏並不打算實現高可用的架構。此外,還存在另一個問題,就是LVS無法對後端的RS進行健康狀態監測,LVS只有調度功能,沒有健康狀態監測的功能,如果後端服務down機,lvs還是會一如既往地往故障主機上調度請求的,要實現健康狀態監測,可以自己編寫檢測腳本實現,或者使用第三方工具輔助。後面的內容,就來實現基於第三方工具實現LVS的自動檢測後端主機並自動添加刪除RS節點的功能。
ldirectord監控和控制LVS
ldirectord 可以監控和控制LVS守護進程,還可以管理LVS規則
安裝ldirectord
[root@LVS ~]# yum install ldirectord-3.9.6-0rc1.1.1.x86_64.rpm -y
復制配置文件
[root@LVS ~]# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/ldirectord.cf
編輯內容
# Global Directives
checktimeout=3
checkinterval=1
#fallback=127.0.0.1:80
#fallback6=[::1]:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="[email protected]"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no
# Sample for an http virtual service
virtual=192.168.214.140:80
real=192.168.214.143:80 gate
real=192.168.214.145:80 gate
# real=192.168.6.6:80 gate
fallback=127.0.0.1:80 gate
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
receive="RS"
通過上面的配置,無需再使用ipvsadm工具手動添加規則,在ldirectord配置文件中定義好集群規則即可。當後端主機故障無法連通時,ldirectord會自動剔除故障節點,節點恢復時自動添加
LVS-DR模式實現調度負載