天天看點

負載均衡--叢集 LVS+keepalived

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

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

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

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

LVS架構從邏輯上可分為排程層(Director)、server叢集層(Real server)和共享存儲層

LVS的三種工作模式:

1.NAT模式-網絡位址轉換

2.TUN模式-- (tunneling)客戶把請求封裝成IP

3.DR模式(直接路由模式)請求資料的MAC位址

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 

<a href="http://s1.51cto.com/wyfs02/M02/87/BE/wKiom1fgU9eQM6YkAAAeBJwPZ3U860.png" target="_blank"></a>

倆台客戶機分别啟動nginx: /etc/init.d/nginx start

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

rs1上: echo "rs1rs1" &gt;/usr/share/nginx/html/index.html

rs2上: echo "rs2rs2" &gt;/usr/share/nginx/html/index.html

real server

<a href="http://s4.51cto.com/wyfs02/M01/87/BB/wKioL1fgVAmyGL-8AAAgrXmyO6U398.png" target="_blank"></a>

re-server (倆台内網IP,外網不要)

Dicr 一個内網,一個外網

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 //增加

echo 1 &gt; /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

不用安裝 ipvsadm

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

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

route add -host $vip lo:0

echo "1" &gt;/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" &gt;/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" &gt;/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" &gt;/proc/sys/net/ipv4/conf/all/arp_announce

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

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

Windows下浏覽器測試通路

<a href="http://s1.51cto.com/wyfs02/M01/87/BB/wKioL1fgVEejyr8XAAASAlLmSYo485.png" target="_blank"></a>

vip都是虛拟出來的網卡

<a href="http://s5.51cto.com/wyfs02/M00/8B/C6/wKiom1hYPvXSRLP3AAAhVx_R0Qk634.png" target="_blank"></a>

4. LVS/DR + keepalived配置

<a href="http://s5.51cto.com/wyfs02/M02/87/BE/wKiom1fgVHbQ5ptyAAAEX1H9DUg312.png" target="_blank"></a>

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

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

        connect_timeout 10

     }

以上為主director的配置檔案,從director的配置檔案隻需要修改

state MASTER  -&gt; state BACKUP

priority 100 -&gt; priority 90

配置完keepalived後,需要開啟端口轉發(主從都要做):

然後,兩個rs上執行 /usr/local/sbin/lvs_dr_rs.sh 腳本

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

/etc/init.d/keepalived start

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

停掉主上的keepalived  ,看從上的是不是有以下的

<a href="http://s3.51cto.com/wyfs02/M00/87/BE/wKiom1fgVKWTd9QsAABTPk_k3mM393.png" target="_blank"></a>

本文轉自 15816815732 51CTO部落格,原文連結:http://blog.51cto.com/68686789/1854289

繼續閱讀