說明:本系列文章僅用于共享我的學習成果,未經過生產系統考驗,對于知識點和一些組件的使用會不定時更新,僅供參考,如有錯誤的地方,歡迎留言共同學習。
本高可用系列測試不說理論知識,如有需要自行百度,因生產環境大多數是內網環境,無法連接互聯網,為模擬生產環境安裝,PostgreSQL高可用測試均采用離線部署。
所需軟件包均以打包上傳百度網盤,如有需要自行下載:https://pan.baidu.com/s/1Tb7GPMvj4kfKEIh8iyvdbA 提取碼:n9w2 文件名:PostgreSQL_HA.tar.gz
第一章: 介紹測試環境
第二章: PostgreSQL + replication 部署
第三章: Etcd 部署和管理
第四章: Patroni 部署和管理
第五章: HAProxy + Keepalived 部署和管理
第六章: 高可用模擬故障測試用例
第七章: Prometheus + Grafana 監控部署
第八章: 高可用管理

第五章: HAProxy + Keepalived 部署和管理
- haproxy 使用C語言開發的一個開源軟件,是一款具備高并發(一萬以上)、高性能的TCP和HTTP負載均衡器,支持基于cookie的持久性,自動故障切換,支持正則表達式及web狀態統計。
- 使用 haproxy 設置端口區分連接主庫(5000)和只讀從庫(5001),且端口上有負載均衡的功能(兩個從庫)。
- haproxy 開源官網 https://www.haproxy.org/
- Keepalived 免費開源,用C編寫,通過VRRP協議實現多臺機器之間的故障轉移服務
- keepalived 官方文檔 https://www.keepalived.org/manpage.html
1. 主節點(pgtest1)和一個從節點(pgtest2)安裝 HAProxy
HAProxy的安裝有多種方式,可以使用系統自帶的RPM(yum -y install haproxy),版本是 1.5.18。
也可以下載源碼安裝,以下采用源碼安裝方式。
源碼安裝包下載地址: https://www.haproxy.org/#down
[root@pgtest1 ~]# cd /enmo/soft/
[root@pgtest1 soft]# tar -zxvf haproxy-2.4.7.tar.gz
[root@pgtest1 soft]# mkdir /enmo/app/haproxy-2.4.7
[root@pgtest1 soft]# ln -s /enmo/app/haproxy-2.4.7 /enmo/app/haproxy
[root@pgtest1 soft]# cd haproxy-2.4.7
[root@pgtest1 haproxy-2.4.7]# make TARGET=linux-glibc ARCH=x86_64 PREFIX=/enmo/app/haproxy USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1
[root@pgtest1 haproxy-2.4.7]# make install PREFIX=/enmo/app/haproxy
# 參數說明
# make help
TARGET=linux-glibc # 內核版本
ARCH=x86_64 # 指定CPU的架構為"x86_64"
PREFIX=/enmo/app/haproxy # 指定haprpxy安裝路徑
USE_PCRE=1 # 開啟正則表達式。
USE_OPENSSL=1 # 開啟OPENSSL功能。
USE_ZLIB=1 # 開啟壓縮和解壓縮功能。
USE_SYSTEMD=1 # 支持以"systemd"的方式啟動。
USE_CPU_AFFINITY=1 # 開啟CPU的親和性。
配置環境變量,加入haproxy命令
[root@pgtest1 ~]# sed -i "s;:\$PATH:;:/enmo/app/haproxy/sbin:\$PATH:;g" /etc/profile
[root@pgtest1 ~]# source /etc/profile
[root@pgtest1 ~]# haproxy -v
HAProxy version 2.4.7-b5e51a5 2021/10/04 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2026.
Known bugs: http://www.haproxy.org/bugs/bugs-2.4.7.html
Running on: Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
2. 安裝 HAProxy 的所有節點創建配置文件
使用系統自帶的RPM安裝的默認配置文件是 /etc/haproxy/haproxy.cfg
源碼安裝的需要新建配置文件 /enmo/app/haproxy/haproxy.cfg
# pgtest1 和 pgtest2 添加haproxy配置
[root@pgtest1 ~]# vi /enmo/app/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /enmo/app/haproxy
pidfile /var/run/haproxy.pid
maxconn 5000
user root
group root
daemon
nbproc 2
defaults
mode tcp
log 127.0.0.1 local2 err
option tcplog
option dontlognull
option redispatch
retries 3
maxconn 5000
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 5s
listen status
bind *:1080
mode http
log global
stats enable
stats refresh 30s
stats uri /
stats realm Private lands
stats auth admin:admin
listen master
bind *:5000
mode tcp
option tcplog
balance roundrobin
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server pgtest1 192.168.58.10:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
server pgtest2 192.168.58.11:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
server pgtest3 192.168.58.12:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
listen replicas
bind *:5001
mode tcp
option tcplog
balance roundrobin
option httpchk OPTIONS /replica
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server pgtest1 192.168.58.10:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
server pgtest2 192.168.58.11:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
server pgtest3 192.168.58.12:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
如果只有2個節點,上面的GET /replica 需要改成 GET /read-only,否則備庫故障時就無法提供只讀訪問了,但是這樣配置主庫也會參與讀,不能完全分離主庫的讀負載。
參數說明
# 全局定義
global
# log 127.0.0.1 local0 info # 全局的日志配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日志設備,記錄日志等級為info的日志
log 127.0.0.1 local2 # 日志輸出配置,所有日志都記錄在本機,通過local0輸出,需要在rsyslog做配置
chroot /var/lib/haproxy # 改變當前工作目錄
pidfile /var/run/haproxy.pid # 進程PID文件
maxconn 3000 # 最大連接數
user haproxy # 所屬用戶
group haproxy # 所屬組
daemon # 以后臺形式運行haproxy
nbproc 1 # haproxy 啟動時的進程數,<=CPU的核數,創建多個進程數,可以減少每個進程的任務隊列,但是過多的進程數也可能會導致進程的崩潰。
stats socket /var/lib/haproxy/stats
# 默認部分的定義
defaults
mode tcp # 模式 mode {tcp|http|health}, tcp是4層, http是7層, health是健康檢測, 只會返回ok
log 127.0.0.1 local2 err # 使用 127.0.0.1 上的 syslog 服務的 local2 設備記錄錯誤信息
option tcplog # 如果將 mode 設置為 http,那么您必須將 tcplog 更改為 httplog
option dontlognull # 啟用該項,日志中將不會記錄空連接。所謂空連接就是在上游的負載均衡器或者監控系統為了探測該服務是否存活可用時,需要定期的連接或者獲取某一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動作被稱為空連接;官方文檔中標注,如果該服務上游沒有其他的負載均衡器的話,建議不要使用該參數,因為互聯網上的惡意掃描或其他動作就不會被記錄下來。
option redispatch # 當 serverId 對應的服務器掛掉后,強制定向到其他健康的服務器
option abortonclose # 當服務器負載很高的時候,自動結束掉當隊列處理比較久的鏈接
retries 3 # 定義連接后端服務器的失敗重連次數,連接失敗次數超過此值后將會將對應后端服務器標記為不可用
maxconn 3000 # 默認最大連接數
timeout queue 1m # 當達到服務器的 maxconn 時,連接等待最大時長
timeout connect 10s # 連接超時
timeout client 1m # 客戶端非活動狀態的超時時長
timeout server 1m # 服務器超時
timeout check 5s # 心跳檢測超時
# 配置haproxy web監控,查看統計信息
listen status
bind *:1080 # 定義統計頁面的端口
mode http
log global
stats enable # 通過web看狀態信息
stats refresh 30s # 統計頁面自動刷新時間
maxconn 10 # 最大連接數
stats uri / # 統計頁面url,http//ip:1080/ 訪問
stats realm Private lands # 設置統計頁面認證時的提示內容
stats auth admin:Admin2021 # 設置統計頁面認證的用戶和密碼,如果要設置多個,另起一行寫入即可
stats hide-version # 隱藏統計頁面上HAProxy的版本信息
listen master
bind *:5000 # 定義haproxy前端部分監聽的端口
mode tcp
option tcplog
balance roundrobin # 設置負載算法為:輪詢算法
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions # inter:間隔3秒做一個檢測,fall:3次失敗會被踢掉,rise:檢查2次
server pgtest1 192.168.58.10:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
server pgtest2 192.168.58.11:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
server pgtest3 192.168.58.12:5432 maxconn 1000 check port 8008 inter 5000 rise 2 fall 2
3. 安裝 HAProxy 的所有節點創建服務,啟動haproxy
使用系統自帶的RPM安裝的自帶服務,無需配置
# 創建服務
[root@pgtest1 ~]# vi /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/enmo/app/haproxy/sbin/haproxy -f /enmo/app/haproxy/haproxy.cfg -c -q
ExecStart=/enmo/app/haproxy/sbin/haproxy -Ws -f /enmo/app/haproxy/haproxy.cfg -p /var/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
# 啟動服務
systemctl daemon-reload
systemctl start haproxy
systemctl status haproxy
systemctl enable haproxy
4. 瀏覽器訪問 HAProxy
瀏覽器登錄 http://192.168.58.10:1080 輸入用戶名 admin 密碼 admin

5. 測試5000和5001端口連接數據庫
這里我們通過 5000 端口和 5001 端口分別來提供讀寫服務和只讀服務,在沒有安裝keepalived的情況下,如果需要對數據庫寫入數據只需要對外提供 192.168.58.10/11 + 5000 端口即可,可以模擬主庫故障,即關閉其中的 master 節點來驗證是否會進行自動主從切換。
[root@pgtest1 ~]# patronictl list
+---------+---------------+---------+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+ Cluster: pg_cluster (7025023477017500881) --+----+-----------+
| pgtest1 | 192.168.58.10 | Leader | running | 7 | | # 主庫
| pgtest2 | 192.168.58.11 | Replica | running | 7 | 0 | # 備庫1
| pgtest3 | 192.168.58.12 | Replica | running | 7 | 0 | # 備庫2
+---------+---------------+---------+---------+----+-----------+
# 192.168.58.10 + 5000 連接主庫
[root@pgtest3 ~]# psql "host=192.168.58.10 port=5000 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.10 | f
(1 row)
# 192.168.58.11 + 5000 連接主庫
[root@pgtest3 ~]# psql "host=192.168.58.11 port=5000 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.10 | f
(1 row)
# 192.168.58.12 + 5000 不能連接數據庫,因為 192.168.58.12 上沒有部署 haproxy
[root@pgtest3 ~]# psql "host=192.168.58.12 port=5000 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
psql: error: could not connect to server: Connection refused
Is the server running on host "192.168.58.12" and accepting
TCP/IP connections on port 5000?
# 192.168.58.10 + 5001 連接兩個備庫,備庫兩個節點負載均衡
[root@pgtest3 ~]# psql "host=192.168.58.10 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.12 | t
(1 row)
[root@pgtest3 ~]# psql "host=192.168.58.10 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.11 | t
(1 row)
# 192.168.58.11 + 5001 連接備庫,備庫兩個節點負載均衡
[root@pgtest3 ~]# psql "host=192.168.58.11 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.12 | t
(1 row)
[root@pgtest3 ~]# psql "host=192.168.58.11 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.11 | t
(1 row)
# 192.168.58.12 + 5001 不能連接數據庫,因為 192.168.58.12 上沒有部署 haproxy
[root@pgtest3 ~]# psql "host=192.168.58.12 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
psql: error: could not connect to server: Connection refused
Is the server running on host "192.168.58.12" and accepting
TCP/IP connections on port 5001?
至此,HAProxy 部署完成。
6. 安裝 HAProxy 的兩個節點安裝 Keepalived
Keepalived 的安裝有多種方式,可以使用系統自帶的RPM(yum -y install keepalived),版本是 1.3.5。
也可以下載源碼安裝,以下采用源碼安裝方式。
源碼安裝包下載地址: https://www.keepalived.org/download.html
注意,源碼編譯安裝會出現以下警告,如果需要支持IPv6,建議提前安裝libnl
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
# yum install libnl* -y
[root@pgtest1 ~]# cd /enmo/soft/
[root@pgtest1 soft]# tar -zxvf keepalived-2.2.4.tar.gz
[root@pgtest1 soft]# mkdir /enmo/app/keepalived-2.2.4
[root@pgtest1 soft]# ln -s /enmo/app/keepalived-2.2.4 /enmo/app/keepalived
[root@pgtest1 soft]# cd keepalived-2.2.4
[root@pgtest1 keepalived-2.2.4]# ./configure --prefix=/enmo/app/keepalived
[root@pgtest1 keepalived-2.2.4]# make && make install
配置環境變量,加入keepalived命令
[root@pgtest1 ~]# sed -i "s;:\$PATH:;:/enmo/app/keepalived/sbin:\$PATH:;g" /etc/profile
[root@pgtest1 ~]# source /etc/profile
[root@pgtest1 ~]# keepalived -v
Keepalived v2.2.4 (08/21,2021)
Copyright(C) 2001-2021 Alexandre Cassen, <acassen@gmail.com>
Built with kernel headers for Linux 3.10.0
Running on Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017
Distro: CentOS Linux 7 (Core)
configure options: --prefix=/enmo/app/keepalived
Config options: LVS VRRP VRRP_AUTH VRRP_VMAC OLD_CHKSUM_COMPAT INIT=systemd SYSTEMD_NOTIFY
System options: VSYSLOG LIBNL1 RTA_ENCAP RTA_EXPIRES FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK IFA_FLAGS NET_LINUX_IF_H_COLLISION NET_LINUX_IF_ETHER_H_COLLISION LIBIPTC_LINUX_NET_IF_H_COLLISION LIBIPVS_NETLINK IFLA_LINK_NETNSID GLOB_BRACE GLOB_ALTDIRFUNC INET6_ADDR_GEN_MODE SO_MARK
7. 安裝 Keepalived 的所有節點創建配置文件, VIP使用192.168.58.20
使用系統自帶的RPM安裝的配置文件是 /etc/keepalived/keepalived.conf
源碼安裝的需要新建配置文件 /enmo/app/keepalived/etc/keepalived/keepalived.conf
# keepalived 主節點查看本地使用的網卡名
[root@pgtest1 ~]# ip a |grep 192.168.58.10 |awk '{print $NF}'
ens33
# keepalived 主節點配置文件
[root@pgtest1 ~]# mv /enmo/app/keepalived/etc/keepalived/keepalived.conf /enmo/app/keepalived/etc/keepalived/keepalived.conf.bak
[root@pgtest1 ~]# vi /enmo/app/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id pgtest1
script_user root
enable_script_security
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 5
fall 3
rise 5
timeout 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 88
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass postgres
}
virtual_ipaddress {
192.168.58.20/24 dev ens33 label ens33:1
}
track_script {
chk_haproxy
}
}
# keepalived 主節點查看本地使用的網卡名
[root@pgtest2 ~]# ip a |grep 192.168.58.11 |awk '{print $NF}'
ens32
# keepalived 備節點配置文件
[root@pgtest2 ~]# mv /enmo/app/keepalived/etc/keepalived/keepalived.conf /enmo/app/keepalived/etc/keepalived/keepalived.conf.bak
[root@pgtest2 ~]# vi /enmo/app/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id pgtest2
script_user root
enable_script_security
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 5
fall 3
rise 5
timeout 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 88
priority 99
advert_int 5
authentication {
auth_type PASS
auth_pass postgres
}
virtual_ipaddress {
192.168.58.20/24 dev ens32 label ens32:1
}
track_script {
chk_haproxy
}
}
參數說明
! Configuration File for keepalived
# 全局定義塊
global_defs {
# 標識服務器的字符串,在局域網內應該是唯一的,不必是主機名,默認是本地主機名
router_id pgtest1
# 設置運行腳本默認用戶和組
script_user root
# 如果腳本路徑的任一部分對于非root用戶來說,都具有可寫權限,則不會以root身份運行腳本。
enable_script_security
}
# 周期性檢查腳本
vrrp_script chk_haproxy {
# 指定要執行的腳本的路徑或命令
# 通過向進程 haproxy 發送信號 0 ,然后根據返回值來判斷 haproxy 進程是否存在
script "/usr/bin/killall -0 haproxy"
# 腳本調用間隔的秒數,(默認值:1s)
interval 2
# 指定在多少秒后,腳本被認為執行失敗
timeout 2
# 調整權重優先級,默認為2
# keepalived 啟動時就做權重運算,priority + weight ,主備端哪邊權重大,VIP就在哪邊啟動
weight 5
# 執行失敗多少次才認為失敗
fall 3
# 執行成功多少次才認為是成功
rise 5
}
# VRRP實例定義塊
vrrp_instance VI_1 {
# 指定該keepalived節點的初始狀態
state MASTER
# vrrp實例綁定的接口,用于發送VRRP包
interface ens33
# 指定VRRP實例ID,范圍是0-255,主備機保持一致
virtual_router_id 88
# 指定優先級,優先級高的將成為MASTER,備機請填寫小于主機的值
priority 100
# 指定發送VRRP通告的間隔。單位是秒
advert_int 5
# 指定認證方式
authentication {
auth_type PASS # PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)
auth_pass postgres # 指定認證所使用的密碼,最多8位。
}
# 指定VIP地址,主備機保持一致
virtual_ipaddress {
192.168.58.20/24 dev ens33 label ens33:1
}
# 添加一個 track 腳本( vrrp_script 配置的腳本)
track_script {
chk_haproxy
}
}
keepalived 配置文件參數詳解 https://blog.csdn.net/mofiu/article/details/76644012
8. 安裝 Keepalived 的所有節點創建服務,啟動 Keepalived
使用系統自帶的RPM安裝的自帶服務,無需配置
# 創建服務
[root@pgtest1 ~]# vi /usr/lib/systemd/system/keepalived.service
[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target haproxy.service
Requires=haproxy.service
Wants=network-online.target
Documentation=man:keepalived(8)
Documentation=man:keepalived.conf(5)
Documentation=man:genhash(1)
Documentation=https://keepalived.org
[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=/enmo/app/keepalived/etc/sysconfig/keepalived
ExecStart=/enmo/app/keepalived/sbin/keepalived -f /enmo/app/keepalived/etc/keepalived/keepalived.conf $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/bin/killall keepalived
[Install]
WantedBy=multi-user.target
# 啟動服務
systemctl daemon-reload
systemctl start keepalived
systemctl enable keepalived
9. Keepalived 主節點驗證VIP(192.168.58.20)是否創建
[root@pgtest1 ~]# ip -4 a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.58.10/24 brd 192.168.58.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.58.20/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
10. 測試VIP(192.168.58.20)和5000/5001端口連接數據庫
# 192.168.58.20 + 5000,只連接主庫,對外提供讀寫服務
[root@pgtest3 ~]# psql "host=192.168.58.20 port=5000 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.10 | f
(1 row)
# 192.168.58.20 + 5001,負載均衡的連接兩個備庫,對外提供只讀服務
[root@pgtest3 ~]# psql "host=192.168.58.20 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.11 | t
(1 row)
[root@pgtest3 ~]# psql "host=192.168.58.20 port=5001 user=postgres dbname=postgres password=postgres" -c 'select inet_server_addr(),pg_is_in_recovery()'
inet_server_addr | pg_is_in_recovery
------------------+-------------------
192.168.58.12 | t
(1 row)
HAProxy 和 Keepalived 日志都記錄到 /var/log/messages
至此,PostgreSQL高可用之Patroni + etcd + HAProxy + Keepalived 離線部署完成。
11. keepalived 管理
11.1 keepalived 通過調節權重主動切換vip
注意,建議在 keepalived 的備端調整 priority 大于主端的值
[root@pgtest2 ~]# vi /enmo/app/keepalived/etc/keepalived/keepalived.conf
priority 101 # 主端是100
備端重啟keepalived,備端keepalived發現權重比主端大,就會自動把VIP拉過來,如果順利的話,這樣對VIP影響較小
重啟不建議使用 systemctl restart keepalived,測試不太好使
[root@pgtest2 ~]# systemctl stop keepalived
[root@pgtest2 ~]# systemctl start keepalived




