LVS+Keepalived叢集
阿新 • • 發佈:2021-08-23
Keepalived工具介紹
- 專為LVS和HA設計的一款健康檢查工具
- 支援故障自動切換(Failover)
- 支援節點健康狀態檢查(Health Checking)
- 判斷LVS負載排程器、節點伺服器的可用性,當master主機出現故障及時切換到backup節點保證業務正常,當master故障主機恢復後將其重新加入群集並且業務重新切換回master節點。
- 官方網站:http://www.keepalived.org/
Keepalived實現原理剖析
Keepalived採用VRRP熱備份協議實現Linux伺服器的多機熱備功能
VRRP (虛擬路由冗餘協議)是針對路由器的一種備份解決方案
- 由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務
- 每個熱備組內同時只有一臺主路由器提供服務,其他路由器處於冗餘狀態
- 若當前線上的路由器失效,則其他路由器會根據設定的優先順序自動接替虛擬IP地址,繼續提供服務
Keepalived體系主要模組及其作用:
keepalived體系架構中主要有三個模組,分別是core, check和vrrp.- core模組:為keepalived的核心,負責主程序的啟動、維護及全域性配置檔案的載入和解析。
- vrrp模組:是來實現VRRP協議的。
- check模組:負責健康檢查,常見的方式有埠檢查及URL檢查。
--------LVS+Keepalived 高可用群集--------
主DR 伺服器: 192.168.80.10
備DR 伺服器: 192.168.80.11
Web 伺服器1: 192.168.80.20
Web 伺服器2: 192.168.80.21
NFS 伺服器: 192.168.80.30
客戶端:192.168.80.200
vip:192.168.80.100
1、配置負載排程器(主、備相同;192.168.80.10;192.168.80.11)
systemctl stop firewalld.service setenforce 0 yum -y install ipvsadm keepalived modprobe ip_vs cat /proc/net/ip_vs
(1)配置keeplived(主、備DR 伺服器上都要設定)
cd /etc/keepalived/ cp keepalived.conf keepalived.conf.bak vim keepalived.conf ...... global_defs { #定義全域性引數 --10行--修改,郵件服務指向本地 smtp_server 127.0.0.1 --12行--修改,指定伺服器(路由器)的名稱,主備伺服器名稱須不同,主為LVS_01,備為LVS_02 router_id LVS_01 } vrrp_instance VI_1 { #定義VRRP熱備例項引數 --20行--修改,指定熱備狀態,主為MASTER,備為BACKUP state MASTER --21行--修改,指定承載vip地址的物理介面 interface ens33 --22行--修改,指定虛擬路由器的ID號,每個熱備組保持一致 virtual_router_id 10 --23行--修改,指定優先順序,數值越大優先順序越高,主為100,備為99 priority 100 advert_int 1 #通告間隔秒數(心跳頻率) authentication { #定義認證資訊,每個熱備組保持一致 auth_type PASS #認證型別 --27行--修改,指定驗證密碼,主備伺服器保持一致 auth_pass abc123 } virtual_ipaddress { #指定群集vip地址 192.168.80.100 } } --36行--修改,指定虛擬伺服器地址(VIP)、埠,定義虛擬伺服器和Web伺服器池引數 virtual_server 192.168.80.100 80 { delay_loop 6 #健康檢查的間隔時間(秒) lb_algo rr #指定排程演算法,輪詢(rr) --39行--修改,指定群集工作模式,直接路由(DR) lb_kind DR persistence_timeout 50 #連線保持時間(秒) protocol TCP #應用服務採用的是 TCP協議 --43行--修改,指定第一個Web節點的地址、埠 real_server 192.168.80.10 80 { weight 1 #節點的權重 --45行--刪除,新增以下健康檢查方式 TCP_CHECK { connect_port 80 #新增檢查的目標埠 connect_timeout 3 #新增連線超時(秒) nb_get_retry 3 #新增重試次數 delay_before_retry 4 #新增重試間隔 } } real_server 192.168.80.11 80 { #新增第二個 Web節點的地址、埠 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } ##刪除後面多餘的配置## } systemctl start keepalived ip addr show dev ens33 #檢視虛擬網絡卡vip
(2)配置分發策略(#keepalived配置好後,可以不用再配ipvsadm 分發策略)
ipvsadm-save > /etc/sysconfig/ipvsadm systemctl start ipvsadm ipvsadm -C ipvsadm -A -t 192.168.80.100:80 -s rr ipvsadm -a -t 192.168.80.100:80 -r 192.168.80.20:80 -g ipvsadm -a -t 192.168.80.100:80 -r 192.168.80.21:80 -g ipvsadm ipvsadm -ln ipvsadm-save > /etc/sysconfig/ipvsadm #如果沒有vip的分發策略。則重啟keepalived 服務
(3)調整核心 proc 響應引數,關閉linux核心的重定向引數響應
vim /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 sysctl -p
2、部署共享儲存(NFS伺服器:192.168.80.30)
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 yum install nfs-utils rpcbind -y systemctl start nfs.service systemctl start rpcbind.service systemctl enable nfs.service systemctl enable rpcbind.service mkdir /opt/accp /opt/benet chmod 777 /opt/accp /opt/benet vim /etc/exports /usr/share *(ro,sync) /opt/accp 192.168.80.0/24(rw,sync) /opt/benet 192.168.80.0/24(rw,sync) --釋出共享--- exportfs -rv
3、配置節點伺服器(192.168.80.20;192.168.80.21)
systemctl stop firewalld setenforce 0 yum -y install httpd systemctl start httpd vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.80.100 NETMASK=255.255.255.255 service network restart
或
systemctl restart network ifup lo:0 ifconfig lo:0 route add -host 192.168.80.100 dev lo:0 vim /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 sysctl -p --192.168.80.20--- mount.nfs 192.168.80.30:/opt/accp /var/www/html --192.168.80.21--- mount.nfs 192.168.80.30:/opt/benet /var/www/html
4、測試驗證
在客戶端訪問 http://192.168.80.100/ ,預設閘道器指向 192.168.80.100
再在主伺服器關閉 keepalived 服務後在測試,systemctl stop keepalived