LVS-DR
阿新 • • 發佈:2018-11-19
rsa 啟動 something ddr protoc 配置ssl scheduler x86_64 proc 環境搭建:
客戶端:172.20.23.20 路由器: 172.20.23.30/16 192.168.23.30/24 10.0.0.1/16 LVS: VIP --10.0.0.100/16 DIP --192.168.23.100/24 後端服務器: RS1 --192.168.23.36 RS2 --192.168.23.37 網絡環境搭建: 客戶端路由設置: [root@www19:36:15~]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.20.23.30 0.0.0.0 UG 100 0 0 eth0 172.20.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0 LVS服務器路由設置: [root@www19:38:19network-scripts]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0 192.168.23.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1 後端服務器路由設置: [root@apache119:29:53~]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.23.30 0.0.0.0 UG 100 0 0 eth0 192.168.23.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 後端服務器因為都需要綁定VIP,所以我們不得不進行防止arp廣播處理! 處理方式:調整內核參數 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 也可以寫入配置文件/etc/sysctl.conf net.ipv4.conf.all.apr_ignore = 1 net.ipv4.conf.all.arp_announce = 2 處理完成之後我們開始綁定VIP,為了使用穩定我們要選擇lo網卡作為綁定對象! 綁定方式: ip a a 10.0.0.100/32 dev lo ifconfig lo 10.0.0.100/32 想要永久有效需要自行編輯配置文件: 例如:利用網卡別名 [root@apache119:49:07network-scripts]#cat ifcfg-lo:1 DEVICE=lo:1 IPADDR=10.0.0.100 NETMASK=255.255.255.255 NETWORK=127.0.0.0 # If you‘re having problems with gated making 127.0.0.0/8 a martian, # you can change this to something else (255.255.255.255, for example) BROADCAST=127.255.255.255 ONBOOT=yes NAME=loopback LVS調度器規則設定: [root@www19:39:48network-scripts]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 rr -> 192.168.23.36:80 Route 1 0 3 -> 192.168.23.37:80 Route 1 0 2
https使用時,必須使用同一私鑰和證書: 快速生成測試證書: /etc/pki/tls/certs目錄下 Makefile文件中修改加密選項 #/usr/bin/openssl genrsa -aes128 $(KEYLEN) > $@ /usr/bin/openssl genrsa $(KEYLEN) > $@ 執行make httpd.crt --直接生成私鑰和證書 生成的證書拷貝到/etc/httpd/conf.d/ssl/ 然後配置ssl.conf文件 然後復制設個RS主機的所有配置文件到所有RS主機之上! 然後重新生成ipvsadm規則! 測試訪問: curl -k https://10.0.0.100 註意: 要使用相同的秘鑰和證書
利用iptables規則實現標簽會話:
有標簽的就認為是同一服務 -f:firewall MARK 標記 一個 利用防火墻打標簽: iptables -t mangle -A PREROUTING -d VIP -p tcp -m multiport --dports 80,443 -j MARK --set-mark [n] 具體使用: iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 5 防火墻生成策略: [root@www22:01:50~]#iptables -t mangle -nvL Chain PREROUTING (policy ACCEPT 54 packets, 3564 bytes) pkts bytes target prot opt in out source destination 0 0 MARK tcp -- * * 0.0.0.0/0 10.0.0.100 multiport dports 80,443 MARK set 0x5 在lvs服務器中打標: ipvsadm -A -f [n] 實際應用: ipvsadm -A -f 5 -s rr ipvsadm -a -f 5 -r 192.168.23.33 -g ipvsadm -a -f 5 -r 192.168.23.34 -g
持久連接實現方式
每端口持久(PPC):每個端口對應定義為一個集群服務,每集群服務單獨調度
每防火墻標記持久(PFWMC):基於防火墻標記定義集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity
每客戶端持久(PCC):基於0端口(表示所有服務)定義集群服務,即將客戶端對所有應用的請求都調度至後端主機,必須定義為持久模式
持久連接:默認360秒
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-p:後面設置時間
[root@www20:11:11network-scripts]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 5 rr persistent 360
-> 192.168.23.36:0 Route 1 0 2
-> 192.168.23.37:0 Route 1 0 6
客戶端測試:
[root@www20:10:57~]#for i in {1..1000};do curl -k https://10.0.0.100; sleep 1 ;done
hello world
hello world
hello world
自制後端服務器自制腳本:
[root@www22:28:25~]#cat lvs.sh
#!/bin/bash
while true; do
if curl 192.168.23.33 &> /dev/null; then
true
sleep 1
else
ipvsadm -d -f 5 -r 192.168.23.33
exit 2
fi
if curl 192.168.23.34 &> /dev/null; then
true
sleep 1
else
ipvsadm -d -f 5 -r 192.168.23.34
exit 3
fi
done
LVS健康性檢測工具:
ldirectord工具:
檢測方式:
(a) 網絡層檢測,icmp
(b) 傳輸層檢測,端口探測
(c) 應用層檢測,請求某關鍵資源
RS全不用時:backup server, sorry server
包名:
ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
文件:
/etc/ha.d/ldirectord.cf 主配置文件
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版
/usr/lib/systemd/system/ldirectord.service 服務
/usr/sbin/ldirectord 主程序
/var/log/ldirectord.log 日誌
/var/run/ldirectord.ldirectord.pid pid文件
主配置文件初始為空需要cp模板文件!
配置文件詳解:
checktimeout=3
--後端RS主機3秒之內沒有反應就踢出
fallback=127.0.0.1:80
--所有後端主機全部宕機後啟用
autoreload=yes
--自動加載-更改配置無須重啟
logfile="/var/log/ldirectord.log"
--日誌文件
quiescent=no
--後端主機宕機時的處理辦法yes--調整權重為0--no為刪除
配置ipvsadm規則:
virtual=10.0.0.100:80 --VIP
real=192.168.23.33:80 gate 1 --RIP
real=192.168.23.34:80 gate 2 --RIP
service=http --服務
scheduler=wrr --算法
#persistent=600 --持久連接
#netmask=255.255.255.255
protocol=tcp --協議
checktype=negotiate
checkport=80 --檢查端口
request="index.html" --檢測方式-看頁面
receive="hello" --出現字樣
virtualhost=www.x.y.z --虛擬主機
啟動服務:
systemctl start ldirectord
如何實現標簽功能:
1 防火墻標記:
iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10
2 配置文件更改:
virtual=10
real=192.168.23.36 gate
real=192.168.23.37 gate
# real=192.168.6.6:80 gate
fallback=127.0.0.1 gate
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
#protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
receive="hello"
virtualhost=www.x.y.z
LVS-DR