linux下部署lvs-DR群集構建實施過程
1,LVS-DR資料包流向分析
- 為了方便進行原理分析,將client與群集極其放在同一網路中,資料包流經的路線為1-2-3-4
(1)client向目標vip發出請求,director(負載均衡器)接收
- IP報頭及資料幀頭資訊
前面兩個詳細部分為:
source MAC | dest MAC |
---|---|
00:18:82:3c:e8:96 | 00:0c:29:6a:8d:5d |
(2)RealServer_1收到這個幀,解封裝後發現目標ip與本機匹配(realserver事先繫結了vip),於是處理這個報文,隨後重新封裝報文,傳送到區域網
- IP包頭及資料幀頭資訊
跟上一步兩個調換了
source MAC | dest MAC |
---|---|
00:0c:29:6a:8d:5d | 00:18:82:3c:e8:96 |
(3)client 將收到回覆報文,client認為得到正常的服務,而不會知道是哪一臺伺服器處理的
注意:如果跨網段,則報文通過路由器經由internet返回給使用者
2,LVS-DR中的APR問題
(1)在lvs-DR負載均衡叢集中,負載均衡器與節點伺服器都要配置相同的vip地址
(2)在區域網中具有相同的ip地址,勢必會造成各伺服器arp通訊的紊亂
- 當ARP廣播傳送到lvs-DR叢集時,因為負載均衡器和節點伺服器都是連線到相同的網路上,他們都會接收到arp廣播
- 只有前段的負載均衡器進行相應,其他節點伺服器不應該相應ARP廣播
(3)對節點伺服器進行處理,使其不響應針對vip的ARP請求
- 使用虛介面lo:0承載vip地址
- 設定核心引數arp_ignore:系統只響應目的ip為本地ip的ARP請求
(4)realserver返回報文(源ip是vip)經路由器轉發,重新封裝報文時,需要先獲取路由器的mac地址
(5)傳送arp請求時,linux預設使用ip包的源ip地址(即vip)作為arp請求包中的源ip地址,而不使用傳送介面的ip地址
- 如ens33介面
(6)路由器收到arp請求後,將更新arp表項
(7)將原有的vip對應director的mac地址將被更新為vip對應realserver的mac地址
(8)問題
- 路由器根據ARP表項,會將新來的請求報文轉發給realserver,導致director的vip失效
(9)解決方法
- 對節點伺服器進行處理,設定核心引數arp_announce=2:系統不適用ip包的源地址來設定arp請求源地址,而選擇傳送介面的ip地址
三,解決arp的兩個問題的設定方法
修改主配置檔案
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce=2
- net,ipv4.conf.all.arp_ignore =1
- net,ipv4,conf,all,arp_announce = 2
四,構建lvs-dr群集案例
1,案例環境
- 為了進一步提高環境公司網站的負載能力,公司決定擴充套件現有的網站平臺,基於lvs構築負載均衡群集,考慮到群集的訪問效率,管理員準備採用lvs群集的dr模式,共享儲存裝置存放在內部專有網路中
此實驗可在上一篇nat的基礎上做,所以下面只是在nat基礎上做的改動部分
部署lvs
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
ifconfig ens33:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.
255.255 up
route add -host 192.168.100.100 dev ens33:0
ifconfig
ipvsadm -C
ipvsadm -A -t 192.168.100.100:80 -s rr
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.12:80 -g
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.13:80 -g
ipvsadm -Ln
[root@lvs ~]# sh nat.sh
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.14 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::7e8:7056:6668:3c2e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9e:7e:7c txqueuelen 1000 (Ethernet)
RX packets 15814 bytes 2463864 (2.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2583 bytes 354204 (345.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.100 netmask 255.255.255.255 broadcast 192.168.100.100
ether 00:0c:29:9e:7e:7c txqueuelen 1000 (Ethernet)
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.124.12 netmask 255.255.255.0 broadcast 192.168.124.255
inet6 fe80::918f:2af4:cab1:36e5 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9e:7e:86 txqueuelen 1000 (Ethernet)
RX packets 30988 bytes 8175748 (7.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4876 bytes 466524 (455.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 411 bytes 34712 (33.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 411 bytes 34712 (33.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:ab:a9:0a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.100:80 rr
-> 192.168.100.12:80 Route 1 0 0
-> 192.168.100.13:80 Route 1 0 0
[root@lvs ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.124.1 0.0.0.0 UG 100 0 0 ens37
192.168.100.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.100.100 0.0.0.0 255.255.255.255 UH 0 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.124.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37
[root@lvs ~]#
配置DR模式
web1:
onfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255
route add -host 192.168.100.100 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
sysctl -p &> /dev/null
[root@web1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.100.100/32 brd 192.168.100.100 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a8:f6:94 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.12/24 brd 192.168.100.255 scope global ens33
valid_lft forever preferred_lft forever
web2:
[root@web2 ~]# vi web2.sh
#!/bin/bash
# web2
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255
route add -host 192.168.100.100 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
sysctl -p &> /dev/null
[root@web2 ~]# sh web2.sh
相關文章
- 部署docker-consul群集,Harbor構建Docker私有倉庫Docker
- 專案實施過程
- Linux下MySQL主從複製(Binlog)的部署過程LinuxMySql
- 企業數字化轉型建設實施過程卡點知多少
- 如何實施有效的風險管理過程
- springcloud架構-HongHucommon-service專案構建過程SpringGCCloud架構
- 執行時的頁面構建過程
- 視覺化講解DOM構建過程視覺化
- LVS+Keepalived 高可用群集(理論+實戰部署)
- 幾大ERP軟體實施方法與過程 (轉)
- Linux下部署springboot專案的步驟及過程LinuxSpring Boot
- Linux部署Django (Nginx + uwsgi + Python3 + Django)的過程LinuxDjangoNginxPython
- 圖解大頂堆的構建、排序過程圖解排序
- Android 原始碼分析(一)專案構建過程Android原始碼
- 伺服器群集—LVS負載均衡群集(LVS-NAT部署)伺服器負載
- Linux構建Git程式碼倉庫與自動部署LinuxGit
- 超融合架構與產品選型的選型評估過程及實施方案架構
- 關於免費OA工作流實施應用過程中設計規範的建議
- 【深度好文】我在做前端構建過程中的思考前端
- 深入Vue - 原始碼目錄及構建過程分析Vue原始碼
- SAP Commerce Cloud 的構建過程學習筆記Cloud筆記
- 關於tsup工具構建專案庫使用過程
- 【構建】start.sh指令碼中變數被maven profile構建過程替換指令碼變數Maven
- 企業資料中臺實施過程中失敗的因素
- Linux上部署J2EE專案的過程及安全Linux
- 理論+實驗 詳解Oracle安裝部署過程Oracle
- 原始碼解析.Net中Host主機的構建過程原始碼
- docker 構建java 部署包DockerJava
- 107-全過程部署fabc
- zabbix server & proxy部署操作過程Server
- 【資料倉儲】|5 維度建模設計和實施過程
- 可以看一下我學習linux的過程Linux
- ELK 日誌分析系統 ----------- 部署ElasticSearch群集Elasticsearch
- vue 原始碼學習(一) 目錄結構和構建過程簡介Vue原始碼
- 整合spring cloud雲服務架構 - commonservice-eureka 專案構建過程SpringCloud架構
- ROS 八叉樹地圖構建 - 使用 octomap_server 建圖過程總結!ROS地圖Server
- IC企業的sap系統實施過程可能存的問題
- Linux下配置Jenkins+gitlab持續整合構建流程LinuxJenkinsGitlab