1. 程式人生 > >Linux集群架構(2)LVS介紹、LVS的調度算法、NAT模式搭建、 DR模式、keepalive

Linux集群架構(2)LVS介紹、LVS的調度算法、NAT模式搭建、 DR模式、keepalive

集群框架

負載均衡集群介紹

技術分享圖片

LVS介紹

技術分享圖片


1.LVS NAT模式:(,目標ip轉發。適用於小型集群,機器數量不多10臺左右)

技術分享圖片


2.LVS IP Tunnel模式(將目標ip進行更改)

技術分享圖片

(在這個模式下的rs機器都是配置有公網ip)

3.LVS DR模式(把數據包的MAC地址修改)

技術分享圖片

NAT模式適合小型集群,機器在10臺左右。其優勢是節省公網ip。 IP TUNNEL和DR

相差不大,能使用在較大的集群模式下,但是每臺rs服務器都要配置有公網ip,這樣會比較浪費公網ip,費錢。


LVS的調度算法

技術分享圖片

常用的算法是前四種:rr 、wrr 、 lc 、wlc。



LVS NAT模式搭建

準備工作:

技術分享圖片


1.準備三臺機器(我是從第二臺直接克隆的)

(1)修改第三臺克隆機的ip

技術分享圖片

修改完重啟服務:

技術分享圖片

(2)修改克隆集主機名:

hostnamectl set-hostname cansheng3


2.將分發器,也叫調度器(簡寫為dir)機器(133)添加多一塊網卡:

(因為之前已經配置有了ens37)

技術分享圖片

這個ens37的網卡是僅主機模式

技術分享圖片

同時查看到這個網卡的子網ip網段是192.168.243.0

技術分享圖片

(1)所以對這個ens37設置ip:

vim /etc/sysconfig/network-scripts/ifcfg-ens37

技術分享圖片

修改完後重啟網絡服務:

systemctl restart network

技術分享圖片

(2)檢測ip是否能ping通:(在window的終端下測試)

ping 192.168.243.144

技術分享圖片


3.修改兩臺rs(真實服務器)網關(要和dir分發器的內網一致)

技術分享圖片

vim /etc/sysconfig/network-scripts/ifcfg-ens33

技術分享圖片

!!當這兩臺機器rs的網關修改成dir內網的ip時則不能上網。

修改完後重啟服務和查看網關

systemctl restart network

route -n

技術分享圖片


4.三臺機器上都執行執行


(1)systemctl stop firewalld;

systemc disable firewalld

(2)yum install -y iptables-services

(3)systemctl start iptables

(4)iptables -F;

(5)service iptables save

關閉selinux

vim /etc/selinux/config

技術分享圖片

(如果在使用yum下載的時候發現很慢,則先吧rpel改了名字再下載,需要用到rpel

再把名字改回來

技術分享圖片

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo1

)


開始 NAT模式搭建

1.只要在分發器dir上安裝ipvsadm (實現lvs功能的重要工具)

yum install -y ipvsadm

技術分享圖片

2.在dir上編寫腳本,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

# 註意區分網卡名字,我的兩個網卡分別為ens33和ens37(根據自己的網卡名設定)

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

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

# director 設置nat防火墻

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.136.0/24 -j MASQUERADE //實現讓同網段的內網實現上網

# director設置ipvsadm

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C //清空ipvsadm規則

$IPVSADM -A -t 192.168.243.144:80 -s lc -p 3 //添加一個規則,並指定調度算法為lc ,-p指定超時時間(單位秒,建議不加)

$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.134:80 -m -w 1 //-m:表示NAT模式;-i:ip Tunnel;-g:DR模式-w:表示權重

$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.135:80 -m -w 1 //-a:添加rs;-t:TCP

(-p的設置會是請求在指定的時間內請求在同一臺rs上)
技術分享圖片

寫完腳本執行一下:

sh /usr/local/sbin/lvs_nat.sh

(執行腳本任何輸出表示正確)


NAT模式效果測試

技術分享圖片

1. 兩臺rs上都安裝nginx,並開啟服務


2.設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結

A:對rs1機器操作

> /usr/share/nginx/html/index.html (清空文件內容)

vim /usr/share/nginx/html/index.html

技術分享圖片

B:對rs2機器操作:

> /usr/share/nginx/html/index.html (清空文件內容)

vim /usr/share/nginx/html/index.html

技術分享圖片

3. 瀏覽器裏訪問192.168.243.144,多訪問幾次看結果差異

瀏覽器中輸入公網ip

技術分享圖片

使用curl測試:curl 192.168.243.144

技術分享圖片

(可看出請求均衡在兩臺rs上)

使用命令 ipvadm -ln 可以看到相應的規則

技術分享圖片


DR模式搭建

(在生產環境中,使用較多的是DR模式,但是使用公網ip資源大。

在生產中也可以搭建一個內網,使用一個公網ip,映射到公網的VIP上,從而減少公網資金支出

)


準備工作

技術分享圖片


把上面實驗的兩臺rs的網關修改回來

技術分享圖片


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

rs1=192.168.136.134

rs2=192.168.136.135

#註意這裏的網卡名字

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 wrr

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

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


技術分享圖片


執行腳本:sh /usr/local/sbin/lvs_dr.sh

技術分享圖片

(這個提示是正常的。因為我們執行了ifdown 和ifup)


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

#/bin/bash

vip=192.168.136.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


技術分享圖片

兩臺rs都執行腳本: sh /usr/local/sbin/lvs_rs.sh


檢測VIP

ip addr

技術分享圖片



3.測試:

技術分享圖片

測試最好是用另外一臺不同ip網段的虛擬機測試最好。

(當我們的訪問量很大時,自然起到均衡的作用。)



keepalived+ lvs

(在LVS架構中,NAT和DR模式,當後端的RS宕機時,調度器依然會把請求轉發到宕機的RS上。使用keepalived可以解決此問題,keepalived能實現高可用和負載均衡)

技術分享圖片

技術分享圖片

一般的情況下,使用這個keepalived做負載均衡,首先就是要做高可用再做負載均衡

所以最少要準備四臺機器:兩臺做keepalived,兩臺作為真實機器

(本次實驗用三臺機器

dir(安裝keepalived)136.133

rs1 136.134

rs2 133.135

vip 133.200



步驟

(在實驗之前,我們甚至是不需要使用ipvsadm 即可ipvsadm -c 卸載)

1. 編輯keepalived配置文件:

vim /etc/keepalived/keepalived.conf (先把之前內容清空)

/內容請到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_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 { #虛擬ip:VIP

192.168.136.200

}

}

virtual_server 192.168.136.200 80 { #端口根據具體監控的端口確定

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

delay_loop 10

#(lvs 算法)

lb_algo wlc

#(DR模式)

lb_kind DR

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

persistence_timeout 60

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

protocol TCP

real_server 192.168.136.134 80 {

#(權重)

weight 100

TCP_CHECK {

#(10秒無響應超時)

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.136.135 80 {

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}


添加完內容後: 啟動keepalived服務

systemctl start keepalived

技術分享圖片

2.其他兩臺真實機器rs的nginx服務要啟動起來

systemctl start nginx

同時也要把之前的vip清空掉:systemctl restart network


3.使用 ipvsadm -ln :可以查看到設定的VIP和兩臺rs機器

技術分享圖片

此時我們嘗試著把氣筒一臺或兩臺rs機器的nginx服務停止,可以發現

keepalived會把宕機的rs機器踢出,這樣就可以保證到,當rs真實服務器

宕機後,請求不在發送到其上。

(1)停掉rs1機器後的效果:

技術分享圖片


(2)把兩臺的rs機器都停了

技術分享圖片


當我們把rs機器再次啟動的時候,keepalived會自動的把負載的機器添加回來


!!!!使用keepalived+LVS DR需要註意的事項.

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

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

#/bin/bash

vip=192.168.136.200

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

ifdown lo

ifup lo

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up //命令行下添加ip。臨時添加,重啟失去


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上執行這些腳本


(2)在dir分發器需執行

技術分享圖片

執行:echo 1 >/proc/sys/net/ipv4/ip_forward


瀏覽器測試:

技術分享圖片

技術分享圖片




Linux集群架構(2)LVS介紹、LVS的調度算法、NAT模式搭建、 DR模式、keepalive