LVS+Keepalived群集
- 一、理解Keelalived實作原理
- 1.1、Keepalived案例分析
- 1.2、LVS+Keepalived高可用群集概述
- 1.3、Keepalived實作原理剖析
- 1.4、Keepalived案例講解
- 1.4.1、配置keepalived master服務器
- 1.4.2、配置keepalived slave服務器
- 三、實驗LVS+Keelalived高可用群集部署
- 3.1、案例部署配置
- 3.2、配置主調度器 192.168.100.21
- 3.3、配置從調度器 192.168.100.22
- 3.4、配置存盤服務器:192.168.100.25
- 3.5、配置WEB 1 服務器:192.168.100.23
- 3.5、配置WEB 2 服務器:192.168.100.24
- 3.6、測驗主、從調度器是否正常作業
- 3.7、現在驗證負載均衡輪詢
一、理解Keelalived實作原理
keepalived是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能——判斷LVS負載調度器,節點服務器的可用性,及時隔離并替換為新的服務器,當故障主機恢復后將其重新加入群集,
■專門為LVS和HA設計的一款健康檢查工具
- 支持故障自動切換(Failover)
- 支持節點健康檢查狀態(Health Checking)
- 官網網站:http://www.keepalived.org/(有興趣的可以去看一下)
1.1、Keepalived案例分析
在企業應用中,單臺服務器承擔應用存在單點故障的危險,在企業應用集群中,存在了至少兩處單點故障危險,
單點故障一旦發生,企業服務將發生中斷,造成極大的危害
1.2、LVS+Keepalived高可用群集概述
Keepalived的設計目標是構建可用的LVS負載均衡群集,可以呼叫ipvsadm工具來創建虛擬服務器,管理服務器池,而不僅僅用來做雙機熱備,使用keepalived構建LVS群集更加簡便易用,主要優勢體現在:對LVS負載調度器實作熱備切換,提高可用性,對服務器池中的節點進行健康檢查,自動移除失效節點,恢復后再重新加入,
在基于LVS-Keepalived實作的LVS群集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,本例將以DR模式的LVS群集為基礎,增加一臺從負載調度器,使用Keepalived來實作主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站群集平臺,
使用Keepalived構建LVS群集時,也需要用到ipvsadm管理工具,但大部分作業會由Keepalived自動完成,不需要手動執行ipvsadm,
1.3、Keepalived實作原理剖析
■Keepalived采用VRRP熱備份協議,實作Linux服務器的多機熱備功能,
■VRRP(虛擬路由冗余協議)是針對路由器的一種備份解決方案,
- 由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務
- 由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務
- 若當前在線的路由器失效,則其他路由器會根據設定的優先級自動接替虛擬IP地址,繼續提供服務

1.4、Keepalived案例講解
■雙機熱備的故障切換是由虛擬IP地址的漂移實作,適用于各種應用服務器
■實作基于WEB服務的雙機熱備
【交 換 機】
●
● 漂移地址:192.168.100.100
●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
● ● ● ● ●
● ● ● ● ●
● ● ● ● ●
【調度器1】 【調度器2】 【WEB1】 【WEB2】 【存盤】
192.168.100.21 192.168.100.22 192.168.100.23 192.168.100.24 192.168.100.25
1.4.1、配置keepalived master服務器
■ keepalived配置目錄位于/etc/keepalived/
■ keepalived.conf是主組態檔
- global_defs {…} 區段指定全域引數
- vrrp_instance 實體名稱 {…} 區段指定VRRP熱備引數
- 注釋文字以”!“符號開頭
- 目錄samples/,提供了許多配置樣例作為參考
■常用配置選項講解
- router_id HA_TEST_R1: 本路由器(服務器)的名稱
- vrrp_instance VI_1: 定義VRRP熱備實體
- state MASTER:熱備狀態,MASTER表示主服務器
- interface ens33:承載VIP地址的物理介面
- virtual_router_id 1:虛擬路由器的ID號,每個熱備組保持一致
- 熱備組的ID號,代表是否在一個熱備組中
- priority 100: 優先級,數值越大優先級越高
- advert_int 1: 通告間隔秒數(心跳頻率)
- auth_type PASS: 認證型別
- auth_pass 123456: 密碼字串
- virtual_ipaddress {vip}: 指定漂移地址(VIP),可以有多個
1.4.2、配置keepalived slave服務器
■keppalived 備份服務器的配置與master的配置有三個選項不同
- router_id: 設為自由名稱
- state: 設為BACKUP
- priority: 優先值值低于主服務器
■其他選項與master相同
三、實驗LVS+Keelalived高可用群集部署
3.1、案例部署配置
| 名稱 | 作業系統 | IP地址 |
|---|---|---|
| LVS-Master | Centos7.6-x86_64 | 192.168.100.21 |
| LVS-Backup | Centos7.6-x86_64 | 192.168.100.22 |
| WebserverA | Centos7.6-x86_64 | 192.168.100.23 |
| WebserverB | Centos7.6-x86_64 | 192.168.100.24 |
| NFS共享 | Centos7.6-x86_64 | 192.168.100.25 |
這邊我們的漂移地址(VIP):192.168.100.10
首先我們在做實驗時必須先關閉5臺虛擬機的防火墻、核心防護,并配置好本地Yum源,
3.2、配置主調度器 192.168.100.21
- 調整/proc回應引數
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p ###使其生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
- 清除負載分配策略
[root@localhost /]# ipvsadm -C
- 調整keepalived引數
global_defs {
router_id HA_TEST_R1 ####本路由器的服務器名稱 HA_TEST_R1
}
vrrp_instance VI_1 { ####定義VRRP熱備實列
state MASTER ####熱備狀態,master表示主服務器
interface ens33 ####表示承載VIP地址的物理介面
virtual_router_id 1 ####虛擬路由器的ID號,每個熱備組保持一致
priority 100 ####優先級,優先級越大優先級越高
advert_int 1 ####通告間隔秒數(心跳頻率)
authentication { ####認證資訊,每個熱備組保持一致
auth_type PASS ####認證型別
auth_pass 123456 ####認證密碼
}
virtual_ipaddress { ####漂移地址(VIP),可以是多個
192.168.100.100
}
}
virtual_server 192.168.100.100 80 { ####虛擬服務器地址(VIP)、埠
delay_loop 15 ####健康檢查的時間間隔(秒)
lb_algo rr ####輪詢調度演算法
lb_kind DR ####直接路由(DR)群集作業模式
persistence 60 ####連接保持時間(秒),若啟用請去掉!號
protocol TCP ####應用服務采用的是TCP協議
real_server 192.168.100.23 80 { ####第一個WEB站點的地址,埠
weight 1 ####節點的權重
TCP_CHECK { ####健康檢查方式
connect_port 80 ####檢查埠目標
connect_timeout 3 ####連接超時(秒)
nb_get_retry 3 ####重試次數
delay_before_retry 4 ####重試間隔(秒)
}
}
real_server 192.168.100.24 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
[root@localhost keepalived]# systemctl start keepalived ####啟動keepalived
[root@localhost keepalived]# systemctl enable keepalived ####開機啟動keepalived
[root@localhost keepalived]# ip addr show dev ens33 ####查看主控制IP地址和漂移地址
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b5:da:33 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.21/24 brd 192.168.100.255 scope global noprefixroute ens33 ## IP地址
valid_lft forever preferred_lft forever
inet 192.168.100.100/32 scope global ens33 ## 漂移地址
valid_lft forever preferred_lft forever
inet6 fe80::c574:d230:3778:e9dd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3.3、配置從調度器 192.168.100.22
- 調整/proc回應引數
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
- 清除負載分配策略
[root@localhost /]# ipvsadm -C
- 調整keepalived引數
global_defs {
router_id HA_TEST_R2 ####本路由器的服務器名稱 HA_TEST_R2
}
vrrp_instance VI_1 { ####定義VRRP熱備實列
state BACKUP ####熱備狀態,backup表示輔服務器
interface ens33 ####表示承載VIP地址的物理介面
virtual_router_id 1 ####虛擬路由器的ID號,每個熱備組保持一致
priority 99 ####優先級,優先級越大優先級越高,這里的優先級要比主機小!
advert_int 1 ####通告間隔秒數(心跳頻率)
authentication { ####認證資訊,每個熱備組保持一致
auth_type PASS ####認證型別
auth_pass 123456 ####認證密碼
}
virtual_ipaddress { ####漂移地址(VIP),可以是多個
192.168.100.100
}
}
virtual_server 192.168.100.100 80 {
delay_loop 15
lb_algo rr
lb_kind DR
persistence 60
protocol TCP
real_server 192.168.100.23 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
real_server 192.168.100.24 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
3.4、配置存盤服務器:192.168.100.25
[root@localhost ~]# rpm -q nfs-utils ###如果沒裝,yum -y install nfs-utils
[root@localhost ~]# rpm -q rpcbind ###如果沒裝,yum -y install rpcbind
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# vi /etc/exports
/opt/Tom 192.168.100.0/24(rw,sync)
/opt/Jack 192.168.100.0/24(rw,sync)
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# mkdir /opt/Tom /opt/Jack
[root@localhost ~]# echo "this is Tom" >/opt/Tom/index.html
[root@localhost ~]# echo "this is Jack" >/opt/Jack/index.html
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/Jack 192.168.100.0/24
/opt/Tom 192.168.100.0/24
3.5、配置WEB 1 服務器:192.168.100.23
- 配置虛擬IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# sudo yum install net-tools ## 最小化安裝需要裝這個,才可以用 ifconfig
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.100.10 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
[root@localhost network-scripts]# vi /etc/rc.local
/sbin/route add -host 192.168.100.10 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.10 dev lo:0
- 調整/proc回應引數
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
- 安裝httpd 掛載測驗頁
[root@localhost network-scripts]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.25 ####如果還沒發布,請到存盤服務器發布下,exportfs -rv
Export list for 192.168.100.25:
/opt/Jack 192.168.100.0/24
/opt/Tom 192.168.100.0/24
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.25:/opt/Tom /var/www/html/
[root@localhost ~]# vi /etc/fstab
192.168.100.25:/opt/Tom /var/www/html nfs defaults,_netdev 0 0 ###開機自動掛載,注意格式對齊
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# init 6 ## 重啟測驗一下
[root@localhost ~]# curl 192.168.100.23
this is Tom
也可以在瀏覽器輸入 192.168.100.23 測驗

3.5、配置WEB 2 服務器:192.168.100.24
- 配置虛擬IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# sudo yum install net-tools ## 最小化安裝需要裝這個,才可以用 ifconfig
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.100.10 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
[root@localhost network-scripts]# vi /etc/rc.local
/sbin/route add -host 192.168.100.10 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.10 dev lo:0
- 調整/proc回應引數
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
- 安裝httpd 掛載測驗頁
[root@localhost network-scripts]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.25 ####如果還沒發布,請到存盤服務器發布下,exportfs -rv
Export list for 192.168.100.25:
/opt/Jack 192.168.100.0/24
/opt/Tom 192.168.100.0/24
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.25:/opt/Jack /var/www/html/
[root@localhost ~]# vi /etc/fstab
192.168.100.25:/opt/Jack /var/www/html nfs defaults,_netdev 0 0 ###開機自動掛載,注意格式對齊
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# init 6 ## 重啟測驗一下
[root@localhost ~]# curl 192.168.100.24
this is Jack
也可以在瀏覽器輸入 192.168.100.24 測驗

3.6、測驗主、從調度器是否正常作業
1、主調度器ens33網卡MAC地址:00:0c:29:b5:da:33
2、在真機打開 cmd 測驗 ping 192.168.100.100
3、arp -a 發現快取表里面MAC是00:0c:29:b5:da:33
證明資料包往主調度器的MAC地址丟

進行抓包查看一下
4、現在在主調度器關閉 keepalived
[root@localhost ~]# systemctl status keepalived
5、然后再從調度器輸入 ip addr show,漂移地址已經到了從調度器了,這時候,從調度器搶占主調度器,進行作業,

6、從調度器ens33網卡MAC地址:00:0c:29:53:1f:1a
7、在真機打開 cmd 測驗 ping 192.168.100.100
8、arp -a 發現快取表里面MAC是 0:0c:29:53:1f:1a,這說明當主調度器宕掉的時候,從調度器已經代替主調度器進行作業了,證明資料包往從調度器的MAC地址丟,

進行抓包查看一下

9、再重新開啟keepalived.service
### 開啟keepaliced
[root@localhost keepalived]# systemctl start keepalived.service

3.7、現在驗證負載均衡輪詢
- 在瀏覽器輸入 192.168.100.100
現在是 “this is Jack”

- 下次重繪網頁的時候會輪循到另一個網頁,在這期間會有一個等待時間
現在是 “This is Tom”,驗證成功!

到這里我們今天LVS+Keepalived群集學習就結束了,
本章需要掌握的重點是:
- Keepalived的主要功能
- Keepalived主服務器與從服務器的區別
- 構建負載均衡+高可用群集
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128785.html
標籤:其他
