找回密码
 立即注册
首页 业界区 安全 PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现 ...

PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离

诉称 4 天前
PostgreSQL patroni高可用
PostgreSQL patroni 高可用 1:ectd 安装和配置
PostgreSQL patroni 高可用 2:patroni安装和配置
PostgreSQL patroni 高可用 3:patroni 运维
PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离
 
PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离 PostgreSQL ptroni的高可用架构图如下所示,本文完成如下架构图中红色标记内的HAProxy安装和配置,实际上是在每个节点都安装了HAProxy,然后用keepalived的方式,实现HAProxy自身的高可用。
需要特别说明的是:1,HAProxy只是一个请求转发功能的中间件,可以单独安装在一台独立的机器上,也可以跟PostgreSQL实例安装在一台机器上。2,HAProxy并不是只能适配于Patroni,可以是任意类型的集群,比如基础的流复制,repmgr,pg_auto_failover 集群,或者实现MySQL集群的代理等等。3,HAproxy自身也是一个单点的应用,所以其自身也需要高可用,因此本文会基于keepalived对HAproxy做高可用。4,HAProxy在patroni高可用环境中,客户端的访问路径为:Application---》keepalived虚拟IP---》HAProxy---》patroni实例---》etcd存储---》PostgreSQL实例,可见这个链路比较长,每个组件都会带来一定的性能损耗。 
1.png

图片来源于:https://docs.percona.com/postgresql/12/solutions/high-availability.html#architecture-layout
 
1,环境

Ubuntu08:192.168.152.115Ubuntu09:192.168.152.116Ubuntu10:192.168.152.117

patroni集群环境:
  1. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# patronictl -c /usr/local/pgsql16/patroni/patroni.yml list
  2. + Cluster: pg_cluster_wy_prod (7553485872297570126) ----+----+-----------+
  3. | Member   | Host                 | Role    | State     | TL | Lag in MB |
  4. +----------+----------------------+---------+-----------+----+-----------+
  5. | ubuntu08 | 192.168.152.115:9000 | Replica | streaming |  5 |         0 |
  6. | ubuntu09 | 192.168.152.116:9000 | Replica | streaming |  5 |         0 |
  7. | ubuntu10 | 192.168.152.117:9000 | Leader  | running   |  5 |           |
  8. +----------+----------------------+---------+-----------+----+-----------+
  9. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
  10. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
  11. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
复制代码
 
2,AHProxy安装

版本选择https://www.haproxy.org/,版本信息如下,这里找一个长期支持版本(LTS)3.2
2.png

下载
  1. wget https://www.haproxy.org/download/3.2/src/haproxy-3.2.5.tar.gz
  2. tar -xzvf haproxy-3.2.5.tar.gz
  3. cd haproxy-3.2.5/
复制代码
编译安装
  1. #编译选项,make编译会报错,提示出编译选项
  2. root@ubuntu08:/usr/local/pg_install_package/haproxy-3.2.5# make
  3. Building HAProxy without specifying a TARGET is not supported.
  4. Usage:
  5.     make help                       # To print a full explanation.
  6.     make TARGET=xxx USE_<feature>=1 # To build HAProxy.
  7. The most commonly used targets are:
  8.     linux-glibc    - Modern Linux with glibc
  9.     linux-musl     - Modern Linux with musl
  10.     freebsd        - FreeBSD
  11.     openbsd        - OpenBSD
  12.     netbsd         - NetBSD
  13.     osx            - macOS
  14.     solaris        - Solaris
  15. Choose the target which matches your OS the most in order to
  16. gain the maximum performance out of it.
  17. Common features you might want to include in your build are:
  18.     USE_OPENSSL=1 - Support for TLS encrypted connections
  19.     USE_ZLIB=1    - Support for HTTP response compression
  20.     USE_PCRE=1    - Support for PCRE regular expressions
  21.     USE_LUA=1     - Support for dynamic processing using Lua
  22. Use 'make help' to print a full explanation of supported targets
  23. and features, and 'make ... opts' to show the variables in use
  24. for a given set of build options, in a reusable form.
  25. make: *** [Makefile:933: all] Error 1
复制代码
  1. #编译
  2. make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_QUIC=1 USE_QUIC_OPENSSL_COMPAT=1
  3. #安装,安装位置为:/usr/local/sbin
  4. make install
复制代码
 
3,HAProxy配置

haproxy三个节点完全一致,不需要修改,/etc/haproxy/haproxy.conf
  1. global
  2.     log         127.0.0.1 local2      
  3.     pidfile     /var/run/haproxy.pid   
  4.     maxconn     1000                  
  5.     daemon                           
  6. defaults
  7.     mode                    tcp
  8.     retries                 3
  9.     timeout client          10m
  10.     timeout connect         10s
  11.     timeout server          10m
  12.     timeout check           10s
  13.    
  14. listen  stats
  15.         stats uri /
  16.         mode http
  17.         bind *:8080
  18.         stats enable
  19.         stats auth admin:admin
  20.         stats refresh 10s
  21.    
  22. listen  pg_rw
  23.         bind *:6432
  24.         option httpchk
  25.         http-check expect status 200
  26.         default-server inter 3s rise 3 fall 2 on-marked-down shutdown-sessions
  27.         server ubuntu05 192.168.152.115:9000 check port 8008
  28.         server ubuntu06 192.168.152.116:9000 check port 8008
  29.         server ubuntu07 192.168.152.117:9000 check port 8008
  30.         
  31. listen  pg_ro
  32.         bind *:6433
  33.         option httpchk GET /replica       
  34.         http-check expect status 200
  35.         default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
  36.         balance roundrobin
  37.         server ubuntu05 192.168.152.115:9000 check port 8008
  38.         server ubuntu06 192.168.152.116:9000 check port 8008
  39.         server ubuntu07 192.168.152.117:9000 check port 8008
复制代码
关于HAProxy的另一种验证方式,请参考这里:https://blog.itpub.net/70041375/viewspace-3032961/ systemctl启动文件haproxy.service/etc/systemd/system/haproxy.service
  1. # /etc/systemd/system/haproxy.service
  2. [Unit]
  3. Description=HAProxy Load Balancer
  4. After=network.target
  5. [Service]
  6. Environment="CONFIG=/etc/haproxy/haproxy.conf" "PIDFILE=/var/run/haproxy.pid"
  7. ExecStartPre=/usr/local/sbin/haproxy -f $CONFIG -c -q
  8. ExecStart=/usr/local/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE -d
  9. ExecReload=/usr/local/sbin/haproxy -f $CONFIG -c -q
  10. ExecReload=/bin/kill -USR2 $MAINPID
  11. KillMode=mixed
  12. Restart=always
  13. SuccessExitStatus=143
  14. Type=notify
  15. # The following lines leverage SystemD's sandboxing options to provide
  16. # defense in depth protection at the expense of restricting some flexibility
  17. # in your setup (e.g. placement of your configuration files) or possibly
  18. # reduced performance. See systemd.service(5) and systemd.exec(5) for further
  19. # information.
  20. # NoNewPrivileges=true
  21. # ProtectHome=true
  22. # If you want to use 'ProtectSystem=strict' you should whitelist the PIDFILE,
  23. # any state files and any other files written using 'ReadWritePaths' or
  24. # 'RuntimeDirectory'.
  25. # ProtectSystem=true
  26. # ProtectKernelTunables=true
  27. # ProtectKernelModules=true
  28. # ProtectControlGroups=true
  29. # If your SystemD version supports them, you can add: @reboot, @swap, @sync
  30. # SystemCallFilter=~@cpu-emulation @keyring @module @obsolete @raw-io
  31. [Install]
  32. WantedBy=multi-user.target
复制代码
启动服务
  1. systemctl daemon-reload
  2. systemctl enable haproxy
  3. systemctl start haproxy
  4. systemctl status haproxy
复制代码
如果有异常,可以直接启动调试验证配置文件是否正常
  1. /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.conf -c -V
复制代码
 
3,HAProxy代理使用

先从Ubuntu08:192.168.152.115开始安装,目前集群角色如下
  1. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# patronictl -c /usr/local/pgsql16/patroni/patroni.yml list
  2. + Cluster: pg_cluster_wy_prod (7553485872297570126) ----+----+-----------+
  3. | Member   | Host                 | Role    | State     | TL | Lag in MB |
  4. +----------+----------------------+---------+-----------+----+-----------+
  5. | ubuntu08 | 192.168.152.115:9000 | Replica | streaming |  5 |         0 |
  6. | ubuntu09 | 192.168.152.116:9000 | Replica | streaming |  5 |         0 |
  7. | ubuntu10 | 192.168.152.117:9000 | Leader  | running   |  5 |           |
  8. +----------+----------------------+---------+-----------+----+-----------+
  9. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
  10. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
  11. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
复制代码
3.1,PostgreSQL集群的patroni状态检查
  1. root@ubuntu08:/usr/local/pg_install_package#
  2. root@ubuntu08:/usr/local/pg_install_package# curl -s "http://192.168.152.117:8008/leader" -v 2>&1|grep '200 OK'                #主节点检查正常
  3. < HTTP/1.0 200 OK
  4. root@ubuntu08:/usr/local/pg_install_package# curl -s "http://192.168.152.117:8008/replica" -v 2>&1|grep '200 OK'
  5. root@ubuntu08:/usr/local/pg_install_package#
  6. root@ubuntu08:/usr/local/pg_install_package# curl -s "http://192.168.152.115:8008/replica" -v 2>&1|grep '200 OK'        #从节点1检查正常
  7. < HTTP/1.0 200 OK
  8. root@ubuntu08:/usr/local/pg_install_package#
  9. root@ubuntu08:/usr/local/pg_install_package# curl -s "http://192.168.152.116:8008/replica" -v 2>&1|grep '200 OK'        #从节点2检查正常
  10. < HTTP/1.0 200 OK
  11. root@ubuntu08:/usr/local/pg_install_package#
复制代码
3.2,启动HAproxy
  1. root@ubuntu08:/usr/local/pg_install_package# systemctl status haproxy
  2. ● haproxy.service - HAProxy Load Balancer
  3.      Loaded: loaded (/etc/systemd/system/haproxy.service; disabled; vendor preset: enabled)
  4.      Active: active (running) since Sun 2025-09-28 13:47:47 CST; 10s ago
  5.     Process: 858613 ExecStartPre=/usr/local/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS)
  6.    Main PID: 858635 (haproxy)
  7.      Status: "Ready."
  8.       Tasks: 3 (limit: 4550)
  9.      Memory: 8.7M
  10.      CGroup: /system.slice/haproxy.service
  11.              ├─858635 /usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -d
  12.              └─858639 /usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -d
  13. Sep 28 13:47:47 ubuntu08 haproxy[858639]: Using epoll() as the polling mechanism.
  14. Sep 28 13:47:47 ubuntu08 haproxy[858635]: 00000000:MASTER.accept(0003)=0007 from [unix:1] ALPN=<none>
  15. Sep 28 13:47:47 ubuntu08 haproxy[858635]: [NOTICE]   (858635) : Loading success.
  16. Sep 28 13:47:47 ubuntu08 haproxy[858635]: 00000000:MASTER.srvcls[0007:ffff]
  17. Sep 28 13:47:47 ubuntu08 haproxy[858635]: 00000001:MASTER.clicls[0007:ffff]
  18. Sep 28 13:47:47 ubuntu08 haproxy[858635]: 00000001:MASTER.closed[0007:ffff]
  19. Sep 28 13:47:47 ubuntu08 systemd[1]: Started HAProxy Load Balancer.
  20. Sep 28 13:47:47 ubuntu08 haproxy[858639]: [WARNING]  (858639) : Server pg_rw/ubuntu08 is DOWN, reason: Layer7 wrong status, code: 503, info: "Service Unavailable", check duration: 7ms. 2 active and 0>
  21. Sep 28 13:47:47 ubuntu08 haproxy[858639]: [WARNING]  (858639) : Server pg_rw/ubuntu09 is DOWN, reason: Layer7 wrong status, code: 503, info: "Service Unavailable", check duration: 1ms. 1 active and 0>
  22. Sep 28 13:47:49 ubuntu08 haproxy[858639]: [WARNING]  (858639) : Server pg_ro/ubuntu10 is DOWN, reason: Layer7 wrong status, code: 503, info: "Service Unavailable", check duration: 3ms. 2 active and 0>
  23. root@ubuntu08:/usr/local/pg_install_package#
复制代码
3.3,HAproxy管理后台

HAproxy管理后台:http://192.168.152.115:8080/ 
3.png

3.4,读写分离测试

patronictl -c /usr/local/pgsql16/patroni/patroni.yml list查看集群状态
  1. root@ubuntu10:/usr/local/pg_install_package# patronictl -c /usr/local/pgsql16/patroni/patroni.yml list
  2. + Cluster: pg_cluster_wy_prod (7553485872297570126) ----+----+-----------+
  3. | Member   | Host                 | Role    | State     | TL | Lag in MB |
  4. +----------+----------------------+---------+-----------+----+-----------+
  5. | ubuntu08 | 192.168.152.115:9000 | Replica | streaming |  5 |         0 |
  6. | ubuntu09 | 192.168.152.116:9000 | Replica | streaming |  5 |         0 |
  7. | ubuntu10 | 192.168.152.117:9000 | Leader  | running   |  5 |           |
  8. +----------+----------------------+---------+-----------+----+-----------+
  9. root@ubuntu10:/usr/local/pg_install_package#
复制代码
测试读写分析
  1. #6432 读写端口号,一直重定向到主节点 192.168.152.117
  2. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6432 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  3. inet_server_addr | pg_is_in_recovery
  4. ------------------+-------------------
  5. 192.168.152.117  | f
  6. (1 row)
  7. #6432 读写端口号,一直重定向到主节点 192.168.152.117
  8. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6432 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  9. inet_server_addr | pg_is_in_recovery
  10. ------------------+-------------------
  11. 192.168.152.117  | f
  12. (1 row)
  13. #6433 只读端口号,一直重定向到主节点 192.168.152.115或者116
  14. root@ubuntu10:/usr/local/pg_install_package#
  15. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6433 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  16. inet_server_addr | pg_is_in_recovery
  17. ------------------+-------------------
  18. 192.168.152.115  | t
  19. (1 row)
  20. root@ubuntu10:/usr/local/pg_install_package#
  21. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6433 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  22. inet_server_addr | pg_is_in_recovery
  23. ------------------+-------------------
  24. 192.168.152.116  | t
  25. (1 row)
  26. root@ubuntu10:/usr/local/pg_install_package#
  27. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6433 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  28. inet_server_addr | pg_is_in_recovery
  29. ------------------+-------------------
  30. 192.168.152.115  | t
  31. (1 row)
  32. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6433 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  33. inet_server_addr | pg_is_in_recovery
  34. ------------------+-------------------
  35. 192.168.152.116  | t
  36. (1 row)
  37. root@ubuntu10:/usr/local/pg_install_package# psql "host=192.168.152.115 port=6433 user=postgres dbname=postgres password=******" -c 'select inet_server_addr(),pg_is_in_recovery()'
  38. inet_server_addr | pg_is_in_recovery
  39. ------------------+-------------------
  40. 192.168.152.115  | t
  41. (1 row)
复制代码
 
 
4,keepalived安装

4.1 下载和安装

首先从Ubuntu08这台主机开始安装
  1. wget https://keepalived.org/software/keepalived-2.3.4.tar.gz
  2. #config
  3. ./configure --prefix=/usr/local/
  4. #编译和安装
  5. make && make install
  6. #安装psmisc
  7. apt install -y psmisc
复制代码
keepalived服务文件:/etc/systemd/system/keepalived.server
  1. [Unit]
  2. Description=Keepalive Daemon (LVS and VRRP)
  3. After=network-online.target
  4. Wants=network-online.target
  5. [Service]
  6. Type=forking
  7. PIDFile=/run/keepalived.pid
  8. KillMode=process
  9. EnvironmentFile=/usr/local/keepalived/etc/sysconfig/keepalived
  10. ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
  11. ExecReload=/bin/kill -HUP $MAINPID
  12. [Install]
  13. WantedBy=multi-user.target
复制代码
Ubuntu 08 keepalived配置文件:/usr/local/keepalived/etc/keepalived/keepalived.conf
  1. global_defs {
  2.     router_id ubunt08
  3.     script_user root
  4.     enable_script_security
  5.     notification_syslog facility local1
  6. }
  7. vrrp_script chk_haproxy {
  8.     script "/usr/bin/killall -0 haproxy"
  9.     interval 2
  10.     weight 5
  11.     fall 30
  12.     rise 5
  13.     timeout 2
  14. }
  15. vrrp_instance VI_1 {
  16.     state MASTER        #抢占模式
  17.     interface ens33
  18.     virtual_router_id 51
  19.     priority 100
  20.     advert_int 1
  21.     authentication {
  22.         auth_type PASS
  23.         auth_pass 1111
  24.     }
  25.     virtual_ipaddress {
  26.         192.168.152.119
  27.     }
  28.     track_script {
  29.         chk_haproxy
  30.     }
  31. }
复制代码
 
4.2 keepalived日志设置

keepalived的环境变量配置默认在 yum/apt 安装的在 /etc/sysconfig/keepalived ,源码编译安装的在/usr/local/keepalived/etc/sysconfig/keepalived
  1. 1,修改keepalived.conf配置文件
  2. global_defs {
  3.     # 设置 syslog facility
  4.     notification_syslog facility local1
  5. }
  6. 这里的 local1 可以换成 local0 ~ local7 任意一个,但要和 rsyslog 里对应。
  7. 2,编辑 /etc/rsyslog.d/keepalived.conf,增加一条规则,把 local1.* 的日志写到独立文件里:
  8. local1.*    /var/log/keepalived.log
  9. 3,保存后,重启 rsyslog:
  10. sudo systemctl restart rsyslog
复制代码
启动keepalived
  1. systemctl daemon-reload
  2. systemctl enable keepalived
  3. systemctl start keepalived
  4. systemctl status keepalived
复制代码
 
4.3 keepalived绑定虚拟IP测试
  1. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# ip addr
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 scope host lo
  5.        valid_lft forever preferred_lft forever
  6.     inet6 ::1/128 scope host
  7.        valid_lft forever preferred_lft forever
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  9.     link/ether 00:0c:29:af:4a:a4 brd ff:ff:ff:ff:ff:ff
  10.     inet 192.168.152.115/24 brd 192.168.152.255 scope global ens33
  11.        valid_lft forever preferred_lft forever
  12.     inet 192.168.152.119/32 scope global ens33
  13.        valid_lft forever preferred_lft forever
  14.     inet6 fe80::20c:29ff:feaf:4aa4/64 scope link
  15.        valid_lft forever preferred_lft forever
  16. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
  17. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# systemctl status keepalived
  18. ● keepalived.service - Keepalive Daemon (LVS and VRRP)
  19.      Loaded: loaded (/etc/systemd/system/keepalived.service; enabled; vendor preset: enabled)
  20.      Active: active (running) since Sun 2025-09-28 14:46:40 CST; 2min 9s ago
  21.     Process: 868947 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
  22.    Main PID: 868960 (keepalived)
  23.       Tasks: 2 (limit: 4550)
  24.      Memory: 1.8M
  25.      CGroup: /system.slice/keepalived.service
  26.              ├─868960 /usr/local/keepalived/sbin/keepalived -D -S 0
  27.              └─868961 /usr/local/keepalived/sbin/keepalived -D -S 0
  28. Sep 28 14:46:43 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  29. Sep 28 14:46:43 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  30. Sep 28 14:46:43 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  31. Sep 28 14:46:43 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  32. Sep 28 14:46:48 ubuntu08 Keepalived_vrrp[868961]: (VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.152.119
  33. Sep 28 14:46:48 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  34. Sep 28 14:46:48 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  35. Sep 28 14:46:48 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  36. Sep 28 14:46:48 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  37. Sep 28 14:46:48 ubuntu08 Keepalived_vrrp[868961]: Sending gratuitous ARP on ens33 for 192.168.152.119
  38. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
复制代码
ubunt09 keepalived配置文件(修改router_id,state,priority)
  1. global_defs {
  2.     router_id ubunt09
  3.     script_user root
  4.     enable_script_security
  5.         notification_syslog facility local1
  6. }
  7. vrrp_script chk_haproxy {
  8.     script "/usr/bin/killall -0 haproxy"
  9.     interval 2
  10.     weight 5
  11.     fall 3
  12.     rise 5
  13.     timeout 2
  14. }
  15. vrrp_instance VI_1 {
  16.     state BACKUP
  17.     interface ens33
  18.     virtual_router_id 51
  19.     priority 90
  20.     advert_int 1
  21.     authentication {
  22.         auth_type PASS
  23.         auth_pass 1111
  24.     }
  25.     virtual_ipaddress {
  26.         192.168.152.119
  27.     }
  28.     track_script {
  29.         chk_haproxy
  30.     }
  31. }
复制代码
ubunt10 keepalived配置文件(修改router_id,state,priority)
  1. global_defs {
  2.     router_id ubunt10
  3.     script_user root
  4.     enable_script_security
  5.         notification_syslog facility local1
  6. }
  7. vrrp_script chk_haproxy {
  8.     script "/usr/bin/killall -0 haproxy"
  9.     interval 2
  10.     weight 5
  11.     fall 3
  12.     rise 5
  13.     timeout 2
  14. }
  15. vrrp_instance VI_1 {
  16.     state BACKUP
  17.     interface ens33
  18.     virtual_router_id 51
  19.     priority 80
  20.     advert_int 1
  21.     authentication {
  22.         auth_type PASS
  23.         auth_pass 1111
  24.     }
  25.     virtual_ipaddress {
  26.         192.168.152.119
  27.     }
  28.     track_script {
  29.         chk_haproxy
  30.     }
  31. }
复制代码
 
4.4 keepalived虚拟IP飘移测试

1,Ubuntu08主节点关闭keepalived
  1. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# systemctl stop keepalived
  2. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
  3. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# ip addr
  4. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  5.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  6.     inet 127.0.0.1/8 scope host lo
  7.        valid_lft forever preferred_lft forever
  8.     inet6 ::1/128 scope host
  9.        valid_lft forever preferred_lft forever
  10. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  11.     link/ether 00:0c:29:af:4a:a4 brd ff:ff:ff:ff:ff:ff
  12.     inet 192.168.152.115/24 brd 192.168.152.255 scope global ens33
  13.        valid_lft forever preferred_lft forever
  14.     inet6 fe80::20c:29ff:feaf:4aa4/64 scope link
  15.        valid_lft forever preferred_lft forever
  16. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
复制代码
2,Ubuntu09节点接替keepalived 
  1. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5#
  2. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5# systemctl status keepalived
  3. ● keepalived.service - Keepalive Daemon (LVS and VRRP)
  4.      Loaded: loaded (/etc/systemd/system/keepalived.service; enabled; vendor preset: enabled)
  5.      Active: active (running) since Sun 2025-09-28 16:16:21 CST; 33s ago
  6.     Process: 847309 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
  7.    Main PID: 847324 (keepalived)
  8.       Tasks: 2 (limit: 4550)
  9.      Memory: 2.5M
  10.      CGroup: /system.slice/keepalived.service
  11.              ├─847324 /usr/local/keepalived/sbin/keepalived -D -S 0
  12.              └─847325 /usr/local/keepalived/sbin/keepalived -D -S 0
  13. Sep 28 16:16:51 ubuntu09 Keepalived_vrrp[847325]: (VI_1) Backup received priority 0 advertisement
  14. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: (VI_1) Receive advertisement timeout
  15. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: (VI_1) Entering MASTER STATE
  16. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: (VI_1) setting VIPs.
  17. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: (VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.152.119
  18. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: Sending gratuitous ARP on ens33 for 192.168.152.119
  19. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: Sending gratuitous ARP on ens33 for 192.168.152.119
  20. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: Sending gratuitous ARP on ens33 for 192.168.152.119
  21. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: Sending gratuitous ARP on ens33 for 192.168.152.119
  22. Sep 28 16:16:52 ubuntu09 Keepalived_vrrp[847325]: Sending gratuitous ARP on ens33 for 192.168.152.119
  23. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5#
  24. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5# ip addr
  25. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  26.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  27.     inet 127.0.0.1/8 scope host lo
  28.        valid_lft forever preferred_lft forever
  29.     inet6 ::1/128 scope host
  30.        valid_lft forever preferred_lft forever
  31. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  32.     link/ether 00:0c:29:4e:c2:b0 brd ff:ff:ff:ff:ff:ff
  33.     inet 192.168.152.116/24 brd 192.168.152.255 scope global ens33
  34.        valid_lft forever preferred_lft forever
  35.     inet 192.168.152.119/32 scope global ens33
  36.        valid_lft forever preferred_lft forever
  37.     inet6 fe80::20c:29ff:fe4e:c2b0/64 scope link
  38.        valid_lft forever preferred_lft forever
  39. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5#
复制代码
3,Ubuntu08主节点启动keepalived,抢回虚拟ip
  1. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# systemctl start keepalived
  2. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# ip addr
  3. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  4.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  5.     inet 127.0.0.1/8 scope host lo
  6.        valid_lft forever preferred_lft forever
  7.     inet6 ::1/128 scope host
  8.        valid_lft forever preferred_lft forever
  9. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  10.     link/ether 00:0c:29:af:4a:a4 brd ff:ff:ff:ff:ff:ff
  11.     inet 192.168.152.115/24 brd 192.168.152.255 scope global ens33
  12.        valid_lft forever preferred_lft forever
  13.     inet 192.168.152.119/32 scope global ens33
  14.        valid_lft forever preferred_lft forever
  15.     inet6 fe80::20c:29ff:feaf:4aa4/64 scope link
  16.        valid_lft forever preferred_lft forever
  17. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4# systemctl status keepalived
  18. ● keepalived.service - Keepalive Daemon (LVS and VRRP)
  19.      Loaded: loaded (/etc/systemd/system/keepalived.service; enabled; vendor preset: enabled)
  20.      Active: active (running) since Sun 2025-09-28 16:19:07 CST; 18s ago
  21.     Process: 879342 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
  22.    Main PID: 879356 (keepalived)
  23.       Tasks: 2 (limit: 4550)
  24.      Memory: 1.6M
  25.      CGroup: /system.slice/keepalived.service
  26.              ├─879356 /usr/local/keepalived/sbin/keepalived -D -S 0
  27.              └─879358 /usr/local/keepalived/sbin/keepalived -D -S 0
  28. Sep 28 16:19:11 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  29. Sep 28 16:19:11 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  30. Sep 28 16:19:11 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  31. Sep 28 16:19:11 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  32. Sep 28 16:19:16 ubuntu08 Keepalived_vrrp[879358]: (VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.152.119
  33. Sep 28 16:19:16 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  34. Sep 28 16:19:16 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  35. Sep 28 16:19:16 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  36. Sep 28 16:19:16 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  37. Sep 28 16:19:16 ubuntu08 Keepalived_vrrp[879358]: Sending gratuitous ARP on ens33 for 192.168.152.119
  38. root@ubuntu08:/usr/local/pg_install_package/keepalived-2.3.4#
复制代码
4,Ubuntu09上的虚拟IP被抢回(Ubuntu08主节点启动keepalived,抢回虚拟ip)
  1. oot@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5# ip addr
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 scope host lo
  5.        valid_lft forever preferred_lft forever
  6.     inet6 ::1/128 scope host
  7.        valid_lft forever preferred_lft forever
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  9.     link/ether 00:0c:29:4e:c2:b0 brd ff:ff:ff:ff:ff:ff
  10.     inet 192.168.152.116/24 brd 192.168.152.255 scope global ens33
  11.        valid_lft forever preferred_lft forever
  12.     inet 192.168.152.119/32 scope global ens33
  13.        valid_lft forever preferred_lft forever
  14.     inet6 fe80::20c:29ff:fe4e:c2b0/64 scope link
  15.        valid_lft forever preferred_lft forever
  16. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5# ip addr
  17. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  18.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  19.     inet 127.0.0.1/8 scope host lo
  20.        valid_lft forever preferred_lft forever
  21.     inet6 ::1/128 scope host
  22.        valid_lft forever preferred_lft forever
  23. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  24.     link/ether 00:0c:29:4e:c2:b0 brd ff:ff:ff:ff:ff:ff
  25.     inet 192.168.152.116/24 brd 192.168.152.255 scope global ens33
  26.        valid_lft forever preferred_lft forever
  27.     inet6 fe80::20c:29ff:fe4e:c2b0/64 scope link
  28.        valid_lft forever preferred_lft forever
  29. root@ubuntu09:/usr/local/pg_install_package/haproxy-3.2.5#
复制代码

相关推荐

您需要登录后才可以回帖 登录 | 立即注册