瀚高数据库
目录
文档用途
详细信息
文档用途
本文在前文的基础上,通过引入Keepalived实现HAProxy的高可用,增强高可用架构的稳定性。
详细信息
一、什么是keepalived
Keepalived 是一个用 C 编写的路由软件。该项目的主要目标是为Linux系统和基于Linux 的基础设施提供简单而强大的负载平衡和高可用性设施。负载均衡框架依赖于众所周知且广泛使用的Linux 虚拟服务器 (IPVS) 内核模块提供第4层负载均衡。Keepalived 实现了一组检查器,根据它们的健康状况动态地、自适应地维护和管理负载均衡的服务器池。另一方面,通过VRRP实现高可用性协议。VRRP 是路由器故障转移的基础,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为MASTER,另一台为BACKUP,对外表现为一个虚拟IP,master宕机的时候,BACKUP就会接管虚拟IP,继续提供服务,从而保证了高可用性。
二、环境信息
IP | 主机名 | 安装组件 | CPU架构 |
---|---|---|---|
192.168.164.111 | patroni1 | etcd+patroni+pg | redhat7.6 |
192.168.164.112 | patroni2 | etcd+patroni+pg | redhat7.6 |
192.168.164.113 | patroni3 | etcd+patroni+pg | redhat7.6 |
192.168.164.114 | patroni4 | HAProxy+keepalived | redhat7.6 |
192.168.164.115 | Patroni5 | HAProxy+keepalived | redhat7.6 |
keepalived使用192.168.164.200的VIP对外提供服务。
三、安装配置keepalived
1、安装HAProxy
在patroni5主机上安装HAProxy,安装及配置过程详见HAProxy系列文章二《Patroni+ETCD+PG14+HAProxy的安装部署》。
2、解压缩并编译安装keepalived
在安装haproxy的两个节点安装keepalived
[root@patroni4 ~]# cd /opt
[root@patroni4 opt]# tar -zxvf keepalived-2.2.7.tar.gz
[root@patroni4 opt]# cd keepalived-2.2.7/
[root@patroni4 keepalived-2.2.7]#./configure --prefix=/opt/keepalived
[root@patroni4 keepalived-2.2.7]# make && make install
[root@patroni4 keepalived-2.2.7]# vi ~/.bashrc
export PATH=$PATH:/opt/haproxy/sbin/:/opt/keepalived/sbin
[root@patroni4 keepalived-2.2.7]# source ~/.bashrc
[root@patroni4 keepalived-2.2.7]# cd /opt/keepalived/
3、编辑keepalived配置文件
两个节点配置文件的不同之处只有state及priority两处,分别代表角色及优先级,此处keepalive对haproxy的检查我们用到了killall命令,如果系统中无此命令,请先使用yum install psmisc -y 命令安装。
##patroni4节点配置如下
[root@patroni4 ~]# cat > /opt/keepalived/keepalived.conf << "EOF"
global_defs {
router_id patroni4
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.164.200/24 dev ens33 label ens33:1
}
track_script {
chk_haproxy
}
}
EOF
##patroni5节点配置如下
[root@patroni5 ~]# cat > /opt/keepalived/keepalived.conf << "EOF"
global_defs {
router_id patroni5
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 ens33
virtual_router_id 88
priority 99
advert_int 5
authentication {
auth_type PASS
auth_pass postgres
}
virtual_ipaddress {
192.168.164.200/24 dev ens33 label ens33:1
}
track_script {
chk_haproxy
}
}
EOF
##配置系统服务
[root@patroni5 ~]vi /usr/lib/systemd/system/keepalived.service
[Unit]
Description=KEEPALIVED.SERVICE
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=/opt/keepalived/etc/sysconfig/keepalived
ExecStart=/opt/keepalived/sbin/keepalived -f /opt/keepalived/keepalived.conf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/bin/killall keepalived
[Install]
WantedBy=multi-user.target
##开启服务,设置开机自启
[root@patroni4 ~]# systemctl daemon-reload
[root@patroni4 ~]# systemctl start keepalived.service
[root@patroni4 ~]# systemctl status keepalived.service
[root@patroni4 ~]# systemctl status keepalived.service
● keepalived.service - KEEPALIVED.SERVICE
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2023-03-16 17:47:13 CST; 13s ago
Docs: man:keepalived(8)
man:keepalived.conf(5)
man:genhash(1)
https://keepalived.org
Process: 25818 ExecStart=/opt/keepalived/sbin/keepalived -f /opt/keepalived/keepalived.conf (code=exited, status=0/SUCCESS)
Main PID: 25819 (keepalived)
CGroup: /system.slice/keepalived.service
├─25819 /opt/keepalived/sbin/keepalived -f /opt/keepalived/keepalived.conf
└─25820 /opt/keepalived/sbin/keepalived -f /opt/keepalived/keepalived.conf
Mar 16 17:47:13 patroni4 Keepalived[25818]: Running on Linux 3.10.0-1062.el7.x86_64 #1 SMP Thu Jul 18 20:25:13 UTC 2019 (built for Li...3.10.0)
Mar 16 17:47:13 patroni4 Keepalived[25818]: Command line: '/opt/keepalived/sbin/keepalived' '-f' '/opt/keepalived/keepalived.conf'
Mar 16 17:47:13 patroni4 Keepalived[25818]: Configuration file /opt/keepalived/keepalived.conf
Mar 16 17:47:13 patroni4 Keepalived[25819]: NOTICE: setting config option max_auto_priority should result in better keepalived performance
Mar 16 17:47:13 patroni4 Keepalived[25819]: Starting VRRP child process, pid=25820
Mar 16 17:47:13 patroni4 systemd[1]: Started KEEPALIVED.SERVICE.
Mar 16 17:47:13 patroni4 Keepalived[25819]: Startup complete
Mar 16 17:47:13 patroni4 Keepalived_vrrp[25820]: (VI_1) Entering BACKUP STATE (init)
Mar 16 17:47:13 patroni4 Keepalived_vrrp[25820]: VRRP_Script(chk_haproxy) succeeded
Mar 16 17:47:13 patroni4 Keepalived_vrrp[25820]: (VI_1) Changing effective priority from 100 to 105
Hint: Some lines were ellipsized, use -l to show in full.
[root@patroni4 ~]# systemctl enable keepalived.service
##通过查看IP我们可以看到VIP已经挂载带patroni4的主机上了。
[root@patroni4 haproxy]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a5:72:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.164.114/24 brd 192.168.164.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.164.200/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea5:72c3/64 scope link
valid_lft forever preferred_lft forever
4、VIP登录验证
[postgres@patroni2 log]$ psql -h 192.168.164.200 -p 6432
Password for user postgres:
psql (14.6)
Type "help" for help.
postgres=#
5、HAProxy切换验证
[root@patroni4 haproxy]# killall haproxy
[root@patroni5 haproxy]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ac:92:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.164.115/24 brd 192.168.164.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.164.200/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feac:92f8/64 scope link
valid_lft forever preferred_lft forever
通过killall命令关闭 patorni4主机上的haproxy服务,可看到VIP漂移到patroni5主机上,切换成功。