負載均衡叢集介紹
實作負載均衡叢集的軟體有: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 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意區分網卡名字,adai的兩個網卡分别為ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/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.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
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.136.128:80 rr
-> 192.168.3.76:80 Masq 1 0 0
-> 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
<h1>rs2:192.168.3.83</h1>
<h1>rs1:192.168.3.76</h1>
本文轉自 jiekegz 51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/2043411