这个年纪 还有很多需要努力的事

准备工具及技术:

Linux7.x
Docker

普通集群搭建

准备3个节点安装好rabbitmq,形成集群 (记得每个节点间隔⼏⼗秒再启动,如果失败删除宿主机⽂件重新搭建)

#节点⼀,主节点,创建-v映射⽬录
docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_xdclass' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management
#节点⼆,创建-v映射⽬录
docker run -d --hostname rabbit_host2 --name rabbitmq2 -p 15673:15672 -p 5673:5672 --link rabbitmq1:rabbit_host1 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_xdclass' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management
#节点三,创建-v映射⽬录
docker run -d --hostname rabbit_host3 --name rabbitmq3 -p 15674:15672 -p 5674:5672  --link rabbitmq1:rabbit_host1 --link rabbitmq2:rabbit_host2 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_xdclass' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management
参数说明:
--hostname ⾃定义Docker容器的 hostname
--link 容器之间连接,link不可或缺,使得三个容器能互相通信
--privileged=true 使⽤该参数,container内的root拥有真正的root权限,否则容器出现permission denied
-v 宿主机和容器路径映射
	参数 RABBITMQ_NODENAME,缺省 Unix*:rabbit@$HOSTNAME
	参数 RABBITMQ_DEFAULT_USER=admin
	参数 RABBITMQ_DEFAULT_PASS=admin
Erlang Cookie 值必须相同,也就是⼀个集群内 RABBITMQ_ERLANG_COOKIE 参数的值必须相同, 相当于不同节点之间通讯的密钥,erlang.cookie是erlang的分布式token⽂件,集群内各个节点的erlang.cookie需要相同,才可以互相通信

配置集群

#节点⼀配置集群
docker exec -it rabbitmq1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
#节点⼆加⼊集群,--ram是以内存⽅式加⼊,忽略该参数默认为磁盘节点
docker exec -it rabbitmq2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
exit
#节点三加⼊集群,--ram是以内存⽅式加⼊,忽略该参数默认为磁盘节点。
docker exec -it rabbitmq3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
exit
##查看集群节点状态,配置启动了3个节点,1个磁盘节点和2个内存节点
rabbitmqctl cluster_status

访问节点⼀的web管控台,可以看到多个节点

docker部署rabbitmq集群 docker rabbitmq 集群_linux

镜像集群搭建

建立在普通集群环境上添加规则集合

docker部署rabbitmq集群 docker rabbitmq 集群_linux_02

name:⾃定义策略名称
Pattern:^ 匹配符,代表匹配所有
Definition:
	ha-mode:指明镜像队列的模式,可选下⾯的其中⼀个
		 all:表示在集群中所有的节点上进⾏镜像同步(⼀般都⽤这个参数)
		 exactly:表示在指定个数的节点上进⾏镜像同步,节点的个数由ha-params指定
		 nodes:表示在指定的节点上进⾏镜像同步,节点名称通过ha-params指定
	ha-sync-mode:镜像消息同步⽅式 automatic(⾃动),manually(⼿动)

注意:集群重启顺序

  1. 集群重启的顺序是固定的,并且是相反的
  2. 启动顺序:磁盘节点 => 内存节点
  3. 关闭顺序:内存节点 => 磁盘节点
  4. 最后关闭必须是磁盘节点,否则容易造成集群启动失败、数据丢失等异常情况
段某人