前言
LVS(Linux Virtual Server)Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。通過LVS提供的負載均衡技術和Linux操作系統可實現一個高性能、高可用的服務器群集,從而以低成本實現最優的服務性能。
集群基礎
集群簡介
集群(Cluster)是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,并以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用于提高可用性和可縮放性。集群系統的主要優點:高可擴展性、高可用性、高性能、高性價比。
集群類型
LB:Load Balancing 高可拓展,伸縮集群
HA:High Availability 高可用集群
HP:High Performance 高性能集群
集群方案
LB:
硬件級:F5 BIG-IP、Citrix Netscaler、 A10 A10、Array、Redware
軟件級:lvs (傳輸層)、haproxy, nginx (應用層)
HA:
heartbeat 、corosync + pacemaker、 cman + rgmanager、cman + pacemaker、keepalived
HP:
hadoop
LVS詳解
LVS組成
ipvsadm:用于管理集群服務的命令行工具,工作于Linux系統中的用戶空間。
ipvs:為lvs提供服務的內核模塊,工作于內核空間
LVS術語
VIP:Director用來向外部提供服務的IP地址,也就是DNS通過域名解析到的IP
RIP:集群節點(后臺真正提供服務的服務器)所使用的IP地址
DIP:Director用來和RIP進行交互的IP地址
CIP:客戶端使用的IP或公網IP
RS:集群節點服務器Real server
LVS類型
LVS-NAT:Network Address Translation 網絡地址轉換
LVS-DR:Direct Routing 直連路由
LVS-TUN:Tunneling 隧道
LVS各類型特性
NAT類型的特性:
①RS應用使用私有地址,RS的網關必須指向DIP
②請求和響應都要經過Director,高負載場景中,Director易成為性能瓶頸
③支持端口映射
④RS可以使用任意OS
DR類型的特性:
①保證前端路由將目標地址為VIP的報文統統發往Directory,而不能是RS
解決方案:
(1) 靜態地址綁定:在前端路由器上操作
前提:必須要有路由操作權限
(2) aprtables
(3) 修改RS上內核參數,將RS上的VIP配置在lo接口的別名上,并限制其不能響應對VIP地址解析請求
②RS可以使用私有地址,但也可以使用公網地址,此時可通過互聯網通過RIP對其直接訪問
③RS跟Directory必須在同一物理網絡中
④請求報文經由Director,但響應報文必須不能經過Director
⑤不支持端口映射
⑥RS可以是大多數常見的OS
⑦RS的網關絕不允許指向DIP
TUN類型的特性:
①RIP、VIP、DIP全部是公網地址
②RS的網關不會也不可能指向DIP
③請求報文經由Director,但響應報文必須不能經過Director
④不支持端口映射
⑤RS的OS必須支持隧道功能
LVS調度算法
靜態方法:僅根據調度算法本身進行調度
rr: round robin,輪流,輪詢,輪叫 wrr: weighted round robin, 加權輪詢 sh:source hashing,session綁定 dh: destination hashing, 目標地址hash
動態方法:根據算法及各RS當前的負載狀況進行調度
lc: least connection,最少連接 wlc: weighted lc,加權最少連接 sed: shortest expection delay,最少期望延遲 nq: never queue,永不排隊 lblc: Locality-Based Least Connection,基于局部性的最少連接 lblcr:Replicated lblc,基于局部性的帶復制功能的最少連接
LVS配置(ipvsadm)
命令格式
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] [--syncid syncid] ipvsadm --stop-daemon state ipvsadm -h
命令詳解
定義集群服務: -A 添加一個集群服務 -D 刪除一個集群服務 -E 修改一個集群服務 -t VIP:端口 定義集群服務的類型為TCP的某個端口 -u VIP:端口 定義集群服務的類型為UDP的某個端口 -f 防火墻標記 定義集群服務的類型為防火墻標記 -s 調度算法 指定集群服務的調度算法 定義集群節點: -a 添加一個節點到集群服務 -d 從集群服務中刪除一個節點 -e 修改集群服務器中的節點 -r 節點IP:端口 定義節點的IP及類型 -m 定義為NAT模型 -g 定義為DR模型 -i 定義為TUN模型 -w 權重 定義服務器的權重 查看已經定義的集群服務及RS: ipvsadm -L -n -c: 查看各連接 --stats: 統計數據 --rate: 速率 --exact: 精確值 從集群服務中刪除RS: ipvsadm -d -t|u|f service-address -r server-address 刪除集群服務: ipvsadm -D -t|u|f service-address 清空所有的集群服務: ipvsadm -C 保存集群服務定義: ipvsadm -S > /path/to/some_rule_file ipvsadm-save > /path/to/some_rule_file 讓規則文件中的規則生效: ipvsadm -R < /path/from/some_rule_file ipvsadm-restore < /path/from/some_rule_file
LVS-NAT模型
配置過程
#以下實驗都是臨時性配置,若要永久生效,請自行配置 Real Server 1 #ifconfig eth0 172.16.10.100/16 up #route add default gw 172.16.10.12 Real Server 2 #ifconfig eth0 172.16.10.212/16 up #route add default gw 172.16.10.12 Director Server #ifconfig eth0 192.168.1.10/24 up #ifconfig eth1 172.16.10.12/16 up #yum -y install ipvsadm #echo 1 > /proc/sys/net/ipv4/ip_forward #ipvsadm -A -t 192.168.1.10:80 -s rr #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.100 -m #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.212 -m
LVS-DR模型
上面說了NAT模型的實現方式,但NAT模型有個缺陷,因為進出的每個數據包都要經過Director Server,當集群系統負載過大的時候Director Server將會成為整個集群系統的瓶頸,而DR模型就避免了這樣的情況發生,DR模型在只有請求的時候才會經過Director Server, 回應的數據包由Real Server 直接響應用戶不需要經過Director Server。
配置過程
內核參數: arp_ignore: 定義接收到ARP請求時的響應級別 0:只要本地配置的有相應地址,就給予響應 1:僅在請求的目標地址配置請求到達的接口上的時候,才給予響應 arp_announce:定義將自己地址向外通告時的通告級別 0:將本地任何接口上的任何地址向外通告 1:試圖僅向目標網絡通告與其網絡匹配的地址 2:僅向與本地接口上地址匹配的網絡進行通告
Real Server 1 #ifconfig eth0 172.16.10.100/16 up #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce #ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #route add -host 192.168.1.10 dev lo:0 Real Server 2 #ifconfig eth0 172.16.10.212/16 up #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce #ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #route add -host 192.168.1.10 dev lo:0 Director Server #ifconfig eth0 172.16.10.12/16 up #ifconfig eth0:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #echo 1 > /proc/sys/net/ipv4/ip_forward #route add -host 192.168.1.10 dev eth0:0 #yum install ipvsadm -y #ipvsadm -A -t 192.168.1.10:80 -s rr #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.100 -g #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.212 -g
基于LVS實現web服務器負載均衡
實驗拓撲
環境介紹
系統環境:CentOS6.6
Director Server:192.168.1.10(VIP) 172.16.10.12(DIP)
Real Server 1:192.168.1.10(VIP) 172.16.10.100(RIP )
Real Server 2:192.168.1.10(VIP) 172.16.10.212(RIP )
PHP服務器:172.16.10.110
NFS服務器:172.16.10.110
數據庫服務器:172.16.10.211
要求:web服務器上部署discuz,基于LVS實現負載均衡
NFS服務器配置
創建共享目錄,并設置權限
編輯配置文件,設置共享目錄及客戶端
[root@scholar ~]# vim /etc/exports /web/discuz 172.16.10.100(rw,sync) 172.16.10.212(rw,sync)
站點文件準備
[root@scholar ~]# unzip Discuz_7.2_FULL_SC_GBK.zip [root@scholar ~]# chmod -R 777 upload [root@scholar ~]# mv upload/* /web/discuz/ [root@scholar ~]# chown -R apache.apache /web/discuz
啟動服務,設置開機自啟
數據庫服務器配置
RS1和RS2配置
配置VIP
配置虛擬主機
[root@RS1 ~]# vim /etc/httpd24/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/web/discuz" ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.10.110:9000/web/discuz/$1 </VirtualHost>
掛載共享目錄
#可設置開機自動掛載 [root@scholar ~]# vim /etc/fstab 172.16.10.110:/web/discuz /web/discuz nfs defaults,_netdev 0 0
檢查語法,啟動服務
Director Server配置
配置VIP
定義集群
安裝測試及訪問測試
安裝完成,我們來發一個帖子測試一下
過一會兒,刷新一下頁面
此過程中是否實現了負載均衡,我們在Director Server上查看一下是哪臺服務器響應的請求就知道了
由此可見,基于LVS實現web服務器的負載均衡功能已完成
The end
OK,基于LVS的負載均衡就說到這里了,負載均衡集群的配置還是比較簡單的,幾條命令就搞定了,不要因為簡單看一眼就略過,只有理解原理結合實踐才能真正掌握知識,配置過程中遇到問題可留言呦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/4855
精彩的博客無需解釋
[…] 轉載自:http://www.www58058.com/archives/4855 […]
請問你用的是什么拓撲圖軟件?
@jy00278439:應該是visio
@jy00278439:不好意思 評論提示郵件都去垃圾箱了 沒及時看到 畫圖軟件是一款在線編輯器Cacoo