RabbitMQ + Haproxy 实现高可用镜像集群
2023-02-18 16:43:34 时间
1.准备阶段
准备三台服务器 案例使用三台腾讯云服务器
43.138.xxx.xxx node1
82.157.xxx.xxx node2
39.105.xxx.xxx node3
结构图
2.安装阶段
修改节点名:
查看三台服务器的主机名称,并分别修改主机名为 node1/2/3
vim /etc/hostname 修改主机名称
修改HOST: 注意:使用外网服务器时需要注意IP地址的填写
在三台服务器分别执行当前命令
vim /etc/hosts
注意:如果是三台外网服务器则不能按照该写法
43.138.xxx.xxx node1
82.157.xxx.xxx node2
39.105.xxx.xxx node3
例如 在node1节点中的中的hosts文件应该写为
Node1的内网IP node1
82.157.xxx.xxx node2
39.105.xxx.xxx node3
查看内网IP : ifconfig -a
把主节点Node1的Cookie复制给其他从节点(Node2、 Node3)
RabbitMQ集群需要在每个从节点上使用与主节点一样的ErLang Cookie,因此需要使用远程操作命令,将主节点的Cookies复制给从节点(从节点服务器有配置root用户需要输入对应密码)
在主节点中执行如下命令
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie
组成集群服务
为集群所有主机(node1/2/3)执行组成集群命令
rabbitmq-server -detached
把从节点(Node2、Node3)加入集群中
分别在Node2/3中执行如下命令
1、停止MQ服务
rabbitmqctl stop_app
1、重置MQ
rabbitmqctl reset
3、加入主节点
rabbitmqctl join_cluster rabbit@node1
4、重启服务
rabbitmqctl start_app(只启动应用服务)
查看集群状态
rabbitmqctl cluster_status
集群移除从节点
1、停止从节点服务并重置
rabbitmqctl stop_app
rabbitmqctl reset
2、主节点上移除从节点
rabbitmqctl forget_cluster_node rabbit@主机名称
例如:rabbitmqctl forget_cluster_node rabbit@node2 就是移除从节点node2
搭建镜像队列
创建镜像配置
参数信息
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
all表示在集群所有的节点上进行镜像
exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定,个数包含主机
nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 镜像队列中消息的同步方式,有效值为 automatic、manually
Priority: 可选参数, policy的优先级
整合HaProxy
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
安装HaProxy
1、安装依赖
yum install -y gcc wget
2、下载HaProxy
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz
3、解压HaProxy
tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
4、安装HaProxy
cd /usr/local/haproxy-1.6.5
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy
5、赋权
groupadd -r -g 149 haproxy
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
6、创建配置文件
touch /etc/haproxy/haproxy.cfg
配置文件详情
#logging options
global
log 127.0.0.1 local0 info
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 20
pidfile /var/run/haproxy.pid
defaults
log global
#使用4层代理模式,”mode http”为7层代理模式
mode tcp
#if you set mode to tcp,then you nust change tcplog into httplog
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5s
##客户端空闲超时时间为 60秒 则HA 发起重连机制
clitimeout 60s
##服务器端链接超时时间为 15秒 则HA 发起重连机制
srvtimeout 15s
#front-end IP for consumers and producters
listen rabbitmq_cluster
# 代理的端口号
bind 0.0.0.0:5678
#配置TCP模式
mode tcp
#balance url_param userid
#balance url_param session_id check_post 64
#balance hdr(User-Agent)
#balance hdr(host)
#balance hdr(Host) use_domain_only
#balance rdp-cookie
#balance leastconn
#balance source //ip
#简单的轮询
balance roundrobin
#rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
server node1 43.138.xxx.xxx:5672 check inter 5000 rise 2 fall 2
server node2 82.157.xxx.xxx:5672 check inter 5000 rise 2 fall 2
server node3 43.142.xxx.xxx:5672 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息,152机器bind的就是192.168.226.152:8100
listen stats
bind 0.0.0.0:8100
mode http
option httplog
stats enable
#设置haproxy监控地址为http://localhost:8100/rabbitmq-state
stats uri /rabbitmq-state
stats refresh 5s
启动HaProxy
1、启动HaProxy
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
2、查看HaProxy状态
ps -ef | grep haproxy
3、访问Web控制台
http://43.138.xxx.xxx:8100/rabbitmq-state
Java 访问
相关文章
- 发展多年的Web3,为何尚未实现完善的信誉体系?
- 以太坊最热Layer2之一ZK-Rollup凭什么被V神看好?
- Web2 vs. Web3,社交工具的发展会有什么变化?
- 动态代理是怎么 “动” 起来的?
- 腾讯云与流媒体服务商BeLive达成合作,助力提升东南亚与周边地区直播水平
- 新知 | 腾讯云视立方特效引擎优秀实践——终端篇
- AXP-QUIC:自适应X路QUIC网络传输加速
- 开箱即用区块链是一种什么体验?Lighthouse长安链给你答案
- 【OrcaTerm知识期刊】第三期:文件下载技术揭秘
- 15个问题自查你真的了解java编译优化吗?
- 实现服务器和客户端数据交互,Java Socket有妙招
- 世界杯专题看板丨今晚8点开战,数据先睹为快!
- Crack App | 某合伙人登录参数 apisign 逻辑分析
- Crack App | 某都市魔幻 FM 请求参数 sign 的加密分析
- Crack App | 某赢+ 二手车 App 登录参数加密逻辑分析
- RocketMQ: 技术架构与启动流程
- 目前社区关于ServiceMesh的主要方向
- k8s的架构是怎么变成现在这个样子
- Envoy的lib库拓扑关系
- 转发“Istio共享代理新模式Ambient Mesh”