1. 程式人生 > >六十三、LVS DR模式搭建、Keepalived+LVS DR

六十三、LVS DR模式搭建、Keepalived+LVS DR

LVS DR模式搭建 Keepalived+LVS DR

六十三、LVS DR模式搭建、Keepalived+LVS DR

一、LVS DR模式搭建

準備工作:

三臺機器

只需要一個網卡,一個IP

分發器,也叫調度器(簡寫為dir)

93.130

rs1

93.131 網關改回93.2

rs2

93.132 網關改回93.2

vip

93.200


dir上編寫腳本 vim /usr/local/sbin/lvs_dr.sh //內容如下

#! /bin/bash

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

ipv=/usr/sbin/ipvsadm

vip=192.168.93.200

rs1=192.168.93.131

rs2=192.168.93.132

#註意這裏的網卡名字

ifdown ens33

ifup ens33 //這裏ifdown再ifup,再執行這個腳本時,就不會重復設置這個IP了。

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up //綁定VIP的;ifconfig這個命令可以給一個網卡設置個虛擬網卡,虛擬網卡叫ens33:2

route add -host $vip dev ens33:2 //添加網關

$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

解析:

-C:清空規則

-g:DR模式


兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容如下

#/bin/bash

vip=192.168.93.200

ifdown lo

ifup lo

#下面這條是把vip綁定在lo上,是為了實現rs直接把結果返回給客戶端

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

route add -host $vip lo:0

#以下操作為更改arp內核參數,目的是為了讓rs順利發送mac地址給客戶端

#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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


分別在dir上和兩個rs上執行這些腳本

route -n可以看到有個93.200

rs上ip add看一下lo是不是也綁定了這個93.200

dir上ip add看到ens33有個93.200

測試

用火狐瀏覽器訪問192.168.93.200,然後重復的ctrl+F5可以看到效果。一直在rs1和rs2上切換訪問著。


二、Keepalived+LVS DR

完整架構需要兩臺服務器(角色為dir)分別安裝keepalived軟件。

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

keepalived內置了ipvsadm的功能,所以不需要再安裝ipvsadm包,也不用編寫和執行那個lvs_dir的腳本

LVS並不聰明,即使後端的rs宕機了,它還會把請求轉發過去,然後訪問的時候就會顯示無法連接。

Keepalived就是為了解決這個問題,當請求分發過來時,它可以檢測到後端的rs宕機了,就不再把請求分發給它了。

三臺機器分別為:

dir(安裝keepalived)93.130

rs1 93.131

rs2 93.132

vip 93.200


dir上編輯keepalived配置文件

# 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 aminglinux

}

virtual_ipaddress {

192.168.93.200

}

}

virtual_server 192.168.93.200 80 {

#(每隔10秒查詢realserver狀態,檢查rs是否正常,這裏控制頻率)

delay_loop 10

#(lvs 算法)

lb_algo wlc

#(DR模式,如果是NAT就寫NAT)

lb_kind DR

#(同一IP的連接60秒內被分配到同一臺realserver)

persistence_timeout 0

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

protocol TCP

real_server 192.168.93.131 80 {

#(weight權重)

weight 100

TCP_CHECK {

#(10秒無響應超時)

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.93.132 80 {

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

# systemctl start keepalived

# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.93.200:80 wlc

-> 192.168.93.131:80 Route 100 0 0

-> 192.168.93.132:80 Route 100 0 0

可以看到有兩條規則,如果沒有,在dir上把Keepalived停掉,再到rs上把nginx重啟一下,再回dir上啟動Keepalived就可以看到了,這裏如果看不到了,說明Keepalived把宕機的rs剔除了

需要更改裏面的ip信息

執行ipvsadm -C 把之前的ipvsadm規則清空掉

systemctl restart network 可以把之前的vip清空掉

兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh腳本

keepalived有一個比較好的功能,可以在一臺rs宕機時,不再把請求轉發過去

測試


擴展

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


六十三、LVS DR模式搭建、Keepalived+LVS DR