2015-06-05/2015-06-08LB負載平衡叢集

來源:互聯網
上載者:User

標籤:blank   開源軟體   balance   target   display   

常用的負載平衡開源軟體有: nginx、lvs、keepalived

商業的硬體負載裝置: F5、Netscale

1. LB、LVS介紹LB叢集是load balance 叢集的簡寫,翻譯成中文就是負載平衡叢集

650) this.width=650;" title="1x4e5ueewzrd" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="1x4e5ueewzrd" src="http://s3.51cto.com/wyfs02/M01/72/98/wKioL1XoOk2ByQIzAABfIDWRSkk341.jpg" "244" height="159" />

LVS是一個實現負載平衡叢集的開源軟體項目

LVS架構從邏輯上可分為調度層(Director)、server叢集層(Real server)和共用儲存層

LVS可分為三種工作模式:  ( dr模式參考這篇文章  http://os.51cto.com/art/201105/264303.htm    這篇介紹的還是挺詳細的: http://www.it165.net/admin/html/201401/2248.html )

NAT(調度器將請求的目標ip即vip地址改為Real server的ip, 返回的資料包也經過調度器,調度器再把源地址修改為vip)

650) this.width=650;" title="aga011e901u" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="aga011e901u" src="http://s3.51cto.com/wyfs02/M02/72/98/wKioL1XoOk7SJpTGAABLpWEn1vI798.jpg" "244" height="193" />

TUN(調度器將請求來的資料包封裝加密通過ip隧道轉寄到後端的real server上,而real server會直接把資料返回給用戶端,而不再經過調度器)

DR(調度器將請求來的資料包的目標mac地址改為real server的mac地址,返回的時候也不經過調度器,直接返回給用戶端)

650) this.width=650;" title="w7v860vq8h6" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="w7v860vq8h6" src="http://s3.51cto.com/wyfs02/M00/72/98/wKioL1XoOk6Ae1XvAABNKugxjoM976.jpg" "244" height="193" />三種IP:DIP(driector ip), VIP(virtual ip), RIP(Real IP). 其中DIP, RIP 為同一個網段,並且為私網IP, vip為對外提供服務的ip,Director, Real server上都設定vip

LVS的調度演算法:輪叫調度(Round Robin)(簡稱rr) ,加權輪叫(Weighted Round Robin)(簡稱wrr),最少連結(least connection)(LC),加權最少連結(Weighted Least Connections)(WLC) 等等   (其他演算法,參考 http://www.aminglinux.com/bbs/thread-7407-1-1.html)

2. LVS/NAT 配置

三台伺服器一台作為director, 兩台作為real server

Director 有一個外網ip (192.168.31.166) 和一個內網ip(192.168.21.166), 兩個real server上只有內網ip(192.168.21.100)和(192.168.21.101) 並且需要把兩個real server的內網網關設定為director的內網ip(192.168.21.166)

兩個real server 上都安裝httpd: yum install -y nginx

Director上安裝ipvsadm  yum install -y  ipvsadm

Direcotr 上 vim /usr/local/sbin/lvs_nat.sh //增加:

#! /bin/bash

# director 伺服器上開啟路由轉寄功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

# 關閉icmp的重新導向

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

# director 設定nat防火牆

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.21.0/24  -j MASQUERADE

# director設定ipvsadm

IPVSADM=‘/sbin/ipvsadm‘

$IPVSADM -C

$IPVSADM -A -t 192.168.31.166:80 -s lc -p 300

$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1

$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.101:80 -m -w 1

直接運行這個指令碼就可以完成lvs/nat的配置了:

/bin/bash /usr/local/sbin/lvs_nat.sh

通過瀏覽器測試兩台機器上的web內容,為了區分開,我們可以把nginx的預設頁修改一下:

rs1上: echo "rs1rs1" >/usr/share/nginx/html/index.html

rs2上: echo "rs2rs2" >/usr/share/nginx/html/index.html

3. LVS/DR 配置

三台機器:

director(eth0192.168.31.166, vip eth0:0: 192.168.31.110)

real server1(eth0 rip: 192.168. 31.100, vip lo:0: 192.168.31.110)

real server2(eth0 rip: 192.168.31.101, vip lo:0: 192.168.31.110)

Director 上 vim /usr/local/sbin/lvs_dr.sh //增加

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/sbin/ipvsadm

vip=192.168.31.110

rs1=192.168.31.100

rs2=192.168.31.101

ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev eth0:0

$ipv -C

$ipv -A -t $vip:80 -s rr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

兩台rs上:vim /usr/local/sbin/lvs_dr_rs.sh

#! /bin/bash

vip=192.168.31.110

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

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

關於arp_ignore和 arp_announce 參考:http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

然後director上執行: bash /usr/local/sbin/lvs_dr.sh

兩台rs上執行: bash /usr/local/sbin/lvs_dr_rs.sh

Windows下瀏覽器測試訪問

4. LVS/DR + keepalived配置

注意:前面雖然我們已經配置過一些操作,但是下面我們使用keepaliave操作和之前的操作是有些衝突的,所以若是之前配置過DR,請首先做如下操作:dr上執行:

$ipv -C

ifconfig eth0:0  down

前面的lvs雖然已經配置成功也實現了負載平衡,但是我們測試的時候發現,當某台real server把httpd進程停掉,那麼director照樣會把請求轉寄過去,這樣就造成了某些請求不正常。所以需要有一種機制用來檢測real server的狀態,這就是keepalived。它的作用除了可以檢測rs狀態外,還可以檢測備用director的狀態,也就是說keepalived可以實現ha叢集的功能,當然了也需要一台備用director.

備用director也需要安裝一下keepalived軟體

yum install -y keepalived

安裝好後,編輯設定檔 

vim /etc/keepalived/keepalived.conf   //加入如下:

vrrp_instance VI_1 {

    state MASTER   #待命伺服器上為 BACKUP

    interface eth0

    virtual_router_id 51

    priority 100  #待命伺服器上為90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.31.110

    }

}

virtual_server 192.168.31.110 80 {

    delay_loop 6                  #(每隔10秒查詢realserver狀態)

    lb_algo wlc                  #(lvs 演算法)

    lb_kind DR                  #(Direct Route)

    persistence_timeout 60        #(同一IP的串連60秒內被分配到同一台realserver)

    protocol TCP                #(用TCP協議檢查realserver狀態)

    real_server 192.168.31.100 80 {

        weight 100               #(權重)

        TCP_CHECK {

        connect_timeout 10       #(10秒無響應逾時)

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

real_server 192.168.31.101 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

     }

}

以上為主director的設定檔,從director的設定檔只需要修改

state MASTER  -> state BACKUP

priority 100 -> priority 90

配置完keepalived後,需要開啟連接埠轉寄(主從都要做):

echo 1 > /proc/sys/net/ipv4/ip_forward

然後,兩個rs上執行 /usr/local/sbin/lvs_dr_rs.sh 指令碼

最後,兩個director上啟動keepalived服務(先主後從):

/etc/init.d/keepalived start

另外,需要注意的是,啟動keepalived服務會自動產生vip和ipvsadm規則,不需要再去執行上面提到的/usr/local/sbin/lvs_dr.sh 指令碼。

nginx ip_hash 實現長串連

  1. upstream test {
  2.     ip_hash;
  3.     server 192.168.31.100;
  4.     server 192.168.31.101;
  5. }
  6.      server {
  7.             listen 80;
  8.             server_name bbs.aaa.cn;
  9.             location / {
  10.                 proxy_pass      http://test/;
  11.                 proxy_set_header Host   $host;
  12.                 proxy_set_header X-Real-IP      $remote_addr;
  13.                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14.             }
  15.         }

複製代碼

擴充學習:

haproxy+keepalived  http://blog.csdn.net/xrt95050/article/details/40926255

nginx、lvs、haproxy比較  http://www.csdn.net/article/2014-07-24/2820837

keepalived中自訂指令碼 vrrp_script   http://www.linuxidc.com/Linux/2012-08/69383.htm http://my.oschina.net/hncscwc/blog/158746

nginx代理  http://www.apelearn.com/bbs/thread-64-1-1.html

nginx長串連  http://www.apelearn.com/bbs/thread-6545-1-1.html

nginx演算法分析   http://blog.sina.com.cn/s/blog_72995dcc01016msi.html

lvs dr模式只使用一個公網ip的實現方法   http://storysky.blog.51cto.com/628458/338726

nginx負載平衡和lvs負載平衡的比較分析

http://www.sudone.com/nginx/nginx_vs_lvs.html

2015-06-05/2015-06-08LB負載平衡叢集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.