如何建设销售型企业网站,蚌埠百度做网站,做网站 博客,微信公众号和wordpressRabbitMQ 集群
通常情况下#xff0c;在集群中我们把每一个服务称之为一个节点#xff0c;在 RabbitMQ 集群中#xff0c;节点类型可以分为两种#xff1a;
内存节点#xff1a;元数据存放于内存中。为了重启后能同步数据#xff0c;内存节点会将磁盘节点的地址存放于磁…RabbitMQ 集群
通常情况下在集群中我们把每一个服务称之为一个节点在 RabbitMQ 集群中节点类型可以分为两种
内存节点元数据存放于内存中。为了重启后能同步数据内存节点会将磁盘节点的地址存放于磁盘之中除此之外如果消息被持久化了也会存放于磁盘之中因为内存节点读写速度快一般客户端会连接内存节点。磁盘节点元数据存放于磁盘中默认节点类型需要保证至少一个磁盘节点否则一旦宕机无法恢复数据从而也就无法达到集群的高可用目的。
PS元数据指的是包括队列名字属性、交换机的类型名字属性、绑定信息、vhost等基础信息不包括队列中的消息数据。
RabbitMQ 中的集群主要有两种模式普通集群模式和镜像队列模式。
普通集群模式
在普通集群模式下集群中各个节点之间只会相互同步元数据也就是说消息数据不会被同步。那么问题就来了假如我们连接到 A 节点但是消息又存储在 B 节点又怎么办呢
不论是生产者还是消费者假如连接到的节点上没有存储队列数据那么内部会将其转发到存储队列数据的节点上进行存储。虽然说内部可以实现转发但是因为消息仅仅只是存储在一个节点那么假如这节点挂了消息是不是就没有了因此这种普通集群模式并没有达到高可用的目的。
镜像队列模式
普通集群模式下不同节点之间只会相互同步元数据交换机、队列、绑定关系、vhost的定义而不会同步消息。例如队列 1 的消息只存储在节点 1 上节点 2 和节点 3只 同步了交换机和队列的元数据但是没有同步消息。
假如生产者连接的是节点 3要将消息通过交换机A路由到队列 1最终消息还是会转发到节点 1 上存储同理如果消费者连接的是节点 2要从队列 1 上拉取消息最终消息会从节点1转发到节点 2其它节点起到一个路由的作用如果节点1挂掉则队列 1 的全部数据就会丢失。
镜像队列模式下节点之间不仅仅会同步元数据消息内容也会在镜像节点间同步可用性更高。这种方案提升可用性的同时也会因为同步数据带来的网络开销从而在一定程度上影响到性能。
基于 HAProxy Keepalived 高可用集群
假如一个 RabbitMQ 集群中有多个内存节点我们应该连接到哪一个节点呢这个选择的策略如果放在客户端做那么会有很大的弊端最严重的的就是每次扩展集群都要修改客户端代码所以这种方式并不是很可取所以我们在部署集群的时候就需要一个中间代理组件这个组件要能够实现服务监控和转发比如 Redis 中的 Sentinel哨兵集群模式哨兵就可以监听 Redis 节点并实现故障转移。
在 RabbitMQ 集群中通过 Keepalived 和 HAProxy 两个组件实现了集群的高可用性和负载均衡功能。
HAProxy
HAProxy 是一个开源的、高性能的负载均衡软件同样可以作为负载均衡软件的还有 nginxlvs 等。 HAproxy 支持 7 层负载均衡和 4 层负载均衡。
负载均衡
所谓的 7 层负载均衡和 4 层负载均衡针对的是 OSI 模型而言如下图所示就是一个 OSI 通信模型
7蹭应用层 应用层 HTTP、FTP、DNS、URI、HTML、TLS/SSL、SMTP、POP、IMAP、TELNET、SSH 应用程序6层表示层5层会话层4层传输层 传输层 TCP、UDP、SCTP、DCCP 操作系统3层网络层 网络层 ARP、IP、ICMP、RIP 2层数据链路层网络接口层设备驱动程序网络接口1层物理层
上图中看到第 7 层对应了应用层第 4 层对应了传输层。常用的负载均衡软件如 nginx 一般工作在第 7 层lvsLinux Virtual Server一般工作在第 4 层。
4 层负载
4 层负载使用了 NAT Network Address Translation技术即网络地址转换。收到客户端请求时可以通过修改数据包里的源 IP 和端口然后把数据包转发到对应的目标服务器。4 层负载均衡只能根据报文中目标地址和源地址对请求进行转发无法判断或者修改请求资源的具体类型。
7 层负载
根据客户端请求的资源路径转发到不同的目标服务器。
高可用 HAProxy
HAProxy 虽然实现了负载均衡但是假如只是部署一个 HAProxy那么其本身也存在宕机的风险。一旦 HAProxy 宕机那么就会导致整个集群不可用所以我们也需要对 HAProxy 也实现集群那么假如 HAProxy 也实现了集群客户端应该连接哪一台服务呢问题似乎又回到了起点陷入了无限循环中...
Keepalived
为了实现 HAProxy 的高可用需要再引入一个 Keepalived 组件Keepalived 组件主要有以下特性
具有负载功能可监控集群中的节点状态如果集群中某一个节点宕机可以实现故障转移。其本身也可以实现集群但是只能有一个 master 节点。master 节点会对外提供一个虚拟 IP应用端只需要连接这一个 IP 就行了。可以理解为集群中的 HAProxy 节点会同时争抢这个虚拟 IP哪个节点争抢到就由哪个节点来提供服务。
VRRP 协议
VRRP 协议即虚拟路由冗余协议Virtual Router Redundancy Protocol。Keepalived 中提供的虚拟 IP 机制就属于 VRRP它是为了避免路由器出现单点故障的一种容错协议。
搭建高可用 RabbitMQ 集群
集群环境准备
准备三台虚拟机分别安装好 Erlang 和 RabbitMQ可以用克隆功能。
本文服务器环境CentOS7
[CentOS7] Install RabbitMQ Using PackageCloud Yum Repository
服务器 A192.168.189.156 RabbitMQ 内存节点 HAPRoxy Keepalivedmaster
服务器 B192.168.189.157 RabbitMQ 内存节点 HAPRoxy Keepalivedbackup
服务器 C192.168.189.158 RabbitMQ 磁盘节点
Keepalived Virtual IP 192.168.189.159
集群网络架构 RabbitMQ 环境变量
环境变量配置文件 rabbitmq-env.conf 默认配置在 /etc/rabbitmq 目录如果不存在直接创建即可RabbitMQ 应用会自动加载。rabbitmq-env.conf 包含重写 RabbitMQ 脚本和 CLI 工具中内置默认值的环境变量。
该文件由系统 shell 解释因此应包含一系列 shell 环境变量定义。允许使用普通的shell语法因为文件的源代码是使用shell “.” 运算符包括以#号开头的行注解。
按照优先级顺序启动脚本从 shell 环境变量、rabbitmq-env.conf 和最后从内置的默认值获取它们的值。例如对于 RABBITMQ_NODENAME 设置首先检查 shell 环境变量中的RABBITMQ_NODENAME 如果不存在或等于空字符串则选中 rabbitmq-env.conf 中的 NODENAME如果它也不存在或等于空字符串则使用启动脚本中的默认值。
rabbitmq-env.conf 中的变量名始终等于环境变量名去掉了 RABBITMQ_ 前缀环境变量中的 RABBITMQ_NODE_PORT 在 rabbitmq-env.conf 中的名字是 NODE_PORT。
RabbitMQ 节点
RabbitMQ 节点以节点名称作为标识而节点名称由两部分组成前缀 (默认是rabbit) 和主机名。当节点启动时它会检查是否已为其分配了节点名如果配置文件 rabbitmq-env.conf 中没有配置则节点将解析其主机名并在其前面添加 rabbit 作为其节点名。
如果在给定的主机上运行多个节点它们必须使用不同的前缀例如rabbit1hostname 和 rabbit2hostname。如果系统使用完全限定域名作为主机名RabbitMQ 节点和 CLI 工具必须配置为使用长节点名称。对于服务器节点需要将 RABBITMQ_USE_LONGNAME 环境变量设置为 true对于 CLI 工具必须设置 RABBITMQ_USE_LONGNAME 或 指定 –longnames 选项。例如rabbitcentos.qq.com 其中 rabbit 为前缀centos 是主机名qq.com 为节点的域名。
在集群中节点名称必须是唯一的每个节点使用节点名称来标识和联系彼此这意味着必须解析每个节点名的主机名部分。RabbitMQ 默认节点名称是 rabbit主机名 如果想自定义节点名称则需要在配置文件 /etc/rabbitmq/rabbitmq-env.conf 中配置
NODENAMErabbit节点名
配置 .erlang.cookie
.erlang.cookie 文件中的字符串相当于一个密钥一个节点要想加入某个集群必须和所有节点的 .erlang.cookie 文件内容一致所以通常将主节点的 .erlang.cookie 文件复制给其它节点。这里以 192.168.189.158 作为主节点.erlang.cookie 文件位置需要在 RabbitMQ 启动日志中查看
cat /var/log/rabbitmq/rabbitcentos158.log
2023-02-26 21:26:40.90876108:00 [info] 0.222.0 Starting RabbitMQ 3.10.0 on Erlang 23.3.4.11 [emu]
2023-02-26 21:26:40.90876108:00 [info] 0.222.0 Copyright (c) 2007-2022 VMware, Inc. or its affiliates.
2023-02-26 21:26:40.90876108:00 [info] 0.222.0 Licensed under the MPL 2.0. Website: https://rabbitmq.com
2023-02-26 21:26:40.91275508:00 [info] 0.222.0
2023-02-26 21:26:40.91275508:00 [info] 0.222.0 node : rabbitcentos158
2023-02-26 21:26:40.91275508:00 [info] 0.222.0 home dir : /var/lib/rabbitmq
2023-02-26 21:26:40.91275508:00 [info] 0.222.0 config file(s) : (none)
2023-02-26 21:26:40.91275508:00 [info] 0.222.0 cookie hash : 2cPR2mBWsaQ6fP0SWZ1QzA
2023-02-26 21:26:40.91275508:00 [info] 0.222.0 log(s) : /var/log/rabbitmq/rabbitcentos158.log
2023-02-26 21:26:40.91275508:00 [info] 0.222.0 : /var/log/rabbitmq/rabbitcentos158_upgrade.log其中 home dir 即为 .erlang.cookie 文件位置复制主节点服务器 .erlang.cookie 文件内容到其它两个节点使三台服务器中的 .erlang.cookie 内容一致。
配置 hosts
配置三个服务器节点的 /etc/hosts 文件添加节点名和节点IP的映射关系
192.168.189.156 centos156
192.168.189.157 centos157
192.168.189.158 centos158
重启网络 service network restart 测试是否能够互相 ping 通。
建立集群
注在配置 .erlang.cookie 和 hosts 之前不要启动 RabbitMQ 节点。
建立集群之前首先启动主节点 192.168.189.158 (磁盘节点)
systemctl start rabbitmq-server.service
然后分别启动其余两个子节点 (内存节点) 并加入集群
# 启动 RabbitMQ 服务
systemctl start rabbitmq-server.service
# 暂停应用以便加入集群
rabbitmqctl stop_app
# 清除全部数据(可选)
rabbitmqctl reset
# 作为内存节点加入集群
rabbitmqctl join_cluster --ram rabbitcentos158
# 恢复应用运行
rabbitmqctl start_app 查看集群状态
rabbitmqctl cluster_status
在任一节点的后台管理页面查看 配置镜像队列
在主节点执行如下命令(添加一个节点其它节点也都会有该策略
# 设置集群所有节点及全部队列进行镜像
rabbitmqctl set_policy ha-all ^ {ha-mode:all}
镜像队列详细配置可参考
RabbitMQ集群配置镜像队列 - CSDNhttps://blog.csdn.net/weixin_47026543/article/details/113563395
Classic Queue Mirroring — RabbitMQhttps://www.rabbitmq.com/ha.html
管理集群
# 退出集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
# 移除节点
# 关闭要移除的节点A
rabbitmqctl stop_app
# 在其他节点移除节点A
rabbitmqctl forget_cluster_node rabbitrabbitName
负载均衡-HAProxy
安装HAProxy
在两个内存节点156和157分别安装 HAProxy
yum -y install haproxy
配置 HAProxy
cd /etc/haproxy/
cp haproxy.cfg haproxy.cfg.bak
配置文件内容全部覆盖
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy # 改变当前工作目录
pidfile /var/run/haproxy.pid # haproxy的pid存放路径启动进程的用户必须有权限访问此文件
maxconn 4000 # 最大连接数默认4000
user root # 指定haproxy运行时的用户身份
group root # 指定haproxy运行时的用户组
daemon # 创建1个进程进入deamon模式运行此参数要求将运行模式设置为daemon
stats socket /var/lib/haproxy/stats # 创建监控所用的套接字目录
#---------------------------------------------------------------------
# defaults settings
#---------------------------------------------------------------------
# 注意因为要使用tcp的负载需要屏蔽掉与http相关的默认配置
defaults
mode http # 默认的模式mode { tcp|http|health }tcp是4层http是7层health只会返回OK
log global
# option httplog # 采用http日志格式
option dontlognull # 启用该项日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
# option http-server-close # 每次请求完毕后主动关闭http通道
# option forwardfor except 127.0.0.0/8 # 如果后端服务器需要获得客户端真实ip需要配置的参数可以从Http Header中获得客户端ip
option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 # 3次连接失败就认为服务不可用也可以通过后面设置
# timeout http-request 10s # http请求超时时间
timeout queue 1m # 队列超时时间
timeout connect 10s # 连接超时时间
timeout client 1m # 客户端连接超时时间
timeout server 1m # 服务器端连接超时时间
# timeout http-keep-alive 10s # 持久连接超时时间
timeout check 10s # 设置超时检查超时时间
maxconn 3000 # 最大连接数
###################### HAProxy统计页面配置 ######################################
listen status
bind 0.0.0.0:1080 # 监听端口
mode http # http的7层模式
stats enable
stats refresh 30s # 每隔?秒自动刷新监控页面
stats uri /haproxy/stats # 设置监控页面的url访问路径(http://localhost:1080/haproxy/stats)
stats auth admin:123456 # 设置监控页面的用户和密码(可配置多个用户)
stats realm (Haproxy\ statistic) # 监控页面的提示信息
stats hide-version # 隐藏监控页面版本信息
stats admin if TRUE # 手工启用/禁用后端服务器
###################### RabbitMQ集群web管理页面负载均衡配置 #######################
listen rabbitmq_admin
bind 0.0.0.0:15670 # 监听端口
balance roundrobin
server rmq156 192.168.189.156:15672
server rmq157 192.168.189.157:15672
####################### RabbitMQ集群负载均衡配置 #################################
listen rabbitmq_cluster
bind 0.0.0.0:5670
mode tcp# 负载均衡算法支持 roundrobin,source,static-rr,leastconn,uri 等算法
balance roundrobin # 轮询算法# check inter 5000 是检测心跳频率
# rise 2是2次正确认为服务器可用
# fall 3是3次失败认为服务器不可用
server rmq156 192.168.189.156:5672 check inter 5000 rise 2 fall 3
server rmq157 192.168.189.157:5672 check inter 5000 rise 2 fall 3
启动 HAProxy
分别启动156和157的 HAProxy
# yum方式
systemctl start haproxy# 源码方式: 通过配置文件启动
haproxy -f /etc/haproxy/haproxy.cfg启动报错
源码方式可正常启动使用 systemctl 命令无法启动服务查看服务状态日志如下
一、报错信息为cannot bind socket [0.0.0.0:xxxx]
rootcentos156:/etc/haproxy # systemctl status haproxy
● haproxy.service - HAProxy Load BalancerLoaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)Active: failed (Result: exit-code) since 一 2023-02-27 22:56:42 CST; 41s agoProcess: 14563 ExecStart/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (codeexited, status1/FAILURE)Main PID: 14563 (codeexited, status1/FAILURE)2月 27 22:56:42 centos156 systemd[1]: Started HAProxy Load Balancer.
2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: [ALERT] 057/225642 (14566) : Starting proxy status: cannot bind socket [0.0.0.0:1080]
2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: [ALERT] 057/225642 (14566) : Starting proxy rabbitmq_admin: cannot bind socket [0.0.0.0:15670]
2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: [ALERT] 057/225642 (14566) : Starting proxy rabbitmq_cluster: cannot bind socket [0.0.0.0:5670]
2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: haproxy-systemd-wrapper: exit, haproxy RC1
2月 27 22:56:42 centos156 systemd[1]: haproxy.service: main process exited, codeexited, status1/FAILURE
2月 27 22:56:42 centos156 systemd[1]: Unit haproxy.service entered failed state.
2月 27 22:56:42 centos156 systemd[1]: haproxy.service failed.
1. 检查是否开启防火墙以及端口是否被占用
# 查看是否开启防火墙
systemctl status firewalld
# 查看端口是否被占用
netstat -tunlp | grep 1080
2. 查看 HAProxy 服务器中是否开启 Apache 或 Nginx 等 WEB 服务如果有请先停掉这些服务。
2. 尝试关闭 selinux 或者 执行以下命令
setsebool -P haproxy_connect_any1
3. HAProxy 配置了本机 IP 或 0.0.0.0 以外的 IP比如虚拟 IP (Virtual IP)
1) # HAProxy 绑定非本机 IP 需要在 /etc/sysctl.conf 文件中进行配置
# 修改内核参数
vim /etc/sysctl.conf
# 没有就新增此条记录
net.ipv4.ip_nonlocal_bind 1
# 保存使结果生效
sysctl -p
2) # 确认是否开启内核转发功能
# 临时开启
echo 1 /proc/sys/net/ipv4/ip_forward
# 永久生效
echo net.ipv4.ip_forward 1 /etc/sysctl.conf
Haproxy启动故障Starting proxy:cannot bind sockehttps://blog.csdn.net/qq_31889553/article/details/102852256
HAProxy cannot bind socket [0.0.0.0:8888] - Stack Overflowhttps://stackoverflow.com/questions/34793885/haproxy-cannot-bind-socket-0-0-0-08888
二、报错信息为 Cannot create pidfile /run/haproxy.pid
rootcentos156:/etc/haproxy # systemctl status haproxy
● haproxy.service - HAProxy Load BalancerLoaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)Active: failed (Result: exit-code) since 一 2023-02-27 23:20:13 CST; 9s agoProcess: 16010 ExecStart/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (codeexited, status1/FAILURE)Main PID: 16010 (codeexited, status1/FAILURE)2月 27 23:20:13 centos156 systemd[1]: Started HAProxy Load Balancer.
2月 27 23:20:13 centos156 haproxy-systemd-wrapper[16010]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
2月 27 23:20:13 centos156 haproxy-systemd-wrapper[16010]: [ALERT] 057/232013 (16012) : [/usr/sbin/haproxy.main()] Cannot create pidfile /run/haproxy.pid
2月 27 23:20:13 centos156 haproxy-systemd-wrapper[16010]: haproxy-systemd-wrapper: exit, haproxy RC1
2月 27 23:20:13 centos156 systemd[1]: haproxy.service: main process exited, codeexited, status1/FAILURE
2月 27 23:20:13 centos156 systemd[1]: Unit haproxy.service entered failed state.
2月 27 23:20:13 centos156 systemd[1]: haproxy.service failed.
1. 检查 haproxy.cfg 配置的用户 user 是否拥有 root 权限
2. 尝试删除 /run/haproxy.pid 并重新启动 HAProxy 服务
测试 HAProxy
测试浏览器能正常访问以下两个地址的 RabbitMQ 管理页面
192.168.189.156:15670
192.168.189.157:15670
测试浏览器能正常访问以下两个地址的 HAProxy 监控页面 (amdin/123456)
192.168.189.156:1080/haproxy/stats
192.168.189.157:1080/haproxy/stats 主备-Keepalived
安装Keepalived
yum install -y keepalived
配置Keepalived
cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
156 作为主机 master 配置如下
global_defs {router_id NodeA # 路由ID主机与备机不能相同script_user rootenable_script_security
}vrrp_script chk_haproxy { # 自定义监控脚本script /etc/keepalived/check_haproxy.shinterval 5weight 2
}vrrp_instance VI_1 {state MASTER # 这里标记为主机Masterinterface ens33 # 这里的必须和你的网卡一致ipconfig获得virtual_router_id 1 # 这里表示路由的唯一标识与备机一致priority 100 # 配置优先级备机要小于主机advert_int 1 # 设置主备之间的检查时间单位为sauthentication {auth_type PASS # 配置认证方式auth_pass root # 配置认证密码}virtual_ipaddress { # 配置虚拟ip地址主备需保持一致可设置多个192.168.189.159}track_script {chk_haproxy}
}
157 作为备机 backup 配置如下
global_defs {router_id NodeB # 路由ID主机与备机不能相同script_user rootenable_script_security
}vrrp_script chk_haproxy { # 自定义监控脚本script /etc/keepalived/check_haproxy.shinterval 5weight 2
}vrrp_instance VI_1 {state BACKUP # 这里标记为备机Backupinterface ens33 # 这里的必须和你的网卡一致ipconfig获得virtual_router_id 1 # 这里表示路由的唯一标识与备机一致priority 50 # 配置优先级备机要小于主机advert_int 1 # 设置主备之间的检查时间单位为sauthentication {auth_type PASS # 配置认证方式auth_pass root # 配置认证密码}virtual_ipaddress { # 配置虚拟ip地址主备需保持一致可设置多个192.168.189.159}track_script {chk_haproxy}
}
编写监控脚本
vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service haproxy start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi
# 添加可执行权限
chmod 755 /etc/keepalived/check_haproxy.sh check_haproxy.sh 脚本作用
如果 HAProxy 服务挂了尝试重启如果重启不成功则关闭 Keepalived 服务自动切换到 backup。
启动 Keepalived
先启动 156 master 再启动 157 backup
service keepalived start
监测 Keepalived
1. 查看 Keepalived 状态
service keepalived status
2. 查看 Keepalived 日志输出
tail -200f /var/log/messages
3. 查看添加的虚拟IP (master)
ip add show
4. master 模拟异常关闭
service keepalived stop
master 关闭后对应的虚拟IP也会消失backup 成为新的 master异常 master 重启后会重新恢复为 master 。
5. master 模拟 HAProxy 异常关闭
service haproxy stop
测试 HAProxy 异常关闭后打印 Keepalived 日志查看监控脚本是否正常执行。
# 打印 Keepalived 日志
tail -200f /var/log/messages
# 正常启动脚本日志信息(注意succeeded)
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Entering MASTER STATE
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) setting protocol VIPs.
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.189.159
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:05 centos156 avahi-daemon[816]: Registering new address record for 192.168.189.159 on ens33.IPv4.
Feb 28 03:42:06 centos156 Keepalived_vrrp[37334]: VRRP_Script(chk_haproxy) succeeded
Feb 28 03:42:07 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Changing effective priority from 100 to 102
Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.189.159
Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159
Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159解决 Keepalived 监测脚本一直不执行https://blog.csdn.net/Bb15070047748/article/details/106276491
解决Keepalived脚本启动时warning、unsafe、not executable - CSDNhttps://blog.csdn.net/Kangyucheng/article/details/110122893
测试虚拟 IP
浏览器通过虚拟IP访问能正常打开 RabbitMQ 管理页面 和 HAProxy 监控页面 应用访问集群
1. IP 为 Keepalived 中配置的虚拟IP
2. PORT 为 RabbitMQ 默认的 5672
3. 账号密码同 RabbitMQ 参考资料
单机RabbitMQ集群的搭建及高可用集群原理分析 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/350446326
高可用RabbitMQ集群的搭建和使用 - 劈天造陆 - 博客园 (cnblogs.com)https://www.cnblogs.com/java-spring/p/8855862.html
HAProxy安装与配置 - 我爱吃芹菜~ - 博客园 (cnblogs.com)https://www.cnblogs.com/leixixi/p/14749322.html
rabbitmq搭建集群踩坑记 - 腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1683781