HAProxy系列文章三《Patroni+ETCD+PG14+Keepalived+HAProxy的安装部署》

瀚高数据库
目录
文档用途
详细信息

文档用途
本文在前文的基础上,通过引入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.111patroni1etcd+patroni+pgredhat7.6
192.168.164.112patroni2etcd+patroni+pgredhat7.6
192.168.164.113patroni3etcd+patroni+pgredhat7.6
192.168.164.114patroni4HAProxy+keepalivedredhat7.6
192.168.164.115Patroni5HAProxy+keepalivedredhat7.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主机上,切换成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值