1. 程式人生 > >Centos7搭建lvs+keepalive負載均衡集群

Centos7搭建lvs+keepalive負載均衡集群

iptable sad 集成 c-c++ ++ 分布式部署 版本 2.4 最大

keepalived簡介

keepalived是分布式部署解決系統高可用的軟件,結合lvs(LinuxVirtual Server)使用,解決單機宕機的問題。

keepalived是一個基於VRRP協議來實現IPVS的高可用的解決方案。對於LVS負載均衡來說,如果前端的調度器direct發生故障,則後端的realserver是無法接受請求並響應的。因此,保證前端direct的高可用性是非常關鍵的,否則後端的服務器是無法進行服務的。而我們的keepalived就可以用來解決單點故障(如LVS的前端direct故障)問題。keepalived的主要工作原理是:運行keepalived的兩臺服務器,其中一臺為MASTER,另一臺為BACKUP,正常情況下,所有的數據轉換功能和ARP請求響應都是由MASTER完成的,一旦MASTER發生故障,則BACKUP會馬上接管MASTER的工作,這種切換時非常迅速的。

LVS簡介

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統,LVS工作在ISO模型中的第四層,由於其工作在第四層,因此與iptables類似,必須工作在內核空間上。因此lvs與iptables一樣,是直接工作在內核中的,叫ipvs,主流的linux發行版默認都已經集成了ipvs,因此用戶只需安裝一個管理工具ipvsadm即可。

IPVS中實現了三種負載均衡技術:

1、VS/NAT --- Virtual Server via Network Address Translation

通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端真實服務器;真實服務器的響應報文通過調度器時,報文源地址被重寫再返回給客戶,完成整個負載調度過程。但通常在流量比較大的情況下會造成調度器的瓶頸。因為服務數據的返回必須通過調度器出去。

2、VS/TUN --- Virtual Server via IP Tunneling

采用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為了解決這個問題,調度器 把請求報文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,采用 VS/TUN技術後,集群系統的最大吞吐量可以提高10倍。但是目前支持TUN 只有Linux系統

3、VS/DR --- Virtual Server via Direct Routing

VS/DR通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術 可極大地提高集群系統的伸縮性。這種方法沒有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連在同一物理網段上。也就是說,在這種結構中,數據從外部到內部真實服務器的訪問會通過調度器進來,但是真實服務器對其的應答不是通過調度器出去。 即在大多數情況下,真實服務器可以通過各自的網關或者專用的網關對數據進行外發,從而降低調度器負載。

LVS優點:

1、抗負載能力強

因為lvs工作方式的邏輯是非常之簡單,而且工作在網絡4層僅做請求分發之用,沒有流量,所以在效率上基本不需要太過考慮。在我手裏的 lvs,僅僅出過一次問題:在並發最高的一小段時間內均衡器出現丟包現象,據分析為網絡問題,即網卡或linux2.4內核的承載能力已到上限,內存和 cpu方面基本無消耗。

2、配置性低

這通常是一大劣勢,但同時也是一大優勢,因為沒有太多可配置的選項,所以除了增減服務器,並不需要經常去觸碰它,大大減少了人為出錯的幾率。

3、工作穩定

因為其本身抗負載能力很強,所以穩定性高也是順理成章,另外各種lvs都有完整的雙機熱備方案,所以一點不用擔心均衡器本身會出什麽問題,節點出現故障的話,lvs會自動判別,所以系統整體是非常穩定的。

4、無流量

上面已經有所提及了。lvs僅僅分發請求,而流量並不從它本身出去,所以可以利用它這點來做一些線路分流之用。沒有流量同時也保住了均衡器的IO性能不會受到大流量的影響。

5、基本上能支持所有應用

因為lvs工作在4層,所以它可以對幾乎所有應用做負載均衡,包括http、數據庫、聊天室等等。

註:LVS需要手工動態增加命令,所以需要Keepalived來實現自動配合。

Lvs+keepalive負載均衡架構

技術分享圖片

實驗環境

系統版本:centos7x3.10.0-514.el7.x86_64

Keepalived版本:keepalived.x86_64 0:1.3.5-6.el7(yum)

Lvs版本:ipvsadm-1.27-7.el7(yum)

Nginx版本:nginx-1.14.0

關閉防火墻並禁止開機自啟

systemctl stop firewalld.service
systemctl disable firewalld

關閉selinux

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/sysconfig/selinux

重啟 reboot

安裝Keepalived+Lvs的master主機

IP:192.168.152.170
主要組件: keepalived lvs(ipvsadm)
主要依賴包: gcc openssl openssl-devel

1、安裝master組件和依賴包

yum -y install keepalived ipvsadm gcc openssl openssl-devel

2、備份keepalived配置文件

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

3、編輯keepalived配置文件

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
router_id lvs_clu_1
}
virrp_sync_group Prox {
group {
mail
}
}
vrrp_instance mail {
state MASTER
interface ens33
lvs_sync_daemon_interface ens33
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.152.100
}
}
virtual_server 192.168.152.100 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.152.168 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.152.169 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

技術分享圖片
技術分享圖片

4、開啟路由轉發

1)添加配置文件

echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf

2)刷新配置

sysctl –p

5、重啟keepalived服務並設置開機自啟

1)重啟keepalived

systemctl restart keepalived

2)開機自啟keepalived

systemctl enable keepalived

註:如果服務啟動不起來,並報錯/usr/lib64/perl5/CORE/libperl.so: file too short,那就必須先升級perl,然後在重新安裝這些步驟哦!

6、查看服務

ipvsadm -l
技術分享圖片

安裝Keepalived+Lvs的backup主機

IP:192.168.152.91
主要組件: keepalived lvs(ipvsadm)
主要依賴包: gcc openssl openssl-devel

1、安裝master組件和依賴包

yum -y install keepalived ipvsadm gcc openssl openssl-devel

2、備份keepalived配置文件

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

3、編輯keepalived配置文件

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
router_id lvs_clu_1
}
virrp_sync_group Prox {
group {
mail
}
}
vrrp_instance mail {
state backup
interface ens33
lvs_sync_daemon_interface ens33
virtual_router_id 50
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.152.100
}
}
virtual_server 192.168.152.100 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.152.168 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.152.169 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

技術分享圖片
技術分享圖片

4、開啟路由轉發

1)添加配置文件

echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf

2)刷新配置

sysctl –p

5、重啟keepalived服務並設置開機自啟

1)重啟keepalived

systemctl restart keepalived

2)開機自啟keepalived

systemctl enable keepalived

註:如果服務啟動不起來,並報錯/usr/lib64/perl5/CORE/libperl.so: file too short,那就必須先升級perl,然後在重新安裝這些步驟哦!

6、查看服務

ipvsadm -l
技術分享圖片

安裝web1和web2的主機

web1的IP:192.168.152.168
web2的IP:192.168.152.169
主要組件:nginx
主要依賴包:gcc gcc-c++ pcre pcre-devel zlib zlib-devel

1、安裝web1的依賴包

yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel

2、下載nginx壓縮包到服務器

wget https://nginx.org/download/nginx-1.14.0.tar.gz

3、安裝nginx

1)解壓nginx壓縮包

tar zxf nginx-1.14.0.tar.gz

2)進入解壓目錄

cd nginx-1.14.0

3)配置nginx

./configure
技術分享圖片

4)編譯安裝nginx

make && make install
技術分享圖片

4、編寫nginx啟動腳本

vi /etc/init.d/nginx

註:腳本太長這裏就不寫了,可以訪問nginx啟動腳本查看!

5、給予啟動腳本執行權限

chmod +x /etc/init.d/nginx

6、啟動nginx服務

1)設置開機自啟

chkconfig nginx on

2)啟動nginx

/etc/init.d/nginx start

3)重啟nginx

/etc/init.d/nginx restart

4)查看nginx服務啟動狀態

chkconfig --list

5)查看nginx服務是否開啟

netstat -antupl | grep nginx

7、修改內核參數

vi /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.ip_forward = 0

技術分享圖片

8、添加虛擬IP地址

vi /etc/sysconfig/network-scripts/ifcfg-lo

TYPE=Ethernet
OTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.152.100
NETMASK=255.255.255.255

技術分享圖片

9、添加路由

1)臨時添加

routeadd -host 192.168.152.100 dev lo:0

2)永久添加

vi /etc/sysconfig/network-scripts/route-lo:0

193.192.168.152.100 dev lo:0

註:我這裏不用添加,因為我用的IP為同一網段所以不添加也行!

實驗性能測試

1、先測試高可用性能,首先將keepalived的master主機關閉,看看虛擬IP是否自跳轉到keepalived的backup主機上。

2、測試負載均衡性能,首先將其中web的master主機關閉,繼續訪問是否能訪問到web的backup主機,如果可以說明沒問題。

3、同時測試高可用和負載均衡,如果當lvs的master主機宕機,自動跳到lvs的backup主機,訪問web,同時將後端web的master主機幹掉,看看訪問是否正常。

Centos7搭建lvs+keepalive負載均衡集群