集群高可用之lvs+keepalive


集群高可用之lvs+keepalive

keepalive簡介

負載均衡架構依賴於知名的IPVS內核模塊,keepalive由一組檢查器根據服務器的健康情況動態維護和管理服務器池。keepalive通過VRRP協議實現高可用架構。VRRP是路由災備的實現基礎。

LVS核心是調度器,所有的數據請求需要經過調度器進行調度轉發。萬一調度器發生故障,整個集群系統全部崩潰,所以需要keepalive實現集群系統的高可用。

部署兩台或多台lvs調度器,僅有一台調度器做主服務器,其他為備用。當主發生故障后,keepalive可以自動將備用調度器作為主,實現整個集群系統的高負載,高可用

VRRP協議介紹

VRRP協議是為消除在靜態缺省路由環境下的缺省路由器單點故障引起的網絡失效而設計的主備模式的協議,使得在發生故障而進行設備功能切換時可以不影響內外數據通信,不需要再修改內部網絡的網絡參數。VRRP協議需要具有IP地址備份,優先路由選擇,減少不必要的路由器間通信等功能。

VRRP協議將兩台或多台路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或多個),而在路由器組內部,如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER,或者是通過算法選舉產生,MASTER實現針對虛擬路由器IP的各種網絡功能,如ARP請求,ICMP,以及數據的轉發等;其他設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。當主機失效時,BACKUP將接管原先MASTER的網絡功能。

配置VRRP協議時需要配置每個路由器的虛擬路由器ID(VRID)和優先權值,使用VRID將路由器進行分組,具有相同VRID值的路由器為同一個組,VRID是一個0~255的正整數;同一組中的路由器通過使用優先權值來選舉MASTER,優先權大者為MASTER,優先權也是一個0~255的正整數。

有一種特殊情況,將虛擬路由IP地址設置為多台路由設備中某台設備的真實ip地址,該路由設備將永遠處於主設備狀態。

本例用centos7服務器

keepalived 搭建

yum -y install gcc openssl-devel popt-devel libnl libnl-devel kernel-devel ipvsadm
cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar -xzf keepalived-1.2.7.tar.gz 
cd keepalived-1.2.7/
./configure
make && make install
ln -s /usr/local/etc/keepalived/ /etc 
ln -s /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/

 

 

 

 

配置圖如上:

配置如下:

web1,web2 的操作

nginx1的操作
vim /etc/sysconfig/network-scripts/ifcfg-eno16
DEVICE=eno16
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.30
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

vim /etc/sysctl.conf
net.ipv4.conf.eno16.arp_ignore = 1
net.ipv4.conf.eno16.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce =2

sysctl -p
systemctl restart network
echo "192.168.1.100" > /usr/local/nginx/conf/html/index.html
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload


nginx2的操作
vim /etc/sysconfig/network-scripts/ifcfg-eno16
DEVICE=eno16
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.40
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

vim /etc/sysctl.conf
net.ipv4.conf.eno16.arp_ignore = 1
net.ipv4.conf.eno16.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce =2

sysctl -p
systemctl restart network
echo "192.168.1.40" > /usr/local/nginx/conf/html/index.html
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

 調度器lvs1和lvs2的配置

lvs1的配置
vim /etc/sysconfig/network-scripts/ifcfg-eno16 DEVICE=eno16 BOOTPROTO=statci ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.10 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 systemctl restart network yum -y install keepalived ipvsadm
將lvs1設置為主,lvs2設置為備,保證其中一台調度器出現故障后,另一台可以及時。
自動激活替換損壞的故障設備。在該配置文件中添加虛擬服務,
並為該虛擬服務添加后端真實web服務器組和相應的調度算法。
vi
/etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { test@gmail.com } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lvs1 } vrrp_instance LVS_HA { state MASTER #lvs_2為備用 interface eno16 virtual_router_id 60 #lvs_2的VRID必須與lvs_1相同 priority 100 #在相同的VRID組中優先級高者為主設備 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.1/24 } } virtual_server 192.168.0.1 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.30 80 { weight 1 TCP_CHECK { connetct_timeout 20 connect_port 80 nb_get_retry 3 } } real_server 192.168.1.40 80 { weight 1 TCP_CHECK { connetct_timeout 20 connect_port 80 nb_get_retry 3 } }
}
systemctl start keepalived
systemctl enable keepalived
ip addr show
ipvsadm -Ln
firewall-cmd --set-default-zone=trusted

同理在上面配置lvs2

更改下網卡信息

vim /etc/keepalived/keepalived.conf

router_id lvs_2和priority 50

 

在軟路由上配置ip省略。

省略ip的配置
systemctl restart  network
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
因為使用的是Linux的軟路由,下面需要使用iptables實現NAT地址轉發功能,
實現內網和外網的數據通信
iptables -t nat -I PREPOUTING -d 124.126.147.168 -p tcp \
-dport 80 \ -j DNAT --to-destination 192.168.1.100:80

iptables -t nat -I POSTROUTING -S 192.168.1.0/24 -P tcp \
-j SNAT --to-source 124.126.147.168

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

sysctl -p
客戶端驗證:http://124.126.147.168,可以得到不同real server的響應數據包

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM