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

keepalived簡介

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

keepalived是一個基於VRRP協議來實現IPVS的高可用的解決方案。對於LVS負載均衡來講,若是前端的調度器direct發生故障,則後端的realserver是沒法接受請求並響應的。所以,保證前端direct的高可用性是很是關鍵的,不然後端的服務器是沒法進行服務的。而咱們的keepalived就能夠用來解決單點故障(如LVS的前端direct故障)問題。keepalived的主要工做原理是:運行keepalived的兩臺服務器,其中一臺爲MASTER,另外一臺爲BACKUP,正常狀況下,全部的數據轉換功能和ARP請求響應都是由MASTER完成的,一旦MASTER發生故障,則BACKUP會立刻接管MASTER的工做,這種切換時很是迅速的。linux

LVS簡介

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

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

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

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

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

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

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

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

LVS的負載調度算法

針對不一樣的網絡服務和配置須要,LVS調度器提供多種不一樣的負載調度算法,其中最經常使用的四種算法包括輪詢、加權輪詢、最少鏈接和加權最少鏈接。數據庫

一、輪詢( RoundRobin):

將收到的訪問請求按照順序輪流分配給羣集中的各節點(真實服務器)。後端

二、加權輪詢( WeightedRoundRobin):

根據真實服務器的處理能力輪流分配收到的訪問請求,調度器能夠自動查詢各節點的負載狀況,並動態調整其權重。這樣能夠保證處理能力強的服務器承擔更多的訪問流量。centos

三、最少鏈接( LeastConnections):

根據真實服務器已創建的鏈接數進行分配,將收到的訪問請求優先分配給鏈接數最少的節點。服務器

四、加權最少鏈接(WeightedLeastConnections):

在服務器節點的性能差別較大的狀況下,能夠爲真實服務器自動調整權重,權重較高的節點將承擔更大比例的活動鏈接負載。

LVS優勢:

一、抗負載能力強

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

二、配置性低

這一般是一大劣勢,但同時也是一大優點,由於沒有太多可配置的選項,因此除了增減服務器,並不須要常常去觸碰它,大大減小了人爲出錯的概率。

三、工做穩定

由於其自己抗負載能力很強,因此穩定性高也是瓜熟蒂落,另外各類lvs都有完整的雙機熱備方案,因此一點不用擔憂均衡器自己會出什麼問題,節點出現故障的話,lvs會自動判別,因此係統總體是很是穩定的。

四、無流量

上面已經有所說起了。lvs僅僅分發請求,而流量並不從它自己出去,因此能夠利用它這點來作一些線路分流之用。沒有流量同時也保住了均衡器的IO性能不會受到大流量的影響。

五、基本上能支持全部應用

由於lvs工做在4層,因此它能夠對幾乎全部應用作負載均衡,包括http、數據庫、聊天室等等。

注:LVS須要手工動態增長命令,因此須要Keepalived來實現自動配合。

Lvs+keepalive負載均衡架構

Centos7搭建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

一、安裝master組件和依賴包

yum -y install keepalived ipvsadm gcc openssl openssl-devel

二、備份keepalived配置文件

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

三、編輯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
}
}
}

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

四、開啓路由轉發

1)添加配置文件

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

2)刷新配置

sysctl –p

五、重啓keepalived服務並設置開機自啓

1)重啓keepalived

systemctl restart keepalived

2)開機自啓keepalived

systemctl enable keepalived

注:若是服務啓動不起來,並報錯/usr/lib64/perl5/CORE/libperl.so: file too short,那就必須先升級perl,而後在從新安裝這些步驟哦!

六、查看服務

ipvsadm -l
Centos7搭建lvs+keepalive負載均衡集羣

安裝Keepalived+Lvs的backup主機

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

一、安裝master組件和依賴包

yum -y install keepalived ipvsadm gcc openssl openssl-devel

二、備份keepalived配置文件

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

三、編輯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
}
}
}

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

四、開啓路由轉發

1)添加配置文件

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

2)刷新配置

sysctl –p

五、重啓keepalived服務並設置開機自啓

1)重啓keepalived

systemctl restart keepalived

2)開機自啓keepalived

systemctl enable keepalived

注:若是服務啓動不起來,並報錯/usr/lib64/perl5/CORE/libperl.so: file too short,那就必須先升級perl,而後在從新安裝這些步驟哦!

六、查看服務

ipvsadm -l
Centos7搭建lvs+keepalive負載均衡集羣

安裝web1和web2的主機

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

一、安裝web1的依賴包

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

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

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

三、安裝nginx

1)解壓nginx壓縮包

tar zxf nginx-1.14.0.tar.gz

2)進入解壓目錄

cd nginx-1.14.0

3)配置nginx

./configure
Centos7搭建lvs+keepalive負載均衡集羣

4)編譯安裝nginx

make && make install
Centos7搭建lvs+keepalive負載均衡集羣

四、編寫nginx啓動腳本

vi /etc/init.d/nginx

注:腳本太長這裏就不寫了,能夠訪問nginx啓動腳本查看!

五、給予啓動腳本執行權限

chmod +x /etc/init.d/nginx

六、啓動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

七、修改內核參數

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

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

八、添加虛擬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

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

九、添加路由

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爲同一網段因此不添加也行!

實驗性能測試

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

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

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

相關文章
相關標籤/搜索