一.Keepalived概述
- Keepalived起初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能-----判斷LVS負載調度器,節點服務器的可用性,及時隔離并替換為新的服務器,當故障主機恢復后將其重新加入群集中
- Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,并將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常后Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。
?
1.1Keepalived的工作原理
Keepalived 是一個基于VRRP協議來實現的LVS服務高可用方案,可以解決靜態路由出現的單點故障問題。
在一個LVS服務集群中通常有主服務器(MASTER)和備份服務器(BACKUP)兩種角色的服務器,但是對外表現為一個虛擬IP,主服務器會發送VRRP通告信息給備份服務器,當備份服務器收不到VRRP消息的時候,即主服務器異常的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。
?
1.2Keepalived體系主要模塊及其作用
?? keepalived體系架構中主要有三個模塊,分別是core、check和vrrp。
- core模塊:為keepalived的核心,負責主進程的啟動、維護及全局配置文件的加載和解析。
- vrrp模塊:是來實現VRRP協議的。
- check模塊:負責健康檢查,常見的方式有端口檢查及URL檢查。
1.3?VRRP (虛擬路由冗余協議)
vrrp會把多臺路由器組成一個虛擬路由組vrid,VRRP會生成一個虛擬路由(包含虛擬IP和虛擬MAC,局域網內用戶不關心哪個是主哪個是備,他們只用虛擬路由器的的虛擬IP作為他們的網關)實際上虛擬IP是承載再master路由器,也就是說實際的數據通過master進行轉發,backup是通過優先級來決定哪個是master路由,優先級最大的那臺就是master,backup只是用來監聽master定時發來的vrrp報文,如果超時未收到master發來的vrrp報文 backup就會搶占master 虛擬IP也就會一漂移到backup上
?
二、LVS負載均衡之--Keepalived模式實例部署
部署準備
主服務器:192.168.50.22? ? ?虛擬VIP:192.168.50.23
備服務器:192.168.50.41
Web服務器1:192.168.50.56
Web服務器2:192.168.50.57
?部署主服務器配置(192.168.50.22)
必須執行操作
1.#關閉防火墻
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0[root@localhost keepalived]# modprobe ip_vs
[root@localhost keepalived]# cat /proc/net/ip_vs2.#安裝Keepalived服務
[root@localhost ~]# yum -y install ipvsadm keepalived
3.#備份keeplived.conf文件
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# ls
4.#修改配置keeplived.conf文件
[root@localhost keepalived]# vim keepalived.conf
--10行--修改,郵件服務指向本地
? smtp_server 127.0.0.1--12行--修改,指定服務器(路由器)的名稱,主備服務器名稱須不同,主為LVS_01,備為LVS_02
? router_id LVS_01
--14行--注釋掉,取消嚴格遵守VRRP協議功能,否則VIP無法被連接
? ?#vrrp_strict
vrrp_instance VI_1 { ? ? ? ? ? ? ? ?#定義VRRP熱備實例參數
--20行--修改,指定熱備狀態,主為MASTER,備為BACKUP
? ? state MASTER
--21行--修改,指定承載vip地址的物理接口
? ? interface ens33
--22行--修改,指定虛擬路由器的ID號,每個熱備組保持一致 ? ?
? ? virtual_router_id 10
? ? #nopreempt ? ? ? ?#如果設置非搶占模式,兩個節點state必須為bakcup,并加上配置 nopreempt
--23行--修改,指定優先級,數值越大優先級越高,這里設置主為100,備為90
? ? priority 100
? ? advert_int 1 ? ? ? ? ? ? ? ? ? ?#通告間隔秒數(心跳頻率)
? ? authentication { ? ? ? ? ? ? ? ?#定義認證信息,每個熱備組保持一致
? ? ? ? auth_type PASS ? ? ? ? ? ? ? ?#認證類型
--27行--修改,指定驗證密碼,主備服務器保持一致
? ? ? ? auth_pass 123
? ? }
? ? virtual_ipaddress { ? ? ? ? ? ? ? ?#指定群集vip地址
? ? ? ? 192.168.50.23
? ? }
}--36行--修改,指定虛擬服務器地址(VIP)、端口,定義虛擬服務器和Web服務器池參數
virtual_server 192.168.50.23?80 {
? ? delay_loop 6 ? ? ? ? ? ? ? ? ? ?#健康檢查的間隔時間(秒)
? ? lb_algo rr ? ? ? ? ? ? ? ? ? ? ? ?#指定調度算法,輪詢(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
? ? lb_kind DR
? ? persistence_timeout 0 ? ? ? ? ? ?#連接保持時間(秒)
? ? protocol TCP ? ? ? ? ? ? ? ? ? ?#應用服務采用的是 TCP協議
--43行--修改,指定第一個Web節點的地址、端口
? ? real_server 192.168.50.56?80 {
? ? ? ? weight 1 ? ? ? ? ? ? ? ? ? ?#節點的權重
--45行--刪除,添加以下健康檢查方式 ? ? ? ?
? ? ? ? TCP_CHECK {
? ? ? ? ? ? connect_port 80 ? ? ? ? ? ?#添加檢查的目標端口
? ? ? ? ? ? connect_timeout 3 ? ? ? ?#添加連接超時(秒)
? ? ? ? ? ? nb_get_retry 3 ? ? ? ? ? ?#添加重試次數
? ? ? ? ? ? delay_before_retry 3 ? ?#添加重試間隔
? ? ? ? }
? ? }? ? real_server 192.168.50.57?80 { ? ? ? ?#添加第二個 Web節點的地址、端口
? ? ? ? weight 1
? ? ? ? TCP_CHECK {
? ? ? ? ? ? connect_port 80
? ? ? ? ? ? connect_timeout 3
? ? ? ? ? ? nb_get_retry 3
? ? ? ? ? ? delay_before_retry 3
? ? ? ? }
? ? }
##刪除后面多余的配置##
}
5.#刷新服務并查看虛擬網卡的IP
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33?
6.#調整響應參數
[root@localhost keepalived]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
?#刷新一下
?[root@localhost keepalived]# sysctl -p
7.#配置策略并且啟動服務
?[root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm
?[root@localhost keepalived]# systemctl start ipvsadm8.#清空ipvsadm,并做策略
?[root@localhost keepalived]# ipvsadm -C
[root@localhost keepalived]# ipvsadm -A -t 192.168.50.23:80 -s rr
[root@localhost keepalived]# ?ipvsadm -a -t 192.168.50:23:80 -r 192.168.50.56:80 -g
illegal virtual server address[:port] specified
[root@localhost keepalived]# ?ipvsadm -a -t 192.168.50.23:80 -r 192.168.50.56:80 -g
[root@localhost keepalived]# ?ipvsadm -a -t 192.168.50.23:80 -r 192.168.50.57:80 -g
[root@localhost keepalived]# ipvsadm?[root@localhost keepalived]# ipvsadm -ln
?[root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm
部署備服務器配置(192.168.50.41)
注:所有部署參照上方部署主服務器配置
部署節點服務器
Web服務器1:192.168.50.56
Web服務器2:192.168.50.57
Web服務器2:192.168.50.56
1.#關閉防火墻
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 02.#安裝并開啟httpd服務
[root@localhost ~]#yum -y install httpd
[root@localhost ~]#systemctl start httpd
3.#配置站點文件
[root@localhost ~]# vim /var/www/html/index.html
?4.#配置虛擬IP
[root@localhost ~]#? /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@localhost opt]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.50.23
NETMASK=255.255.255.255
5.#重啟服務并配置虛擬網卡
[root@localhost network-scripts]# systemctl restart network[root@localhost ~]# ifup lo:0
[root@localhost ~]# ifconfig lo:0
6.#設置路由
[root@localhost ~]# route add -host 192.168.50.23 dev lo:0
[root@localhost ~]# route -n
7.?#調整響應參數并查看
[root@localhost ~]# 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
?[root@localhost ~]# sysctl -p ? ? ? ? ? ?
注:Web服務器2:192.168.50.57 同Web服務器2配置
瀏覽器驗證?
?過一會刷新