1. 程式人生 > >第十七章 Linux叢集架構(二)

第十七章 Linux叢集架構(二)

八、LVS DR模式搭建
九、keepalived + LVS
十、擴充套件

 

八、LVS DR模式搭建

實驗環境

三臺虛擬機器,都需要關閉firewalld服務, 並且安裝iptables-serives服務, 啟動iptables服務,並清空iptables規則

分發器,也叫排程器(簡寫為dir)

主機名:lvs-lb
內網:192.168.239.133
主機名:rs1
內網:192.168.239.137
主機名:rs2
內網:192.168.239.139

最好再加一臺,作為client測試時使用。 IP:192.168.239.128

修改nginx預設主頁的內容為IP地址,方便測試時判斷。

DR模式比NAT模式多了一個VIP,虛擬IP ,分發器和 rs 都需要繫結這個VIP

VIP:192.168.239.111

1. 在三臺虛擬機器上停用firewalld,啟用iptables

//停用firewalld

systemctl stop firewalld

systemctl disable firewalld

//如果未安裝iptables,用yum安裝一下

yum -y install iptables-services

systemctl start iptables-services

//清空、儲存規則

iptables -F; service iptables save

2. 在分發器上安裝ipvsdam

[[email protected] ~]# yum install -y ipvsdam

3. 在director上配置指令碼,vim /usr/local/sbin/lvs_nat.sh 內容如下

[[email protected] ~]# vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
#開啟轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
# 設定變數
ipv=/usr/sbin/ipvsadm
vip=192.168.239.111
rs1=192.168.239.137
rs2=192.168.239.139

# 繫結VIP ,注意這裡的網絡卡名字,需要用自己的網絡卡名
ifdown ens33
ifup ens33
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
#設定路由
route add -host $vip dev ens33:2
# 配置LVS規則
$ipv -C
$ipv -A -t $vip:80 -s wrr              # 加權輪循模式的LVS虛擬伺服器
$ipv -a -t $vip:80 -r $rs1:80 -g -w 2  # -g 使用DR模式,-t 指定的IP為VIP ,權重為2
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
 

給指令碼賦予755許可權,執行指令碼,使用ipvsadm -ln 命令檢視ipvsadm規則

[[email protected] ~]# chmod 755 /usr/local/sbin/lvs_dr.sh
[[email protected] ~]# sh /usr/local/sbin/lvs_dr.sh
[[email protected] ~]# ipvsadm -L -n

4. 在兩個rs上配置指令碼,vim /usr/local/sbin/lvs_rs.sh 內容如下

[[email protected] ~]# vim /usr/local/sbin/lvs_rs.sh
#/bin/bash
vip=192.168.239.111
#把vip繫結在lo上,是為了實現rs直接把結果返回給客戶端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作為更改arp核心引數,目的是為了讓rs順利傳送mac地址給客戶端
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

給指令碼賦予755許可權,執行指令碼

[[email protected] ~]# vim /usr/local/sbin/lvs_rs.sh
[[email protected] ~]# chmod 755 /usr/local/sbin/lvs_rs.sh
[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh
 

5. 測試

當前採用的是rr排程演算法,2:1的權重輪循演算法測試結果OK

[[email protected] ~]# curl 192.168.239.111

 

九、keepalived + LVS

LVS可以實現負載均衡,但是不能夠進行健康檢查,如一個rs出現故障,LVS 仍然會把請求轉發給故障的rs伺服器,這就會導致請求的無效性。keepalive 軟體可以進行健康檢查,而且能同時實現 LVS 的高可用性,解決 LVS 單點故障的問題,其實 keepalive 就是為 LVS 而生的。

keepalived + LVS實驗環境說明:

完整架構需要兩臺伺服器(角色為dir)分別安裝keepalived軟體,目的是實現高可用,

但keepalived本身也有負載均衡的功能,所以本次實驗可以只安裝一臺keepalived

keepalived內建了ipvsadm的功能,所以不需要再安裝ipvsadm包,也不用編寫和執行那個lvs_dir的指令碼

分發器,也叫排程器(簡寫為dir)

主機名:lvs-lb
內網:192.168.239.133(安裝keepalived)
主機名:rs1
內網:192.168.239.137
主機名:rs2
內網:192.168.239.139

修改nginx預設主頁的內容為IP地址,方便測試時判斷。

VIP:192.168.239.111

1. dir上安裝keepalived

[[email protected] ~]# yum install  keepalived -y
2. dir上編輯keepalived配置檔案 vim /etc/keepalived/keepalived.conf 

內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    #備用伺服器上為 BACKUP
    state MASTER
    #繫結vip的網絡卡為ens33,你的網絡卡和阿銘的可能不一樣,這裡需要你改一下
    interface ens33
    virtual_router_id 51
    #備用伺服器上為90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass wenyang
    }
    virtual_ipaddress {
        192.168.239.111
    }
}
virtual_server 192.168.239.111 80 {
    #(每隔10秒查詢realserver狀態)
    delay_loop 10
    #(lvs 演算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的連線60秒內被分配到同一臺real server)
    persistence_timeout 60
    #(用TCP協議檢查realserver狀態)
    protocol TCP

    real_server 192.168.239.137 80 {
        #(權重)
        weight 100
        TCP_CHECK {
        #(10秒無響應超時)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
  real_server 192.168.239.139 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }  
}    
##注意根據自己的ip來配置

3. 清空之前的ipvsadm規則和VIP

[[email protected] ~]# ipvsadm -C
[[email protected] ~]# systemctl restart network

#最好每個主機都執行一遍

兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh指令碼

[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh
[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh

然後啟動dir上的keepalived:

[[email protected] ~]# systemctl start keepalived

[[email protected] ~]# ps -ef | grep keep

4. 測試

檢視ipvsadm規則,可以看到目前有兩臺 rs

[[email protected] ~]# ipvsadm -L -n

①模擬故障,關閉rs1上的nginx

[[email protected] ~]# netstat -lntp|grep 80
再次檢視 dir 上的 ipvsadm 規則,只有一臺 rs 的規則了。 可能需要過幾秒鐘才會有變化

在客戶端上訪問,結果正常,只是不會出現訪問192.168.239.137節點,一直訪問192.168.239.139節點

②重啟rs1上的nginx

[[email protected] ~]# /usr/local/nginx/sbin/nginx
再檢視 dir 的 ipvsadm規則,可以看到又有了兩臺 rs

在客戶端上訪問,結果正常,按照正常排程演算法訪問192.168.239.137和192.168.239.139

 

十、擴充套件

heartbeat和keepalived比較http://blog.csdn.net/yunhua_lee/article/details/9788433 
DRBD工作原理和配置   http://502245466.blog.51cto.com/7559397/1298945
mysql+keepalived : http://lizhenliang.blog.51cto.com/7876557/1362313
lvs 三種模式詳解  http://www.it165.net/admin/html/201401/2248.html
lvs幾種演算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html
關於arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
lvs原理相關的   http://blog.csdn.net/pi9nc/article/details/23380589
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://my.oschina.net/hncscwc/blog/158746
lvs dr模式只使用一個公網ip的實現方法   http://storysky.blog.51cto.com/628458/338726