下面以三台虚拟机为例,搭建RabbitMQ集群
首先在第一台上面安装完成RabbitMQ,然后克隆三台。
接下来修改主机名称,分别修改为node1,node2,node3
vim /etc/hostname
其余两台也按上面命令对应修改。
然后重启虚拟机,使其生效。
接下来配置各个节点的 hosts 文件,让各个节点都能互相识别对方
vim /etc/hosts
配置node1 2 3三个节点的ip , 每一台都要 。
接下来 , 确保各个节点的 cookie 文件使用的是同一个值,在node1执行如下命令
scp /root/.erlang.cookie root@node2:/root/.erlang.cookie
scp /root/.erlang.cookie root@node3:/root/.erlang.cookie
由于安装mq的方式不同,使用.erlang.cookie的位置可能会不同。官方介绍集群的文档介绍如下: .erlang.cookie一般会存在于两个地方,第一个是:$HOME/.erlang.cookie;第二个是:/var/lib/rabbitmq/.erlang.cookie。
如果我们使用解压缩安装方式(二进制安装或者编译安装),那么该文件存在位置为$HOME目录下。即$HOME/.erlang.cookie。如果我们使用root安装,则位置为:/root/.erlang.cookie,其他用户为/home/用户名/.erlang.cookie。
如果我们使用rpm包方式安装,那么这个文件会存在于/var/lib/rabbitmq目录下。
根据自身情况修改路径。
启动 RabbitMQ 服务 , 顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务 ( 在三台节点上分别执行以下命令)
rabbitmq-server -detached
将node2加入到node1里面去,在node2执行
rabbitmqctl stop_app
(rabbitmqctl stop 会将 Erlang 虚拟机关闭, rabbitmqctl stop_app 只关闭 RabbitMQ 服务 )
rabbitmqctl reset // 重置mq
rabbitmqctl join_cluster rabbit@node1 // 加入node1
rabbitmqctl start_app // 只启动应用服务
此时node2就连接到了node1,然后在node3里面执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node2
rabbitmqctl start_app
连接到node2,这样如果node2挂掉,node3会自动顶替上去
查看集群状态
rabbitmqctl cluster_status
然后重新设置用户
创建账号
rabbitmqctl add_user admin 123
设置用户角色
rabbitmqctl set_user_tags admin administrator
设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
登录mq后台查看
可以看到三个节点非常健康的在运行
如果想接触集群的话,假如接除node2,那么在node2执行以下代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
然后在node1主节点执行
rabbitmqctl forget_cluster_node rabbit@node2
这样就解除了node2。
镜像队列(Mirror Queue): 如果集群中的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。
因为我们如果在单一节点创建队列的话,队列并不会三台都创建,这样跟我们的预期是不符合的,因此,我们要创建镜像队列。
接下来我们来创建镜像进行数据备份,确保数据不会丢失,当然可以多个镜像备份数据,但是会造成资源浪费,所以我们只创建一个。
随便打开一个节点的mq,然后添加一个策略
name: 任意名称
pattern: ^mirror 备份以mirror为前缀的队列
ha-mode: 备份模式
exactly:指定对应模式
ha-params:指定备份几份
ha-sync-mode:同步模式 automatic:自动备份
记得去掉//以及后面内容还有空格再添加策略
添加成功
代码验证
修改之前代码的队列名称,启动服务
可以看到一个+1 ,点进去查看
可以看到在3节点备份了一个
留言与评论(共有 0 条评论) “” |