目录
RabbitmQ集群模式介绍
RabbitMQ 有三种模式:单机模式,普通集群模式,镜像集群模式。单机模式即单独运行一个 rabbitmq 实例,而集群模式需要创建多个 rabbitmq实例
第一种 普通集群模式:rabbitmq集群与其他集群有些不同,rabbitmq集群同步指的是复制队列,元数据信息的同步,即同步的是数据存储信息;消息的存放只会存储在创建该消息队列的那个节点上。并非在节点上都存储一个完整的数据。在通过非数据所在节点获取数据时,通过元数据信息,路由转发到存储数据节点上,从而得到数据 。
第二种 镜像集群模式:与普通集群模式区别 主要是消息实体会主动在镜像节点间同步数据,而不是只存储数据元信息。 故普通集群模式 但凡数据节点挂了,容易造成数据丢失但镜像集群模式可以保证集群只要不全部挂掉,数据就不会丢失,当相对于性能来说,镜像集群模式会比普通集群模式多出消耗数据的传输,故取决于业务场景进行取舍。
普通集群模式
1.准备机器
服务器地址 | 角色 | 备注 |
---|---|---|
192.168.0.1 | master | 主 |
192.168.0.2 | slave | 备 |
192.168.0.3 | slave | 备 |
# 首先三台机器都拉去镜像
docker pull rabbitmq:3.8-rc-management
ssh:192.168.0.1执行
docker run -d -p "4369:4369" -p "5672:5672" -p "15672:15672" -p "25672:25672" -v /opt/rabbitmq:/var/lib/rabbitmq:z --add-host="rabbitmq-01":192.168.0.1 --add-host="rabbitmq-02":192.168.0.2 --add-host="rabbitmq-03":192.168.0.3 --restart=always -e RABBITMQ_ERLANG_COOKIE='rabbitClusterCookie' --hostname rabbitmq01 --name rabbitmq01 rabbitmq:3.8-rc-management
ssh:192.168.0.2执行
docker run -d -p "4369:4369" -p "5672:5672" -p "15672:15672" -p "25672:25672" -v /opt/rabbitmq:/var/lib/rabbitmq:z --add-host="rabbitmq-01":192.168.0.1 --add-host="rabbitmq-02":192.168.0.2 --add-host="rabbitmq-03":192.168.0.3 --restart=always -e RABBITMQ_ERLANG_COOKIE='rabbitClusterCookie' --hostname rabbitmq02 --name rabbitmq02 rabbitmq:3.8-rc-management
ssh:192.168.0.3执行
docker run -d -p "4369:4369" -p "5672:5672" -p "15672:15672" -p "25672:25672" -v /opt/rabbitmq:/var/lib/rabbitmq:z --add-host="rabbitmq-01":192.168.0.1 --add-host="rabbitmq-02":192.168.0.2 --add-host="rabbitmq-03":192.168.0.3 --restart=always -e RABBITMQ_ERLANG_COOKIE='rabbitClusterCookie' --hostname rabbitmq03 --name rabbitmq03 rabbitmq:3.8-rc-management
Erlang Cookie 值必须相同,也就是一个集群内 RABBITMQ_ERLANG_COOKIE 参数的值必须相同。因为 RabbitMQ 是用Erlang实现的,Erlang Cookie 相当于不同节点之间通讯的密钥,Erlang节点通过交换 Erlang Cookie 获得认证。
2.配置集群
2.1配置192.168.0.1
# 无需太多配置,直接查看集群状态
$ docker exec -it rabbitmq01 bash
# 查看集群信息
$ rabbitmqctl cluster_status
2.2配置192.168.0.2
docker exec -it rabbitmq02 bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入集群,表示当前机器的MQ加入到“rabbitmq-01”
#"rabbitmq-01"="192.168.0.1"通过--add-host添加域名配置了 ,自行查看或配置 vi /etc/hosts
rabbitmqctl join_cluster rabbit@rabbitmq-01
rabbitmqctl start_app
# 查看集群信息
rabbitmqctl cluster_status
2.3配置192.168.0.3
docker exec -it rabbitmq03 bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入集群,表示当前机器的MQ加入到“rabbitmq-01”
#"rabbitmq-01"="192.168.0.1"通过--add-host添加域名配置了 ,自行查看或配置 vi /etc/hosts
rabbitmqctl join_cluster rabbit@rabbitmq-01
rabbitmqctl start_app
# 查看集群信息
rabbitmqctl cluster_status
# 健康监测
rabbitmqctl node_health_check
2.4.移除节点
# 在要关闭的节点上操作
$ rabbitmqctl stop_app
# 在主节点上操作: 删除要移除的节点:
$ rabbitmqctl -n rabbit@rabbitmq-01 forget_cluster_node rabbit@rabbitmq-03
2.5访问
设置好之后,使用任意容器,比如:http://ip:15672/ 进行访问,默认账号密码:guest/guest