LVS之NAT模型架構

LVS-NAThtml


1、架構平臺環境linux

系統平臺:CentOS 6.5 64bit 
vmw10.0 lvs01(RS),lvs02(RS),lvs03(Director)
相關服務和專用名詞定義
Director:負責調度集羣的主機;也簡稱爲調度器、分發器
VIP:Virtual IP 向外提供服務的IP;一般此IP綁定域名
DIP:與內部主機RIP通訊的IP,在Director主機上
RIP:RealServer IP;內部真正提供服務的主機
CIP:客戶端IP

2、LVS-NAT架構算法

wKiom1UNJ2SBQI9KAADU2Y9t6H8332.jpg

3、LVS-NAT模型實現負載均衡的工做方式bash

NAT模型其實就是經過網絡地址轉換來實現負載均衡的,它的工做方式幾乎跟DNAT如出一轍的,目前的DNAT只能轉發到一個目標地址,早期的DNAT是能夠將請求轉發到多個目標的,在LVS出現以後就將此功能從DNAT中去掉了,下面來講說NAT模型的工做方式或者說NAT模型是怎麼實現負載均衡的,根據上圖,
1.用戶請求VIP(也能夠說是CIP請求VIP)
2,Director Server 收到用戶的請求後,發現源地址爲CIP請求的目標地址爲VIP,那麼Director Server會認爲用戶請求的是一個集羣服務,那麼Director Server 會根據此前設定好的調度算法將用戶請求負載給某臺Real Server ;假如說此時Director Server 根據調度算法的結果會將請求分攤到RealServer1上去,那麼Director Server 會將用戶的請求報文中的目標地址,從原來的VIP改成RealServer1的IP,而後再轉發給RealServer1
3,此時RealServer1收到一個源地址爲CIP目標地址爲本身的請求,那麼RealServer1處理好請求後會將一個源地址爲本身目標地址爲CIP的數據包經過Director Server 發出去,
4.當Driector Server收到一個源地址爲RealServer1 的IP 目標地址爲CIP的數據包,此時Driector Server 會將源地址修改成VIP,而後再將數據包發送給用戶。
服務器

4、LVS-NAT的性能瓶頸網絡

在LVS/NAT的集羣系統中,請求和響應的數據報文都須要經過負載調度器(Director),當真實服務器(RealServer)的數目在10臺和20臺之間時,負載調度器(Director)將成爲整個集羣系統的新瓶頸。大多數Internet服務都有這樣的特色:請求報文較短而響應報文每每包含大量的數據。若是能將請求和響應分開處理,即在負載調度器(Director)中只負責調度請求而響應直接(RealServer)返回給客戶,將極大地提升整個集羣系統的吞吐量。架構

5、部署環境負載均衡

一、準備工做框架

(1)關閉全部測試主機的iptables和selinux服務
setenforce 0
service iptables stop && chkconfig iptables off
(2)HA中全部節點儘量保證時間是一致的,方法是時間同步+任務計劃同步時間;
注意:對於LB來講時間的影響不是很大,可是對於HP來講各節點之間的時間誤差不該該超出一秒鐘:
ntpdate -u asia.pool.ntp.org

二、拓撲圖地址規劃curl

LVS Director 機器:
公網地址:vip
主機名:lvs03
網卡:eth0 
vip地址:10.19.166.169
網絡鏈接方式:vmw-bridge

私網地址:dip
dip地址:10.0.0.1/24
網絡鏈接方式:vmw-(not use[VMnet3])

RealServer機器:
私網地址:rip1
主機名:lvs01
rip地址:10.0.0.8/24
網絡鏈接方式:vmw-(not use[VMnet3])

私網地址:rip2
主機名:lvs01
rip地址:10.0.0.9/24
網絡鏈接方式:vmw-(not use[VMnet3])

三、RealServer上部署httpd服務並測試

安裝Apache httpd 建立測試頁面,並啓動httpd服務
# yum install httpd -y
# /etc/init.d/httpd start
[root@lvs01]# echo "<h1>Node1.ssc.com</h1>" > /var/www/html/index.html
[root@lvs02]#  echo "<h1>Node2</h1>" > /var/www/html/index.html

測試httpd服務器是否能正常打開頁面
[root@lvs01]# curl http://10.0.0.8[root@lvs02]# curl http://10.0.0.9

四、在Director上部署ipvs服務並測試

(1)肯定本機ip_vs模塊是否加載,也就是是否支持lvs,2.4.2後都支持了;而後安裝ipvsadm 用戶操做命令
[root@lvs03 ~]# grep -i "ip_vs" /boot/config-2.6.32-431.el6.x86_64 
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12
CONFIG_IP_VS_PROTO_TCP=y    #IPVS支持哪些集羣服務
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
CONFIG_IP_VS_RR=m    #IPVS支持的十種調度算法
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
CONFIG_IP_VS_FTP=m    #支持代理FTP協議的
CONFIG_IP_VS_PE_SIP=m

(2)安裝 ipvsadm
[root@lvs03 ~]# yum install ipvsadm -y

(3)添加集羣服務
[root@lvs03 ~]# ipvsadm -A -t 10.19.166.169:80 -s rr    #定義一個集羣服務
[root@lvs03 ~]# ipvsadm -a -t 10.19.166.169:80 -r 10.0.0.8 -m    #添加RealServer並指派調度
[root@lvs03 ~]# ipvsadm -a -t 10.19.166.169:80 -r 10.0.0.9 -m    #添加RealServer並指派調度
[root@lvs03 ~]# ipvsadm -L -n    #查看IPVS定義的規則列表
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.19.166.169:80 rr
  -> 10.0.0.8:80                  Masq    2      0          0         
  -> 10.0.0.9:80                  Masq    1      0          0 
  
[root@lvs03 ~]# cat /proc/sys/net/ipv4/ip_forward                    #查看Linux是否開啓路由轉發功能
0
[root@lvs03 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward               #啓動Linux的路由轉發功能
[root@lvs03 ~]# cat /proc/sys/net/ipv4/ip_forward 
1

(4)測試訪問http頁面

wKioL1UNOUPj-nWoAAE6sBuQEDM984.gif

(5)永久保存LVS規則並恢復
第一種方法:
[root@lvs03 ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [肯定]
第二種方法:
[root@lvs03 ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1
 
模擬清空ipvsadm規則來恢復
[root@lvs03 ~]# ipvsadm -C
[root@lvs03 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs03 ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.s1 
[root@lvs03 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.19.166.169:80 wrr
  -> 10.0.0.8:80             Masq    3      0          0         
  -> 10.0.0.9:80             Masq    1      0          0


ipvsadm用法

其實LVS的自己跟iptables很類似,並且連命令的使用格式都很類似,其實LVS是根據iptables的框架開發的,那麼LVS的自己分紅了兩個部分,第一部分是工做在內核空間的一個IPVS的模塊,其實LVS的功能都是IPVS模塊實現的,,第二部分是工做在用戶空間的一個用來定義集羣服務的一個工具ipvsadm, 這個工具的主要做用是將管理員定義的集羣服務列表傳送給工做在內核空間中的IPVS模塊,下面來簡單的介紹下ipvsadm命令的用法

ipvsadm組件定義規則的格式:
1.定義集羣服務格式:
(1).添加集羣服務:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
-A:                  表示添加一個新的集羣服務
-E:                  編輯一個集羣服務
-t:                  表示tcp協議
-u:                  表示udp協議
-f:                  表示firewall-Mark,防火牆標記
service-address:     集羣服務的IP地址,即VIP
-s                    指定調度算法
-p                    持久鏈接時長,如#ipvsadm -Lcn ,查看持久鏈接狀態
-M                    定義掩碼
ipvsadm -D -t|u|f service-address      刪除一個集羣服務
ipvsadm -C                             清空全部的規則
ipvsadm -R                             從新載入規則
ipvsadm -S [-n]                        保存規則
2.向集羣服務添加RealServer規則:
(1).添加RealServer規則
ipvsadm -a|e -t|u|f service-address -r server-address
              [-g|i|m] [-w weight]
-a                 添加一個新的realserver規則
-e                 編輯realserver規則
-t                 tcp協議
-u                 udp協議
-f                 firewall-Mark,防火牆標記
service-address    realserver的IP地址
-g                 表示定義爲LVS-DR模型
-i                 表示定義爲LVS-TUN模型
-m                 表示定義爲LVS-NAT模型
-w                 定義權重,後面跟具體的權值
ipvsadm -d -t|u|f service-address -r server-address          --刪除一個realserver
ipvsadm -L|l [options]                                       --查看定義的規則
如:#ipvsadm -L -n  
ipvsadm -Z [-t|u|f service-address]                          --清空計數器

lvs的10種調度算法

LVS Scheduling Method LVS的調度方法:
1.Fixed Scheduling Method  靜態調服方法
(1).RR     輪詢
(2).WRR    加權輪詢
(3).DH     目標地址hash
(4).SH     源地址hash
2.Dynamic Scheduling Method 動態調服方法
(1).LC     最少鏈接
(2).WLC    加權最少鏈接
(3).SED    最少指望延遲
(4).NQ     從不排隊調度方法
(5).LBLC   基於本地的最少鏈接
(6).LBLCR  帶複製的基於本地的最少鏈接


###########################################################

Real Server httpd 安裝腳本

#!/bin/bash
#install httpd
#2015/03/23
i='httpd'
if [ `rpm -qa | grep $i | wc -l` -eq 0 ]
    then
        echo "$i is not installed"
        sleep 2
        echo "### yum httpd ###"
        sleep 2
        echo `yum install -y httpd`
    else
        echo "i was installed"
fi

sleep 2

echo `/etc/init.d/httpd start`

sleep 3
echo "### insert RS1 ###"
echo `cat /etc/sysconfig/network` > /var/www/html/index.html
sleep 3
echo `curl http://localhost`

###########################################################

Director 安裝腳本

#!/bin/bash
# Director install
# 2015/03/23
vip=10.19.166.169
dip=10.0.0.1
rip1=10.0.0.8
rip2=10.0.0.9
case "$1" in
start)
echo `ifconfig eth1 $dip/24 up`
echo "ipvsadm install"
sleep 3
echo `yum install ipvsadm -y`
sleep 4
echo `echo 1 > /proc/sys/net/ipv4/ip_forward`
sleep 1
echo `ipvsadm -A -t $vip:80 -s wrr`
echo `ipvsadm -a -t $vip:80 -r $rip1 -m`
echo `ipvsadm -a -t $vip:80 -r $rip2 -m`
;;

stop)
echo `echo 0 > /proc/sys/net/ipv4/ip_forward`
sleep 1
echo `ipvsadm -C`
sleep 1
echo `ifconfig eth1 down`
;;

status)
if [ `ipvsadm -L -n | wc -l` -eq 6 ];then
	echo "ipvsadm is running...."
    else
    	echo "ipvsadm is stopped...."
fi
;;

* )
    echo "Usage: $0 {start|stop}"
;;
esac
相關文章
相關標籤/搜索