RabbitMQ镜像队列集群3.7.17版本(生产环境)

说明

无论安装那个版本的rabbitmq一定要确定好rabbimq对应的erlang版本范围,否则会出各种问题,rabbitmq这点很烦。

查询地址如下:
https://www.rabbitmq.com/which-erlang.html

按官方说明rabbitmq-3.7.17要求erlang版本范围:20.3.x~22.0.x之间

一、单机版RabbitMQ部署

1.1 安装依赖包

# 安装依赖包
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson
yum -y install epel-release   # 之后再执行yum -y install #socat,有先后顺序  
yum -y install socat

1.2 安装erlang环境

#安装Erlang Solutions仓库到你的系统, 如果不设置,yum安装的erlang版本通常太低

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.17/rabbitmq-server-3.7.17-1.el7.noarch.rpm

rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

yum install -y erlang

1.3 安装rabbitmq

wget  https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.17/rabbitmq-server-3.7.17-1.el7.noarch.rpm
rpm -ivh  rabbitmq-server-3.6.12-1.el6.noarch.rpm

#配置文件
cp /usr/share/doc/rabbitmq-server-3.6.12/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

# 开启UI控制台访问
rabbitmq-plugins enable rabbitmq_management

1.4、用户管理和权限配置

默认用户guest/guest具有最高权限的,一般不用于直接登录,通过下面配置管理员账号和密码(注意复杂度)

1)添加管理员账号:
 rabbitmqctl add_user rabbitadmin xxxxxpasword
2) 分配用户标签为管理员
rabbitmqctl set_user_tags rabbitadmin administrator 
3) 授予文件目录权限
rabbitmqctl  set_permissions -p "/" rabbitadmin ".*" ".*" ".*"
4)创建和赋角色完成后查看并确认
rabbitmqctl list_users 
5)登录rabbitmq管理界面(切记:访问之前检查防火墙问题)
浏览器输入地址:http://服务器IP地址:15672/ 

二,集群环境安装

根据上面教程完成单机版部署后,可以按照相同完成2台slave环境的安装。注:我只用一台salve

2.1 Erlang Cookie(认证)

Erlang Cookie 是保证不同节点可以相互通信的密钥,要保证集群中的不同节点相互通信必须共享相同的 ErlangCookie。具体的目录存放在/var/lib/rabbitmq/.erlang.cookie。

选择任意一个节点为Master(这里选择A为Master),也就是说我们需要把A的Cookie文件同步到B节点上去,进入/var/lib/rabbitmq目录下

scp .erlang.cookie root@xxxxxxx:/var/lib/rabbitmq/


## 必须保证文件的所有者是rabbitmq
chown -R rabbitmq:rabbitmq .erlang.cookie


## 关闭所有节点,为后面集群启动准备
rabbitmqctl stop

2.2 启动集群

# 每个节点执行,后续启动集群使用此命令即可
rabbitmq-server -detached

# 在slave节点执行
rabbitmqctl stop_app
rabbitmqctl join_cluster  rabbit@server-mysql1
rabbitmqctl start_app

# 在任一节点查看集群状态
rabbitmqctl cluster_status

Cluster status of node rabbit@server-mysql1 ...
[{nodes,[{disc,['rabbit@server-mysql1','rabbit@server-mysql2']}]},
 {running_nodes,['rabbit@server-mysql2','rabbit@server-mysql1']},
 {cluster_name,<<"rabbit@server-mysql1">>},
 {partitions,[]},
 {alarms,[{'rabbit@server-mysql2',[]},{'rabbit@server-mysql1',[]}]}]

## 登录ui端
可以看到overview里已经可以看到集群的所有节点

注1:节点类型

rabbitmqctl join_cluster {clusternode} [--ram]
 --ram 表示作为RAM节点结合到该集群中。
 
 该命令指令本节结合到指定的集群中,在结合之前,该节点需要reset,所以在使用时,需要格外注意。为了成功运行本命令,必须要停止RabbitMQ应用,例如 stop_app 
 
  集群节点有两种类型: disc 和 RAM。disc类型,复制数据在RAM和disc上,在节点失效的情况下,提供了冗余保证,也能从一些全局事件中恢复,例如所有节点失效。RAM类型,只复制数据在RAM上,主要表现在伸缩性上,特别是在管理资源(例如:增加删除队列,交换器,或者绑定)上表现突出。

# 一个集群必须至少含有一个disc节点,当通常都多余一个。通过该命令时,默认是设置为disc节点,如果需创建RAM节点,需要指定参数 --ram

# 执行此命令之后,在该节点上启动的RabbitMQ应用,在该节点挂掉之后,会尝试连接节点所在集群中的其他节点。

# 为了离开集群,可以 reset 该节点,也可以使用命令 forget_cluster_node 远程删除节点

链接:https://www.jianshu.com/p/93bd59bc4068

2.3 配置镜像队列

任意节点执行

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致。

  • 普通模式:默认的集群模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于 Queue 来说,消息实体只存在于其中一个节点 rabbit01(或者 rabbit02),rabbit01 和 rabbit02 两个节点仅有相同的元数据,即队列的结构。当消息进入 rabbit01 节点的 Queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit01、rabbit02 间进行消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer。所以 consumer 应尽量连接每一个节点,从中取消息。
  • 镜像模式:将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现 RabbitMQ 的 HA 高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在 consumer 消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

2.3 集群运维操作

# 查看集群状态
rabbitmqctl cluster_status
# 移除节点
rabbitmqctl forget_cluster_node rabbit@hostanme

# 修改集群名称
rabbitmqctl set_cluster_name rabbitmq_cluster


参考

https://blog.csdn.net/u012374672/article/details/100872198
https://www.cnblogs.com/operationhome/p/10483840.html

https://www.cnblogs.com/xishuai/p/centos-rabbitmq-cluster-and-haproxy.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值