常用的負載均衡開源軟體有: nginx、lvs、keepalived
商業的硬體負載裝置: F5、Netscale
1. LB、LVS介紹LB叢集是load balance 叢集的簡寫,翻譯成中文就是負載均衡叢集
LVS是一個實作負載均衡叢集的開源軟體項目
LVS架構從邏輯上可分為排程層(Director)、server叢集層(Real server)和共享存儲層
LVS的三種工作模式:
1.NAT模式-網絡位址轉換
2.TUN模式-- (tunneling)客戶把請求封裝成IP
3.DR模式(直接路由模式)請求資料的MAC位址
2. LVS/NAT 配置
三台伺服器一台作為director, 兩台作為real server
Director 有一個外網ip (192.168.31.166) 和一個内網ip(192.168.21.166), 兩個real server上隻有内網ip(192.168.21.100)和(192.168.21.101) 并且需要把兩個real server的内網網關設定為director的内網ip(192.168.21.166)
兩個real server 上都安裝httpd: yum install -y nginx
Director上安裝ipvsadm yum install -y ipvsadm
Direcotr 上 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
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
# director 設定nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.21.0/24 -j MASQUERADE
# director設定ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.31.166:80 -s lc -p 300
$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1
$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.101:80 -m -w 1
直接運作這個腳本就可以完成lvs/nat的配置了:
/bin/bash /usr/local/sbin/lvs_nat.sh
<a href="http://s1.51cto.com/wyfs02/M02/87/BE/wKiom1fgU9eQM6YkAAAeBJwPZ3U860.png" target="_blank"></a>
倆台客戶機分别啟動nginx: /etc/init.d/nginx start
通過浏覽器測試兩台機器上的web内容,為了區分開,我們可以把nginx的預設頁修改一下:
rs1上: echo "rs1rs1" >/usr/share/nginx/html/index.html
rs2上: echo "rs2rs2" >/usr/share/nginx/html/index.html
real server
<a href="http://s4.51cto.com/wyfs02/M01/87/BB/wKioL1fgVAmyGL-8AAAgrXmyO6U398.png" target="_blank"></a>
re-server (倆台内網IP,外網不要)
Dicr 一個内網,一個外網
3. LVS/DR 配置
三台機器:
director(eth0192.168.31.166, vip eth0:0: 192.168.31.110)
real server1(eth0 rip: 192.168. 31.100, vip lo:0: 192.168.31.110)
real server2(eth0 rip: 192.168.31.101, vip lo:0: 192.168.31.110)
Director 上 vim /usr/local/sbin/lvs_dr.sh //增加
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.31.110
rs1=192.168.31.100
rs2=192.168.31.101
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$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
不用安裝 ipvsadm
兩台rs上:vim /usr/local/sbin/lvs_dr_rs.sh
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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
然後director上執行: bash /usr/local/sbin/lvs_dr.sh
兩台rs上執行: bash /usr/local/sbin/lvs_dr_rs.sh
Windows下浏覽器測試通路
<a href="http://s1.51cto.com/wyfs02/M01/87/BB/wKioL1fgVEejyr8XAAASAlLmSYo485.png" target="_blank"></a>
vip都是虛拟出來的網卡
<a href="http://s5.51cto.com/wyfs02/M00/8B/C6/wKiom1hYPvXSRLP3AAAhVx_R0Qk634.png" target="_blank"></a>
4. LVS/DR + keepalived配置
<a href="http://s5.51cto.com/wyfs02/M02/87/BE/wKiom1fgVHbQ5ptyAAAEX1H9DUg312.png" target="_blank"></a>
注意:前面雖然我們已經配置過一些操作,但是下面我們使用keepaliave操作和之前的操作是有些沖突的,是以若是之前配置過DR,請首先做如下操作:dr上執行:
ifconfig eth0:0 down
前面的lvs雖然已經配置成功也實作了負載均衡,但是我們測試的時候發現,當某台real server把httpd程序停掉,那麼director照樣會把請求轉發過去,這樣就造成了某些請求不正常。是以需要有一種機制用來檢測real server的狀态,這就是keepalived。它的作用除了可以檢測rs狀态外,還可以檢測備用director的狀态,也就是說keepalived可以實作ha叢集的功能,當然了也需要一台備用director.
備用director也需要安裝一下keepalived軟體
yum install -y keepalived
安裝好後,編輯配置檔案
vim /etc/keepalived/keepalived.conf //加入如下:
vrrp_instance VI_1 {
state MASTER #備用伺服器上為 BACKUP
interface eth0
virtual_router_id 51
priority 100 #備用伺服器上為90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.110
}
virtual_server 192.168.31.110 80 {
delay_loop 6 #(每隔10秒查詢realserver狀态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的連接配接60秒内被配置設定到同一台realserver)
protocol TCP #(用TCP協定檢查realserver狀态)
real_server 192.168.31.100 80 {
weight 100 #(權重)
TCP_CHECK {
connect_timeout 10 #(10秒無響應逾時)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
real_server 192.168.31.101 80 {
weight 100
connect_timeout 10
}
以上為主director的配置檔案,從director的配置檔案隻需要修改
state MASTER -> state BACKUP
priority 100 -> priority 90
配置完keepalived後,需要開啟端口轉發(主從都要做):
然後,兩個rs上執行 /usr/local/sbin/lvs_dr_rs.sh 腳本
最後,兩個director上啟動keepalived服務(先主後從):
/etc/init.d/keepalived start
另外,需要注意的是,啟動keepalived服務會自動生成vip和ipvsadm規則,不需要再去執行上面提到的/usr/local/sbin/lvs_dr.sh 腳本。
停掉主上的keepalived ,看從上的是不是有以下的
<a href="http://s3.51cto.com/wyfs02/M00/87/BE/wKiom1fgVKWTd9QsAABTPk_k3mM393.png" target="_blank"></a>
本文轉自 15816815732 51CTO部落格,原文連結:http://blog.51cto.com/68686789/1854289