java apache 开源 Ubuntu linux Python mysql Android 程序员 编程 shell Firefox Windows google wordpress php 微软 centos nginx 云计算

Linux系統之LVS負載均衡群集

一、群集技術的概述

1、群集的類型

無論是那種群集,都至少包括兩臺節點服務器,而外表現為一個整體,只提供一個訪問入口,相當於一臺大型計算機。根據群集所針對的目標差異,可分為以下三種內型。

負載均衡群集:以提高應用系統的響應能力,盡可能處理更多的訪問請求,減少延遲,獲得高並發,高負載的整天性能,例如:“DNS輪詢”,“應用層交換”,“反向代理”等都可以做負載均衡群集。

高可用群集:以提高應用系統的可靠性,盡可能地減少中斷時間,確保服務的連續性,達到高可用的容錯效果,例如:“故障切換”,“雙機熱備”,“多機熱備”等都屬於高可用群集。

高性能運算群集:以提高應用系統的CPU運算速度,擴展硬件資源和分析能力,獲得相當於大型,超級計算機的高性能運算能力,例如:“雲計算”等就屬於高性能運算群集的一種。

2、負載均衡的分層結構

在典型的負載均衡群集中,包括以下三個層次的組件。

第一層:負載調度器,這是訪問整個群集系統的唯一入口,多外使用所有服務器共有的VIP(虛擬ip)地址,也稱群集IP地址。通常會配置主,備兩臺調度器實現熱備,當主調度器失效以後平滑替換至備用調度器,確保高可用性。

第二層:服務器池:群集所提供的應用服務由服務器池承擔,其中的每個節點具有獨立的RIP(真實IP)地址,只處理調度器分發過來的客戶機請求。

第三層:共享存儲,為服務器池中的所有節點提供穩定,一致的文件存取服務,確保整個群集的統一性。在Linux環境中,共享存儲可以使用NAS設備或者提供NFS(網絡文件系統)共享服務的專用服務器。

典型的負載均衡群集結構拓撲圖如下:

155118499.jpg

3、負載均衡的工作模式

關於群集的負載調度技術,可以基於IP,端口,內容等進行分發,其中基於IP的負載調度室效率最高的。基於IP的負載均衡中,常見的有地址轉換,IP隧道,直接路由這三種工作模式。如下圖所示:

160011657.jpg

地址轉換:簡稱NAT模式,類似於防火墻的私有網絡結構,負載調度器作為所有服務器節點的網關,即作為客戶機的訪問入口,也是個節點回應客戶機的訪問出口,服務器節點使用私有IP地址,與負載均衡調度器位於同一個物理網絡,安全性要優於其他兩種方式。

IP隧道:簡稱TUN模式,采用開放式的網絡結構,負載調度器僅作為客戶機的入口,各節點通過各自的Internet連接直接回應客戶機,而不再經過負調度器。服務器節點分散在互聯網的不同位置,具有獨立的公網IP地址,通常專用IP隧道與負載調度器相互通信。

直接路由:簡稱DR模式,采用半開放式的網絡結構,與TUN模式的結構類似,但個節點並不是分散在各地,而是與調度器位於同一個物理網絡。負載調度器與個節點服務器通過本地網絡連接,不需要建立專用的IP隧道。

二、LVS虛擬服務器概述

Linux Virtual Server是針對Linux內核開發的一個負載均衡項目,LVS現在已經成為Linux內核的一部分,默認編譯為ip_vs模塊,必要時能夠自動調用。

1、LVS的負載調度算法

輪詢(rr):將收到的訪問請求按照順序輪流分配給群集中的各節點,均等地對待每一臺服務器,而不管服務器實際的連接數和系統負載。

加權輪詢(wrr):根據真實服務器的處理能力輪流分配收到的訪問請求,調度器可以自動查詢各節點的負載情況,並動態調整其權重。

最少連接(lc):根據真實服務器已建立的連接數進行分配,將收到的訪問請求優先分配給連接數最少的節點。

加權最少連接(wlc):在服務節點的性能差異較大的情況下,可以為真實服務器自動調整權重,權重較高的節點將承載更大比例的活動連接負載。

2、加載LVS內核模塊,安裝ipvsadm管理工具

ipvsadm是在負載調度器上使用的LVS群集管理工具,通過調用ip_vs模塊來添加,刪除服務器節點,以及查看群集的運行狀態。

 

1

2

[root@localhost /]#modprobe ip_vs

[root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm

3、使用ipvsadm工具管理LVS群集

LVS群集的管理工作主要包括:創建虛擬服務器,添加服務器節點,查看群集節點狀態,刪除服務器節點保存負載分配策略。

1)創建虛擬服務器

若群集的VIP地址為172.16.16.172,針對TCP的80端口提供負載分流服務,使用調度算法為輪詢,則命令語法如下。對於負載均衡調度器來說,VIP必須是本機(調度器)實際以啟用的IP地址。

 

1

[root@localhost /]#ipvsadmin -A -t 172.16.16.172:80 -s rr

上述操作中,選項“-A”表示添加虛擬服務器,“-t”用來指定VIP地址及TCP端口,“-s”用來指定負載調度算法——輪詢(rr),加權輪詢(wrr),最少連接(lc),加權最少連接(wlc)。

2)添加服務器節點

為虛擬服務器172.16.16.172添加四個服務器節點,IP地址依次為192.168.7.21-192.168.7.24,對應的ipvsadm命令語法如下。若希望使用保持連接,可以使用“-p 60”參數,其中60為60秒。

1

2

3

4

[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1

[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1

[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1

[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1

上述操作中,選項“-a”表示添加真實服務器,“-t”用來指定VIP地址及TCP端口,“-r”用來指定RIP地址及TCP端口,“-m”表示使用NAT群集模式(-g DR模式,-i TUN模式),“-w”用來設置權重(權重為0時表示暫停節點)

3)查看群集節點狀態

結合選項“-L”可以列表查看LVS虛擬服務器,可以指定只查看某一個VIP地址,結合選項“-n”將以數字形式顯示地址,端口等信息。

1

2

[root@localhost /]#ipvsadm -L -n       //查看节点状态

[root@localhost /]#ipvsadm -Lnc        //查看负载连接情况

4)刪除服務器節點

需要刪除服務器池中某一個節點時,使用選項“-d”。執行刪除操作必須指定目標對象,包括節點地址,虛擬IP地址。如果需要刪除整個虛擬服務器時,使用選項“-D”並指定虛擬IP地址即可,無需指定節點。

1

2

[root@localhost /]#ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80

[root@localhost /]#ipvsadm -D -t 172.16.16.172:80   //删除整个虚拟服务器

5)保存负载分配策略

使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存,恢复LVS策略,操作方法类似于iptables规则的导入/出 。

1

2

3

[root@localhost /]#ipvsadm-save > /etc/sysconfig/ipvsadm     //保存策略

[root@localhost /]#service ipvsadm stop     //停止服务(清楚策略)

[root@localhost /]#service ipvsadm start    //启动服务(加载保存的策略)

 

三、配置NFS共享存儲服務

NFS是一種基於TCP/IP傳輸的網絡文件系統協議,最初由SUN公司開發。

1、使用NFS發布共享資源

NFS服務的實現依賴於RPC(遠程過程調用)機制,以完成遠程到本地的映射過程。在RHEL 6系統中,需要安裝nfs-utils和rpcbind軟件包來提供NFS共享服務,前者用NFS共享發布和訪問,後者用於NPC支持。

1)安裝nfs-utils和rpcbind軟件包

1

2

3

[root@localhost /]#yum -y install nfs-utils rpcbind

[root@localhost /]#chkconfig nfs on

[root@localhost /]#chkconfig rpcbind on

2)設置共享目錄

NFS的配置文件為“/etc/exports”,文件內容默認為空(無任何共享)。在exports文件中設置共享資源時,記錄格式為“目錄文件” 客戶機地址(權限選項)。

1

2

[root@localhost /]#vim /etc/exports

/var/www/html    192.168.7.0/24(rw,sync,no_root_squash)

其中客戶機地址可以是主機名,IP地址,網段地址,允許使用*,?等通配符;權限選項中rw表示讀寫,sync表示同步寫入,no_root_squash表示客戶機以root身份登錄時將root權限作為nfsnobody用戶降權對待。

當需要將同一個目錄共享給不同的客戶機,且分配不同的權限時,只需要分隔指定多個“客戶機(權限選項)”即可。

1

2

[root@localhost /]#vim /etc/exports

/var/www/html 192.168.7.1(ro) 192.168.7.10(rw)

3)启动NFS共享服务程序

1

2

3

[root@localhost /]#service rpcbind start

[root@localhost /]#service nfs start

[root@localhost /]#netstat -anpt | grep rpcbind

4)查看本机发布的NFS共享目录

1

[root@localhost /]#showmount -e

2、在客戶機上訪問NFS共享資源

NFS協議的目標是提供一種網絡文件系統,因此對NFS共享的訪問方式也使用mount命令來進行掛載,對應的文件系統內型為NFS。

1)安裝rpcbind軟件包,並啟用rpcbind服務

若要正常訪問NFS共享資源,客戶機中也需要安裝rpcbind軟件包,並啟用rpcbind系統服務;另外,為了是showmount查詢工具,建議將nfs-utils軟件包也一起裝上。

1

2

3

[root@localhost /]#yum -y install rpcbind nfs-utils

[root@localhost /]#chkconfig rpcbind on

[root@localhost /]#service rpcbind start

2)手动挂载NFS目录

1

[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html

完成掛載以後,只要訪問客戶機的“/var/www/html”文件夾,實際上就相當於訪問NFS服務器上的“/var/www/html”文件夾。

3)fstab自動掛載設置

修改“/etc/fstab”配置文件,加入NFS共享目錄的掛載設置,註意文件系統類型設為nfs,掛載參數建議添加netdev;若添加soft,intr參數可以實現軟掛載,允許在網絡中斷時放棄掛載。這樣客戶機就可以在每次開機後自動掛載NFS共享資源了。

1

2

3

[root@localhost /]#vim /etc/fstab

......//省略部分内容

192.168.7.250:/var/www/html  nfs  /var/www/html  defaults,_netdev  0 0

 

四、構建LVS負載均衡群集實例

1、案例1:構建NAT模式的負載均衡群集

在NAT模式的群集中,LVS負載調度器是所有節點訪問Internet的網關服務器,其外網地址172.16.16.172同時也作為整個群集的VIP地址。LVS調度器具有兩塊網卡,分別連接內外網絡。拓撲圖如下:

084627627.jpg

對於LVS負載調度器來說,需要使用iptables為出站配置SNAT轉發規則,以便節點服務器能夠訪問Internet。所有的節點服務器,共享存儲均位於私有網絡內,其默認網關設為LVS負載調度器的內外地址(192.168.7.254).

1)配置SNAT轉發規則

1

2

3

4

5

[root@localhost /]#vim /etc/sysctl.conf

......//省略部分内容

net.ipv4.ip_forward = 1

[root@localhost /]#sysctl -p

[root@localhost /]#iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o eth0 -j SNAT --to-source 172.16.16.172

2)配置负载分配策略

1

2

3

4

5

6

7

8

[root@localhost /]#service ipvsadm stop     //清楚原有策略

[root@localhost /]#ipvsadm -A -t 172.16.16.172:80 -s rr

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1

[root@localhost /]#service ipvsadm save     //保存策略

[root@localhost /]#chkconfig ipvsadm on

3)配置節點服務器

所有節點服務器均使用相同的配置,包括httpd服務端口 ,網站文檔內容。實際上各節點的網站文檔可存放在共享存儲設備上,從而免去同步過程。

1

2

3

4

5

6

[root@localhost /]#yum -y install httpd

[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html

[root@localhost /]#vim /var/www/html/index.html

<h1>负载均衡测试网页!!!</h1>

[root@localhost /]#service httpd start

[root@localhost /]#chkcofnig httpd on

4

)測試LVS群集

安排多臺測試機,從Internet中直接訪問http://172.16.16.172將能夠看到由真實服務器提供的網頁內容——如果各節點的網頁不同,則不同客戶機看到的網頁也可能不以樣。可以使用ipvsadm工具查看當前連接負載的情況。(在調度器上進行查詢)

1

[root@localhost /]#ipvsadm -ln

2、案例2:構建DR模式的負載均衡群集

在DR模式的群集中,LVS負載調度器作為群集的訪問入口,但不作為網關使用;服務器池中的所有節點都各自接入Internet,發送給客戶機的WEB響應數據包不需要經過LVS負載調度器。

093336727.jpg

這種方式入站,出站訪問數據被分別處理,因此LVS負載調度器和所有的節點服務器都需要配置有VIP地址,以便響應對整個群集的訪問。考慮到數據存儲的安全性,共享存儲設備會放在內部的專用網絡中。

1)配置調度器的虛擬IP地址(VIP)

采用虛接口的方式(eth0:0),為網卡eth0綁定VIP地址,以便響應群集訪問。配置結果為eht0 172.16.16.173/24,eth0:0 172.16.16.172/24

1

2

3

4

5

6

7

8

9

[root@localhost /]#cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]#cp ifcfg-eth0 ifcfg-eth0:0

[root@localhost network-scripts]#vim ifcfg-eth0;0

......//省略部分内容

DEVICE=eht0:0

ONBOOT=yes

IPADDR=172.16.16.172

NETMASK=255.255.255.0

[root@localhost network-scripts]#service network restart

2)调整/proc响应参数

对于DR群集模式来说,由于LVS负载调度器和各节点需要公用VIP地址,为了避免网络内的arp解析出现异常,应关闭Linux内核的重定向参数响应。

1

2

3

4

5

6

[root@localhost /]#vim /etc/sysctl.conf

......//省略部分内容

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

[root@localhost /]#sysctl -p

3)配置负载分配策略

1

2

3

4

5

6

7

8

[root@localhost /]#service ipvsadm stop

[root@localhost /]#ipvsadm -A -t 172.16.16.172:80 -s rr

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.177:80 -g -w 1

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.178:80 -g -w 1

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.179:80 -g -w 1

[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.180:80 -g -w 1

[root@localhost /]#service ipvsadm save

[root@localhost /]#chkconfig ipvsadm on

4)配置節點服務器的虛擬IP地址(VIP)

在每個節點服務器,同樣需要具有VIP地址172.16.16.172,但此地址僅用作發送WEB響應數據包的源地址,並不需要監聽客戶機的訪問請求(訪問請求有調度器監聽)。因此使用虛接口lo:0來承載VIP地址,並為本機添加一條路由記錄,將訪問VIP的數據限制在本地以避免通信絮亂。

1

2

3

4

5

6

7

8

9

10

11

12

13

[root@localhost /]#cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0

[root@localhost network-scripts]#vim ifcfg-lo:0

......//省略部分内容

DEVICE=lo:0

ONBOOT=yes

IPADDR=172.16.16.172

NETMASK=255.255.255.255

[root@localhost network-scripts]#service network restart

[root@localhost network-scripts]#vim /etc/rc.local

......//省略部分内容

/sbin/route add -host 172.16.16.172 dev lo:0

[root@localhost network-scripts]#route add -host 172.16.16.172 dev lo:0

5)调整/proc响应参数

1

2

3

4

5

6

7

8

9

[root@localhost /]#vim /etc/sysctl.conf

......//省略部分内容

net.ipv4.conf.all.arp_ignore = 1

net.ipve.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipve.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipve.conf.lo.arp_announce = 2

[root@localhost /]#sysctl -p

6)配置节点服务器

1

2

3

4

5

6

[root@localhost /]#yum -y install httpd

[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html

[root@localhost /]#vim /var/www/html/index.html

<h1>负载均衡测试网页!!!</h1>

[root@localhost /]#service httpd start

[root@localhost /]#chkcofnig httpd on

7)測試LVS群集

安排多臺測試機,從Internet中直接訪問http://172.16.16.172將能夠看到由真實服務器提供的網頁內容——如果各節點的網頁不同,則不同客戶機看到的網頁也可能不以樣。可以使用ipvsadm工具查看當前連接負載的情況。(在調度器上進行查詢)

1

[root@localhost /]#ipvsadm -Ln

延伸阅读

评论