63.LVS DR搭建 keepalived+LVS DR

18.11 LVS DR模式搭建html

18.12 keepalived + LVS DRlinux

擴展nginx

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

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

keepalived中自定義腳本 vrrp_script http://my.oschina.net/hncscwc/blog/158746vim

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

 

 

 

 

18.11 LVS DR模式搭建:瀏覽器

 

 

 

 

在實際的生產環境中用的最多的就是DR模式。緩存

NAT模式用的也不是不少,由於有一個瓶頸(10臺機器之內的網站規模,訪問量不是很大的狀況下,可使用NAT,好在他節省公網IP資源。)。對於小企業來說公網IP仍是要花錢的,因此用的IP少的話仍是佔優點的。bash

可是反過來說用這種DR模式,用了幾十臺服務器或者以上,你每一臺都要配置一個公網IP。這個就是很浪費IP資源的。尤爲是如今公網IP愈來愈珍惜,實際上還有一種方案,就是搭建一個內部的LVS。就是所有都用內網,包括VIP也用內網。而後公網作一個映射就能夠了。公網ip的80端口映射到內網的VIP的80端口。

 

 

DR模式搭建 – 準備工做:

~1.三臺機器

~2.分發器,也叫調度器(簡寫爲dir)

208.128

咱們只須要一個網卡,一個IP。把133的網段做爲一個公網IP。(NAT模式裏咱們把它做爲內網,如今把它做爲公網)

~3.rs1

208.130

~4.rs2

208.133

~5.vip

全部的機器都要綁定這個VIP

133.200

 

DR模式搭建:

~1.

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.208.200

rs1=192.168.208.132

rs2=192.168.208.133

#注意這裏的網卡名字

ifdown ens33 至關於重啓一下。會把以前命令行設置的IP清空掉。是由於若是再一次執行這個腳本,就不會重複的設置這個IP了

ifup ens33

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up #這是綁定VIP的命令

#ifconfig ens33:2 $vip ifconfig這個命令是能夠給一個網卡設置虛擬網卡的。以上虛擬網卡的額名字叫ens33:2

#broadcast $vip broadcast是設置IP的命令

#route add -host $vip dev ens33:2 #添加網卡

$ipv -C #下面就是LVS ADM的規則。-C清空規則

$ipv -A -t $vip:80 -s rr #下面跟設置NAT模式是同樣的

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 #-g就是DR模式

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

~2.

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

#/bin/bash

vip=192.168.133.200 #須要的VIP

#把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地址給客戶端

#參考文檔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

~3.

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

~4.

測試

 

 

實例:

DR模式搭建 – 準備工做:

咱們先把兩臺的rs機器的網關改回來(以前設置成了01的IP)

DR模式搭建:

[root@axinlinux-01 ~]# vim /usr/local/sbin/lvs_dr.sh #同樣要寫一個DR模式的腳本

#! /bin/bash

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

ipv=/usr/sbin/ipvsadm

vip=192.168.208.200

rs1=192.168.208.130

rs2=192.168.208.133

#注意這裏的網卡名字

ifdown ens33

ifup ens33

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

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

[root@axinlinux-01 network-scripts]# sh /usr/local/sbin/lvs_dr.sh #阿鑫執行到這一步的時候,報錯了。是以前電腦重裝系統後設置的IP,仍是在以前的網卡(ens33:1)。刪掉就行了

[root@axinlinux-02 network-scripts]# vi /usr/local/sbin/lvs_rs.sh #02也要設置腳本

#/bin/bash

vip=192.168.133.200

#把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地址給客戶端

#參考文檔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

[root@axinlinux-03 ~]# vim /usr/local/sbin/lvs_dr.sh #03也要設置腳本

#/bin/bash

vip=192.168.133.200

#把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地址給客戶端

#參考文檔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

[root@axinlinux-02 ~]# route -n #查看是否有208.200的路由。要先sh一下這個腳本才能夠

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.208.2 0.0.0.0 UG 100 0 0 ens33

192.168.208.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

192.168.208.200 0.0.0.0 255.255.255.255 UH 0 0 0 lo

[root@axinlinux-02 ~]# ip add #查看是否設定了208.200這個IP

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet 192.168.208.200/32 brd 192.168.208.200 scope global lo:0

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:0d:d6:92 brd ff:ff:ff:ff:ff:ff

inet 192.168.208.130/24 brd 192.168.208.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe0d:d692/64 scope link

valid_lft forever preferred_lft forever

[root@axinlinux-04 ~]# route -n #由於以前的03有點問題。又從新高了個04來替代

[root@axinlinux-04 ~]# ip add

以上檢查無誤。腳本表明已執行

測試:瀏覽器訪問

 

仍是有緩存,在瀏覽器上看不出來。在linux上curl也很差使的,由於在dir本機上綁定了VIP,訪問的話不就是訪問他本身嗎,這確定就不對啦。rs上也綁定了VIP,不能訪問這個VIP。最好的方法是在開一個虛擬機,設置成同一個網段

那麼會有一個疑問,平時客戶訪問不都是在瀏覽器上訪問嗎,這樣起不了負載均衡的做用啊。其實不用擔憂,當訪問量達到必定程度時,他更定是能負載均衡的。

還有一點,我們如今這個客戶端IP是同樣的,那就一個IP在訪問,更定會有特殊的緣由,致使一直請求到一臺機器上去。緩存也好最終得不到咱們想要的結果。當訪問量很大的時候,天然就能起到均衡的做用

咱們能夠看看這個:

[root@axinlinux-01 ~]# 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.208.200:80 rr 活動的鏈接 不活動的鏈接

-> 192.168.208.130:80 Route 1 1 0

-> 192.168.208.134:80 Route 1 0 1

正常的話,訪問量很大額時候,互動和不活動的鏈接都是1:1的效果

 

!!總結:LVS不管是NAT模式、DR模式、IPtunnel模式都是僅僅一個腳本就搞定了。不過須要注意的是,修改內核參數、打開端口轉發這些千萬不要忘。還有,NAT很關鍵的一點,必需要更改rs的網關爲dir的內網IP!!

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

18.12 keepalived + LVS DR:

 

 

 

再來看keepalived怎麼直線負載均衡的功能。在以前咱們說過,keepalived內置了LVS功能,那他是怎麼內置的呢,怎麼實現的呢,我到底用不用再去安裝ipvsadm呢。

先來分析一下,爲何須要keepalived,把keepalived加入到LVS來。目的是什麼呢。兩個緣由:

1.(分發器作高可用)

LVS有一個很關鍵的角色,就是分發器。那若是分發器宕機,那全部的訪問都會被終止。由於咱們的入口所有在dir上(在這個分發器上)。因此咱們要把這個分發器作一個高可用。以前咱們講了用keepalived能夠作高可用,因此keepalived放在這就很完美。而且他有負載均衡的做用。

2.(rs宕機不分發)

若是咱們在使用LVS,沒有其餘額外的操做的話。其中我把一個rs關機,他是會出問題的(當分發到這個關掉的rs上,就會顯示沒法鏈接)。那就是說LVS並不聰明,即便後端的一個rs宕機,他一樣的也會把請求轉發過去。那咱們keeplived出現就是爲了解決這個問題。當咱們後面的這個rs宕機,他也能保證服務正常提供,當請求分發過來的時候,他能自動檢測到後面的rs已經宕機,那這時候就不會把請求轉發到宕機的rs上去了

 

~1.完整架構須要兩臺服務器(角色爲dir)分別安裝keepalived軟件,目的是實現高可用。但本次實驗爲節省資源,就用一個keepalived去搭建負載均衡的功能,因此本次實驗能夠只安裝一臺keepalived

~2.keepalived內置了ipvsadm的功能,因此不須要再安裝ipvsadm包,也不用編寫和執行那個lvs_dir的腳本

~3.三臺機器分別爲:

dir(安裝keepalived)133.130

rs1 208.130

rs2 133.134

vip是208.200

~4.編輯keepalived配置文件 vim /etc/keepalived/keepalived.conf//內容請到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 獲取

須要更改裏面的ip信息

~5.執行ipvsadm -C 把以前的ipvsadm規則清空掉

由於以前咱們設置過這個虛擬IP。-ln能夠看一下

~6.systemctl restart network 能夠把以前的vip清空掉

~7.systemctl keepalived start 啓動keepalived

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

~8.keepalived有一個比較好的功能,能夠在一臺rs宕機時,再也不把請求轉發過去

測試

 

 

 

實例:

[root@axinlinux-01 ~]# 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.208.200 #修改咱們設定的VIP

}

}

virtual_server 192.168.208.200 80 { #這裏的VIP也要修改

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

delay_loop 10 # 檢測realserver是否正常。經過這個參數去控制他的頻率

#(lvs 算法)

lb_algo wlc #算法,到權重的最小連接

#(DR模式)

lb_kind DR #選擇模式,若是是NAT就寫NAT

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

persistence_timeout 0 #這個咱們能夠不用60,能夠改成0

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

protocol TCP

real_server 192.168.208.130 80 { #這個就是rs是誰。端口若是監聽的是8080,就寫8080

#(權重)

weight 100

TCP_CHECK {

#(10秒無響應超時)

connect_timeout 10 #設置他的超時時間

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.208.134 80 { #這個是rs2。端口若是監聽的是8080,就寫8080

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

[root@axinlinux-01 ~]# systemctl start keepalived.service

[root@axinlinux-01 ~]# ps aux |grep keepalived

[root@axinlinux-01 ~]# ip add

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:87:42:24 brd ff:ff:ff:ff:ff:ff

inet 192.168.208.128/24 brd 192.168.208.255 scope global ens33

valid_lft forever preferred_lft forever

inet 192.168.208.200/32 brd 192.168.208.200 scope global ens33:2 再看看有沒有VIP

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe87:4224/64 scope link

valid_lft forever preferred_lft forever

[root@axinlinux-01 ~]# ipvsadm -C 清空之前設定的IP

[root@axinlinux-01 ~]# systemctl restart network

[root@axinlinux-01 ~]# ip add #能夠看到沒有那個VIP了

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:87:42:24 brd ff:ff:ff:ff:ff:ff

inet 192.168.208.128/24 brd 192.168.208.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe87:4224/64 scope link

valid_lft forever preferred_lft forever

[root@axinlinux-01 ~]# ipvsadm -ln #能夠看到就沒有規則了

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

兩臺rs要sh一下/usr/local/sbin/lvs_rs.sh的腳本

[root@axinlinux-01 ~]# systemctl start keepalived

[root@axinlinux-01 ~]# ps aux |grep keepalived

[root@axinlinux-01 ~]# ipvsadm -ln #要等一下才能夠。由於設定了10的檢測間隔

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.208.200:80 wlc

-> 192.168.208.130:80 Route 100 0 0

-> 192.168.208.134:80 Route 100 0 0

[root@axinlinux-04 ~]# systemctl stop nginx #咱們把一臺rs關掉(關掉核心nginx便可)

[root@axinlinux-04 ~]# ps aux |grep nginx

root 1475 0.0 0.0 112676 988 pts/0 S+ 23:40 0:00 grep --color=auto nginx

[root@axinlinux-01 ~]# ipvsadm -ln #而後回到分發器上看一下。結果04沒有了,這說明keeplaved有自動把宕機的rs踢出的功能

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.208.200:80 wlc

-> 192.168.208.130:80 Route 100 0 0 #這隻要看不到了,就說明把它踢掉了

[root@axinlinux-04 ~]# systemctl start nginx #在把它啓動。還能把它加回來

[root@axinlinux-04 ~]# ps aux |grep nginx

[root@axinlinux-01 ~]# 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.208.200:80 wlc

-> 192.168.208.130:80 Route 100 0 0

-> 192.168.208.134:80 Route 100 0 0

 

仍是沒法測試負載均衡的效果。由於瀏覽器緩存等的關係。訪問量越大越均衡

[root@axinlinux-01 ~]# 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.208.200:80 wlc

-> 192.168.208.130:80 Route 100 1 1

-> 192.168.208.134:80 Route 100 0 2

相關文章
相關標籤/搜索