目錄
一.DR簡介
二.DR特點
三.LVS-DR中的ARP問題
四.案例:LVS-DR部署
1.架構圖
2.配置調度服務器
3.配置NFS服務器
4.配置web服務器
5.測驗
五.keepalived作業原理
環境(基于LVS-DR進行搭建)
配置主調度器(192.168.100.14)
配置從調度器(192.168.100.15)
nfs配置
配置web服務器
測驗
一.DR簡介
直接路由
●Direct Routing,簡稱DR模式
●采用半開放式的網路結構,與TUN模式的結構類似,但各節點并不是分散在各地,而是與調度器位于同一個物理網路
●負載調度器與各節點服務器通過本地網路連接,不需要建立專用的IP隧道
二.DR特點
- RS和DS必須在同一個物理網路中
- RS可以使用私有地址,也可以使用公網地址,如果使用公網地址,可以通過互聯網對RIP進行直接訪問
- 所有的請求報文經由Director Server,但回應報文必須不能經過Director Server
- RS的資料包絕不允許指向DIP
- RS上的lo介面配置VIP的IP地址
三.LVS-DR中的ARP問題
- 在LVS-DR負載均衡集群中,負載均衡與節點服務器都要配置相同的VIP地址
- 在局域網中具有相同的IP地址,勢必會造成各服務器ARP通信的紊亂
- 當ARP廣播發送到LVS-DR集群時,因為負載均衡和節點服務器都是連接到相同的網路上,它們都會接收到ARP廣播
- 只有前端的負載均衡器進行回應廣播,節點服務器不應該回應ARP廣播
- 對節點服務要求進行處理,使其不回應針對VIP的ARP請求
- 使用虛介面lo:0承載VIP地址
- 設定內核引數arp_ignore=1:系統只回應目的IP為本地IP的ARP請求
- RealServer回傳報文(源IP是VIP)經路由器轉發,重新封裝報文時,需要先獲取路由器的MAC地址
- 發送ARP請求時,Linux默認使用IP包的源IP地址(即VIP)作為ARP請求包中的源IP地址,而不使用發送介面的IP地址
- 路由器收到ARP請求后,將更新ARP表項
- 原有的VIP對應Director的MAC地址會被更新為VIP對應RealServer的MAC地址
四.案例:LVS-DR部署
1.架構圖

2.配置調度服務器
[root@server ~]# modprobe ip_vs //加載lvs內核
[root@server ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
?
[root@server ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm //安裝ipvsadm工具
警告:/mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中... ################################# [100%]
軟體包 ipvsadm-1.27-7.el7.x86_64 已經安裝
編輯調度服務器腳本
[root@server ~]# vi nat.sh
#!/bin/bash
ifconfig ens33:0 192.168.100.200 broadcast 192.168.100.200 netmask 255.255.255.255 up //添加虛擬地址的虛介面
ipvsadm -C //清除內核虛擬服務器表中的所有記錄
ipvsadm -A -t 192.168.100.200:80 -s rr //創建虛擬服務器
ipvsadm -a -t 192.168.100.200:80 -r 192.168.100.12:80 -g //添加服務器節點
ipvsadm -a -t 192.168.100.200:80 -r 192.168.100.13:80 -g
ipvsadm -Ln //查看節點狀態,加個"-n"將以數字形式顯示地址、埠資訊
[root@server ~]# sh nat.sh //執行腳本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.200:80 rr
-> 192.168.100.12:80 Route 1 0 0
-> 192.168.100.13:80 Route 1 0 0
選項注釋: "-A":表示添加虛擬服務器 "-a":表示添加真實服務器 "-t":用來指定VIP地址及TCP埠 "-r":用來指定RIP地址及TCP埠 "-s":用來指定負載調度演算法——rr(輪詢)、wrr(加權輪詢)、lc(最少連接)、wlc(加權最少連接) "-m":表示使用NAT群集模式(是DR模式,是TUN模式)
3.配置NFS服務器
安裝并啟動nfs和rpcbind服務
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# systemctl start nfs-utils
[root@nfs ~]# systemctl start rpcbind
創建倆個測驗檔案夾,并匯入測驗網頁

設定訪問權限
[root@nfs opt]# vi /etc/exports
/opt/web1 192.168.100.12(ro)
/opt/web2 192.168.100.13(ro)
查看權限
[root@nfs opt]# showmount -e
Export list for nfs:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
4.配置web服務器
安裝http服務
[root@web1 ~]# yum -y install httpd
掛載nfs網頁
[root@web1 ~]# mount 192.168.100.11:/opt/web1 /var/www/html/
[root@web1 ~]# systemctl restart httpd
[root@web2 ~]# mount 192.168.100.11:/opt/web2 /var/www/html/
[root@web2 ~]# systemctl restart httpd
查看權限
[root@web1 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
[root@web2 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
配置DR模式
[root@web1 ~]# vi ab.sh
#!/bin/bash
ifconfig lo:0 192.168.100.200 broadcast 192.168.100.200 netmask 255.255.255.255 up
route add -host 192.168.100.200 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
systctl -p &> /dev/null
[root@web1 ~]# sh ab.sh
5.測驗


五.keepalived作業原理
Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或作業出現故障,Keepalived將檢測到,并將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的作業,當服務器作業正常后Keepalived自動將服務器加入到服務器群中,這些作業全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器

環境(基于LVS-DR進行搭建)
| 虛擬IP | 192.168.100.200/24 |
| 主調度器 | 192.168.100.14/24 |
| 備調度器 | 192.168.100.15/24 |
| Web1服務器 | 192.168.100.12/24 |
| Web2服務器 | 192.168.100.13/24 |
| NFS共享服務器 | 192.168.100.11/24 |
| 客戶機一臺 | 用于測驗驗證 |
配置主調度器(192.168.100.14)
[root@server ~]# modprobe ip_vs
[root@server ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@server ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm
[root@server ~]# yum -y install gcc gcc-c++ make popt-devel openssl-devel kernel-devel
[root@server ~]# tar xf keepalived-2.0.13.tar.gz
[root@server ~]# cd keepalived-2.0.13/
[root@server keepalived-2.0.13]# ./configure --prefix=/
[root@server keepalived-2.0.13]# make && make install
[root@server keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@server keepalived-2.0.13]# systemctl enable keepalived.service
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@server keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { //全域引數
router_id LVS_01 //指定名稱
}
vrrp_instance VI_1 { //指定vrrp熱備引數
state MASTER //服務器角色MASTER,備份為BACKUP
interface ens33 //修改物理網卡名稱
virtual_router_id 10 //虛擬路由器的ID號,每個熱備組保持一致
priority 100 //優先級,數值越大優先級越高
authentication { //熱備認證資訊,每個熱備組保持一致
auth_type PASS //認證型別
auth_pass 1111 //密碼字串
}
virtual_ipaddress { //指定漂移地址
192.168.100.200
}
}
virtual_server 192.168.100.200 80 { //虛擬服務器地址
delay_loop 6 //健康檢查的間隔時間(秒)
lb_algo rr //輪詢(rr)調度演算法
lb_kind DR //直接路由(DR)群集作業模式
persistence_timeout 6
protocol TCP
real_server 192.168.100.12 80 { //第一個web服務器節點的地址、埠
weight 1 //節點的權重
TCP_CHECK { //健康檢查方式
connect_port 80 //檢查目標埠
connect_timeout 3 //連接超時
nb_get_retry 3 //重試次數
delay_before_retry 3 //重試間隔
}
}
real_server 192.168.100.13 80 { //第二個web服務器節點的地址、埠
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@server keepalived-2.0.13]# systemctl enable keepalived //設定開機自啟
[root@server keepalived-2.0.13]# systemctl start keepalived //啟動服務
配置從調度器(192.168.100.15)
與主調度之前配置一樣
[root@server keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { //全域引數
router_id LVS_02 //指定名稱
}
vrrp_instance VI_1 { //指定vrrp熱備引數
state BACKUP
interface ens33 //修改物理網卡名稱
virtual_router_id 10 //虛擬路由器的ID號,每個熱備組保持一致
priority 90 //優先級,數值越大優先級越高
authentication { //熱備認證資訊,每個熱備組保持一致
auth_type PASS //認證型別
auth_pass 1111 //密碼字串
}
virtual_ipaddress { //指定漂移地址
192.168.100.200
}
}
virtual_server 192.168.100.200 80 { //虛擬服務器地址
delay_loop 6 //健康檢查的間隔時間(秒)
lb_algo rr //輪詢(rr)調度演算法
lb_kind DR //直接路由(DR)群集作業模式
persistence_timeout 6
protocol TCP
real_server 192.168.100.12 80 { //第一個web服務器節點的地址、埠
weight 1 //節點的權重
TCP_CHECK { //健康檢查方式
connect_port 80 //檢查目標埠
connect_timeout 3 //連接超時
nb_get_retry 3 //重試次數
delay_before_retry 3 //重試間隔
}
}
real_server 192.168.100.13 80 { //第二個web服務器節點的地址、埠
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@server keepalived-2.0.13]# systemctl enable keepalived //設定開機自啟
[root@server keepalived-2.0.13]# systemctl start keepalived //啟動服務
nfs配置
安裝并啟動nfs和rpcbind服務
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# systemctl start nfs-utils
[root@nfs ~]# systemctl start rpcbind
創建倆個測驗檔案夾,并匯入測驗網頁

設定訪問權限
[root@nfs opt]# vi /etc/exports
/opt/web1 192.168.100.12(ro)
/opt/web2 192.168.100.13(ro)
查看權限
[root@nfs opt]# showmount -e
Export list for nfs:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
配置web服務器
安裝http服務
[root@web1 ~]# yum -y install httpd
掛載nfs網頁
[root@web1 ~]# mount 192.168.100.11:/opt/web1 /var/www/html/
[root@web1 ~]# systemctl restart httpd
[root@web2 ~]# mount 192.168.100.11:/opt/web2 /var/www/html/
[root@web2 ~]# systemctl restart httpd
查看權限
[root@web1 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
[root@web2 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
配置DR模式
[root@web1 ~]# vi ab.sh
#!/bin/bash
ifconfig lo:0 192.168.100.200 broadcast 192.168.100.200 netmask 255.255.255.255 up
route add -host 192.168.100.200 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
systctl -p &> /dev/null
[root@web1 ~]# sh ab.sh
測驗
不同主機測驗


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/213007.html
標籤:其他
