rhel6-lvs詳細配置

關於lvs的更詳細的信息請參考博文“LVS集羣系統詳解”http://wangziyin.blog.51cto.com/blog/6948950/1297354

或參考lvs中文網站:http://www.linuxvirtualserver.org/zh/lvs4.html


系統環境: rhel6 x86_64 iptables and selinux disabled
yum 倉庫配置:
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=ftp://192.168.122.1/pub/yum
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=Instructor Server Repository
baseurl=ftp://192.168.122.1/pub/yum/HighAvailability
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
enabled=1

[LoadBalancer]
name=Instructor Server Repository
baseurl=ftp://192.168.122.1/pub/yum/LoadBalancer
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
enabled=1

[ResilientStorage]
name=Instructor Server Repository
baseurl=ftp://192.168.122.1/pub/yum/ResilientStorage
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
enabled=1

[ScalableFileSystem]
name=Instructor Server Repository
baseurl=ftp://192.168.122.1/pub/yum/ScalableFileSystem
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
enabled=1
Load Balancer:
kernel 2.6.x 已內建 LVS 模組
kernel 2.4.x 或之前的內核版本需打補丁
rhel5 /rhel6 自帶 LVS 軟件包 安裝 ipvsadm 軟件包即可使用


VS/NAT

Load Balance 雙網卡 192.168.122.82(外網) 192.168.1.82(內網)


Gateway 192.168.1.82 (注:Realserver 的網關應設爲 Load Balance 的內網IP)
Realserver1 192.168.1.33 desk33.example.com
Realserver2 192.168.1.34 desk34.example.com


Virtual IP 192.168.122.122


以下步驟在 desk82 上實施:
#開啓路由機制

# vim /etc/sysctl.conf
     net.ipv4.ip_forward = 1
# sysctl -p

#加載 nat 模塊
# modprobe iptable_nat
注:如果不加載此模塊,也可以在第一次訪問時成功,但是會在再次訪問時出現延遲過長,或訪問超時 現象

yum install ipvsadm -y
ipvsadm -C
ipvsadm -A -t 192.168.122.82:80 -s rr
ipvsadm -a -t 192.168.122.82:80 -r 192.168.1.33:80 -m
ipvsadm -a -t 192.168.122.82:80 -r 192.168.1.34:80 -m
#保存 rule
/etc/init.d/ipvsadm save
#綁定 vip
# ifconfig eth0:0 192.168.122.122 netmask 255.255.255.0


以下步驟在 desk33 和 desk34上實施:

# yum install httpd -y
# echo `hostname` > /var/www/html/index.html
# /etc/init.d/httpd start

測試:
選擇一臺 192.168.122.0/24 網段主機訪問 http:// 192.168.122.122 反覆刷新網頁,每次出現的網頁不同 則表示成功。

VS/DR


以下是 LVS-DR 的工作原理,包括數據包、數據幀的走向和轉換過程:

官方的原理說明:Director 接收用戶的請求,然後根據負載均衡算法選取一臺realserver,將包轉發 過去,最後由 realserver 直接回復給用戶。


實例場景設備清單:

154446737.png

說明:我這裏爲了方便,client 是與 vip 同一網段的機器。如果是外部的用戶訪問,將 client 替換成 gateway 即可,因爲 IP 包頭是不變的,變的只是源 mac 地址。
1.client 向目標 vip 發出請求,Director 接收。此時 IP 包頭及數據幀頭信息如下:
154648958.png

2.VS 根據負載均衡算法選擇一臺 active 的 realserver(假設 192.168.57.122),將此 RIP 所在網 卡的 mac 地址作爲目標 mac 地址,發送到局域網裏.此時 IP 包頭及數據幀頭信息如下:
154750519.png

3.realserver(192.168.57.122)在局域網中收到這個幀,拆開後發現目標 IP(VIP)與本地匹配,於是 處理這個報文.隨後重新封裝報文,發送到局域網.此時 IP 包頭及數據幀頭信息如下:
154846482.png

4 如果 client 與 VS 同一網段,那麼 client(192.168.57.135)將收到這個回覆報文.如果跨了網段, 那麼報文通過 gateway/路由器經由 Internet 返回給用戶.



Realserver 192.168.122.33 desk33.example.com
Realserver 192.168.122.34 desk34.example.com
Load Balance 192.168.122.82 desk82.example.com

Virtual IP 192.168.122.122


以下步驟在 desk82 上實施:

# yum install ipvsadm -y
#加載 rule
# ipvsadm -C (清空 ipvs 轉發表 )
# ipvsadm -A -t 192.168.122.122:80 -s rr (-A:添加一個虛擬服務; -t:tcp 服務;-s 調度算法)
# ipvsadm -a -t 192.168.122.122:80 -r 192.168.122.33:80 -g
# ipvsadm -a -t 192.168.122.122:80 -r 192.168.122.34:80 -g
#保存 rule
# /etc/init.d/ipvsadm save
#綁定 vip
# ifconfig eth0:0 192.168.122.122 netmask 255.255.255.0


Realserver必須 屏蔽 arp緩存:


以下步驟在 desk33 上實施:

#關閉 arp
方法一
# yum install arptables_jf -y
# arptables -A IN -d 192.168.122.122 -j DROP
# arptables -A OUT -s 192.168.122.122 -j mangle --mangle-ip-s 192.168.122.33
# /etc/init.d/arptables_jf save
方法二
# vim /etc/sysctl.conf
    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
# sysctl -p
#ifconfig eth0:0 192.168.122.122 netmask 255.255.255.255
#yum install httpd -y
#echo `hostname` > /var/www/html/index.html
#/etc/init.d/httpd start


以下步驟在 desk34 上實施:

#關閉 arp
方法一
# yum install arptables_jf -y
# arptables -A IN -d 192.168.122.122 -j DROP
# arptables -A OUT -s 192.168.122.122 -j mangle --mangle-ip-s 192.168.122.34
# /etc/init.d/arptables_jf save
方法二
# vim /etc/sysctl.conf
    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
# sysctl -p
#ifconfig eth0:0 192.168.122.122 netmask 255.255.255.255
#yum install httpd -y
#echo `hostname` > /var/www/html/index.html
#/etc/init.d/httpd start

測試:
訪問 192.168.122.122 反覆刷新網頁,每次出現的網頁不同則表示配置成功。


VS/TUN


VS/TUN 技術對服務器有要求,即所有的服務器必須支持“IP Tunneling”或者“IPEncapsulation”協議。目前,VS/TUN 的後端服務器主要運行 Linux 操作系統。在 VS/TUN 的集羣系統中,負載調度器只將請求調度到不同的後端服務器,後端服務器將應答的數據直接返回給用戶。這樣,負載調度器就可以處理大量的請求,它甚至可以調 度百臺以上的服務器(同等規模的服務器),而它不會成爲系統的瓶頸。即使負載調度器只有 100Mbps的全雙工網卡,整個系統的最大吞吐量可超過 1Gbps。所以,VS/TUN 可以極大地增加負載調度器調度的服務器數量。VS/TUN 調度器可以調度上百臺服務器,而它本身不會成爲系統的瓶頸,可以 用來構建高性能的超級服務器。

Realserver 192.168.122.33 desk33.example.com
Realserver 192.168.122.34 desk34.example.com
Load Balance 192.168.122.82 desk82.example.com

Virtual IP 192.168.122.122


desk82上進行:

#vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1
#sysctl -p
加載 rule
#ipvsadm -C    #清除以前的 rules
#ipvsadm -A -t 192.168.122.122:80 -s rr
#ipvsadm -a -t 192.168.122.122:80 -r 192.168.122.33:80 -i
#ipvsadm -a -t 192.168.122.122:80 -r 192.168.122.34:80 -i
保存 rule
#service ipvsadm save
邦定 vip
ifconfig eth0:0 192.168.122.122 netmask 255.255.255.255 up

RealServer 設置
Default Gateway 指向 Director 的 LAN IP 即 192.168.122.82

#vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
#sysctl -p
#ifconfig tunl0 192.168.122.122 netmask 255.255.255.255 up
#route add -host 192.168.122.122 dev tunl0
#echo `hostname` > /var/www/html/index.html
#service httpd start

測試
選擇一臺主機訪問 http:// 192.168.122.122 反覆刷新網頁,每次出現的網頁不同則表示成功。

LVS 常見問題:

1.LVS/DR 如何處理請求報文的,會修改 IP 包內容嗎?


1.1vs/dr 本身不會關心 IP 層以上的信息,即使是端口號也是 tcp/ip 協議棧去判斷是否正確,vs/dr 本 身主要做這麼幾個事:
1)接收 client 的請求,根據你設定的負載均衡算法選取一臺 realserver的 ip;
2)以選取的這個 ip 對應的 mac 地址作爲目標 mac,然後重新將 IP 包封裝成幀轉發給這臺 RS;
3)在 hashtable 中記錄連接信息。vs/dr 做的事情很少,也很簡單,所以它的效率很高,不比硬件負載均衡設備差多少。
數據包、數據幀的大致流向是這樣的:client --> VS --> RS --> client


2. RealServer 爲什麼要在 lo 接口上配置 VIP,在出口網卡上配置 VIP可以嗎?
2.1 既然要讓 RS 能夠處理目標地址爲 vip 的 IP 包,首先必須要讓 RS能接收到這個包。在 lo 上配置 vip 能夠完成接收包並將結果返回 client。
2.2 答案是不可以將 VIP 設置在出口網卡上,否則會響應客戶端的 arprequest,造成 client/gateway/arp table 紊亂,以至於整個 loadbalance 都不能正常工作

3. RealServer 爲什麼要抑制 arp 幀?
這個問題在上一問題中已經作了說明,這裏結合實施命令進一步闡述。我們在具體實施部署的時候都會 作如下調整:
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
我相信很多人都不會弄懂它們的作用是什麼,只知道一定得有。我這裏也不打算拿出來詳細討論,只是 作幾點說明,就當是補充吧。
3.1
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
這兩條是可以不用的,因爲 arp 對邏輯接口沒有意義。
3.2 如果你的 RS 的外部網絡接口是 eth0,那麼
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
其實真正要執行的是:
echo "1">/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/eth0/arp_announce
所以我個人建議把上面兩條也加到你的腳本里去,因爲萬一系統裏上面兩條默認的值不是 0,那有可能 是會出問題滴。


4. LVS/DR loadbalancer(director)與 RS 爲什麼要在同一網段中?
從第一個問題中大家應該明白 vs/dr 是如何將請求轉發給 RS 的了吧?它是在數據鏈路層來實現的,所 以 director 必須和 RS 在同一網段裏面。


5. 爲什麼 director 上 eth0 接口除了 VIP 另外還要配一個 ip(即DIP)?
5.1 如果是用了 keepalived 等工具做 HA 或者 LoadBalance,則在健康檢查時需要用到 DIP
5.2 沒有健康檢查機制的 HA 或者 Load Balance 則沒有存在的實際意義.


6. LVS/DRip_forward 需要開啓嗎?
不需要。因爲 director 跟 realserver 是同一個網段,無需開啓轉發。

7. lvs/dr 裏,director 的 vip 的 netmask 沒必要設置爲255.255.255.255, 也不需要去

route add -host $VIP dev eth0:0

director 的 vip 本來就是要像正常的 ip 地址一樣對外通告的,不要搞得這麼特殊.

如有問題歡迎指正!!!!!!!!!!!!!!


西安石油大學計算機學院

王茲銀

[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章