天天看點

負載均衡叢集介紹、LVS介紹、LVS排程算法、LVS NAT模式搭建

負載均衡叢集介紹

實作負載均衡叢集的軟體有:LVS、Keepalived、Nginx、haproxy等。其中LVS屬于四層(網絡OSI模型);Nginx屬于七層;haproxy既可以認為是四層,也可以當做是七層使用。

LVS、haproxy這種四層負載均衡可以分發除80端口以外的通信,如MySQL-3306;而Nginx僅僅支援http,https,mail。

Keepalived工作在TCP/IP 參考模型的 三層、四層、五層,也就是分别為:網絡層,傳輸層和應用層

LVS介紹

LVS是基于tcp/ip做的路由和轉發,穩定性和效率很高,LVS最新版本是基于Linux核心2.6。LVS常見的模式有三種:NAT、DR、IP Tunnel。LVS架構中有一個核心角色叫分發器(Load Balance),用于分發客戶的各種請求,另外還有諸多伺服器(real server,簡稱rs),用于處理使用者各種請求。

NAT模式:

<a href="https://s5.51cto.com/oss/201711/22/55a02d96f5ea4668298c44342ef0975f.png-wh_500x0-wm_3-wmp_4-s_830382624.png" target="_blank"></a>

原理:這種模式借助iptables的nat表來實作

使用者的請求到分發器後,通過預設的iptables規則,把請求的資料包轉發到後端的rs上去,

rs需要設定網關為分發器的内網ip

使用者請求的資料包和傳回給使用者的資料包全部經過分發器,是以分發器成為瓶頸

在nat模式中,隻需要分發器有公網ip即可,是以比較節省公網ip資源

在該模式中,load balancer(負載均衡)是限制該架構處理使用者請求的一個瓶頸,是以該模式比較适合小模式的叢集(伺服器rs在10台以内);該模式的優勢是節省公網資源。

IP Tunnel模式

<a href="https://s1.51cto.com/oss/201711/22/6ed830d646c651f1cf3acb23e934fa67.png-wh_500x0-wm_3-wmp_4-s_489703728.png" target="_blank"></a>

這種模式,需要有一個公共的IP配置在分發器和所有rs上,我們把它叫做vip

用戶端請求的目标IP為vip,分發器接收到請求資料包後,會對資料包做一個加工,會把目标IP改為rs的IP,這樣資料包就到了rs上

rs接收資料包後,會還原原始資料包,這樣目标IP為vip,因為所有rs上配置了這個vip,是以rs直接傳回給客戶,不需經過分發器

DR模式

<a href="https://s1.51cto.com/oss/201711/22/681182e33542099b157fe3700ed78da0.jpg-wh_500x0-wm_3-wmp_4-s_1434644420.jpg" target="_blank"></a>

這種模式,也需要有一個公共的IP配置在分發器和所有rs上,也就是vip

和IP Tunnel不同的是,它會把資料包的MAC位址修改為rs的MAC位址

LVS排程算法

輪詢 Round-Robin rr

權重輪詢 Weight Round-Robin wrr

最小連接配接 Least-Connection lc

            #算法是把新的連接配接請求配置設定到目前連接配接數最小的伺服器。最小連接配接排程是一種動态排程算法,它通過伺服器目前所活躍的連接配接數來估計伺服器的負載情況。排程器需要記錄各個伺服器已建立連接配接的數目,當一個請求被排程到某台伺服器,其連接配接數加1;當連接配接中止或逾時,其連接配接數減一。 

權重最小連接配接 Weight Least-Connection wlc

基于局部性的最小連接配接 Locality-Based Least Connections lblc

帶複制的基于局部性最小連接配接 Locality-Based Least Connections with Replication lblcr

目标位址散列排程 Destination Hashing dh

源位址散列排程 Source Hashing sh

常用的是前面四種算法。

LVS NAT模式搭建

三台機器。

分發器(排程器director)

内網:192.168.3.74 外網:192.168.136.128

添加一個網卡:

完成後:輸入ip a檢視網卡

ping 下192.168.136.128是否可以在window下ssh連接配接

real server1(real1)

内網:192.168.3.76 設定網關為: 192.168.3.74

real server2(real2)

内網:192.168.3.83 設定網關為:  192.168.3.74

在分發器上操作:

[root@centos7 ~]# systemctl stop firewalld

[root@centos7 ~]# systemctl disable firewalld

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

[root@centos7 ~]# setenforce 0

setenforce: SELinux is disabled

在rs1、rs2上操作:

說明: 進行該設定的原因是NAT模式是基于防火牆nat表的一種模式,是以會使用iptables規則。

[root@test ~]# iptables -F

[root@test ~]# service iptables save

配置分發器:

1、[root@centos7 ~]# yum install -y ipvsadm

2、配置ipvsadm腳本:

[root@centos7 local]# vi /usr/local/sbin/lvs_nat.sh

echo 0 &gt; /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 &gt; /proc/sys/net/ipv4/conf/default/send_redirects

# 注意區分網卡名字,adai的兩個網卡分别為ens33和ens37

echo 0 &gt; /proc/sys/net/ipv4/conf/eno16777736/send_redirects

echo 0 &gt; /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.3.0/24  -j MASQUERADE

# director設定ipvsadm規則

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C

#-C=clear,清除規則

$IPVSADM -A -t 192.168.136.128:80 -s rr

#-A:=add,添加規則;-t:=tcp;-s 指定算法;

#在此可以添加-p:指定逾時時間(解決session問題:保證同一請求被分發到同一rs上)

#因為添加-p選項後會影響測試效果,是以在此不加該參數(注:時間不能設定為0)

$IPVSADM -a -t 192.168.136.128:80 -r 192.168.3.76:80 -m -w 1

$IPVSADM -a -t 192.168.136.128:80 -r 192.168.8.83:80 -m -w 1

#-a:=add,增加nat架構中的rs;-r:指定rs的IP;-m:指定LVS模式為NAT(masquerade)

#-w:=weight,指定權重

[root@centos7 local]# sh /usr/local/sbin/lvs_nat.sh

#沒有任何輸出,表示執行成功,可以用echo $?檢視

[root@centos7 local]#  ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.136.128:80 rr

  -&gt; 192.168.3.76:80                  Masq         1           0                 0         

  -&gt; 192.168.8.83:80                  Masq         1           0                 0 

配置rs

1、在兩台rs上安裝Nginx,并分别設定其首頁用來區分兩台機器。

2、将rs1、rs2的網關指向192.168.3.74上

[root@test ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=192.168.3.74

通路:

輪詢:

[root@centos7 ~]# curl 192.168.136.128

&lt;h1&gt;rs2:192.168.3.83&lt;/h1&gt;

&lt;h1&gt;rs1:192.168.3.76&lt;/h1&gt;

本文轉自 jiekegz  51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/2043411

繼續閱讀