目录
1、集群四种架构:
Rabbitmq集群一共有四种架构,分别为:主备模式、远程模式、镜像模式、多活模式,其中镜像模式为用的最多的一种。详情见连接:
https://www.jianshu.com/p/b7cc32b94d2a
2、集群两种模式:
(1)普通模式:
默认的rabbitmq搭建的集群就是普通模式,消息实体只是存储在集群中的一个节点上。
(2)镜像模式:
在搭建好普通集群后,将需要的一个队列或多个队列或所有队列做成镜像队列,存在于集群中的多个节点上,属于rabbitmq的HA方案。
3、集群节点类型:
RabbitMQ集群中节点包括内存节点、磁盘节点。一个集群中至少要有一个磁盘节点,否则集群不能正常对外提供服务。
(1)内存节点:
内存节点就是将所有数据放在内存,因为数据在内存中因此速度很快。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。那么内存节点的性能只能体现在资源管理上,比如增加或删除队列(queue),虚拟主机(vrtual hosts),交换机(exchange)等,发送和接受message速度同磁盘节点一样。
(2)磁盘节点:
磁盘节点将数据放在磁盘上,速度相对内存节点较慢。
4、镜像集群规划:
本人选择镜像集群,并且采用2磁盘节点+3内存节点。避免1个磁盘节点宕机后,整个rabbitmq集群将无法提供服务的问题。在搭建好普通rabbitmq集群后,再配置镜像集群。在java连接的时候配置成连接集群内所有内存节点,这样如果一个节点宕机会自动尝试连接其它节点,也可以做到高可用。
也可以在镜像集群的基础上,然后结合HAProxy实现负载均衡、结合Keepalived实现HAProxy的高可用。最终实现rabbitmq高可用负载均衡集群。这样在java连接的时候直接配置连接VIP的地址就可以做到高可用。
应用名称 |
IP地址 |
节点类型 |
节点名称 |
节点状态 |
Rabbitmq、Keepalived、HAProxy |
192.168.1.141 |
磁盘节点 |
rabbitmq01 |
主节点 |
Rabbitmq、Keepalived、HAProxy |
192.168.1.142 |
磁盘节点 |
rabbitmq02 |
从节点 |
Rabbitmq |
192.168.1.143 |
内存节点 |
rabbitmq03 |
从节点 |
Rabbitmq |
192.168.1.144 |
内存节点 |
rabbitmq04 |
从节点 |
Rabbitmq |
192.168.1.145 |
内存节点 |
rabbitmq05 |
从节点 |
5、镜像集群思路流程图:
通过rabbitmq镜像集群+HAProxy+Keepalived搭建高可用负载均衡的rabbitmq集群。
6、各节点关闭防火墙:
关闭集群各个节点的防火墙,强烈建议如此,如果不能关闭防火墙,那么就自己手动开放对应需要开放的端口号。
关闭防火墙:service iptables stop;
关闭防火墙开机自启:chkconfig iptables off;
7、各节点配置hostname:
各节点修改节点名称,然后添加上集群中所有节点IP和名称映射。
(1)centos6.x:
编辑/etc/sysconfig/network文件,修改HOSTNAME值;(重启生效)
编辑/etc/hosts文件,在127.0.0.1后添加值;
编辑/etc/hosts文件,追加集群中所有节点IP与其hostname映射;
执行命令:hostname,减产是否修改成功,如果没成功最好是重启下服务器,否则可能在配置监听文件时候命令执行失败。
(2)Centos7.x:
执行命令:hostnamectl set-hostname 新hostname名称
编辑/etc/hosts文件,在127.0.0.1后添加值;
编辑/etc/hosts文件,追加集群中所有节点IP与其hostname映射;
执行命令:hostname,减产是否修改成功,如果没成功最好是重启下服务器,否则可能在配置监听文件时候命令执行失败。
8、各节点Erlang环境:
各节点安装相同版本的Erlang环境。操作步骤按照rabbitmq单机安装(linux)中在各个节点上安装相同版本的Erlang环境即可。
9、各节点rabbitmq安装:
各节点安装相同版本的rabbitmq软件。操作步骤安装rabbitmq单机安装(linux)中在各个节点上安装相同版本的rabbitmq软件即可。只是安装好软件和插件,不需要创建用户操作。最终各个节点上的rabbitmq服务处于关闭状态。
10、各节点通信打通:
Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在rabbitmq安装运行用户目录中,~/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie一致,不然节点之间就无法通信。
将集群中一个节点中的.erlang.cookie文件拷贝到集群另外其它节点所在服务器上的对应文件夹中去。
11、各节点rabbitmq加入普通集群:
(1)启动主节点磁盘节点:
在设计的rabbitmq集群中选择主节点磁盘节点,然后后台启动服务:
执行命令:./rabbitmq-server &
(2)其它节点启动并添加到集群:
将集群中另外的每一个节点,先先添加到集群中,按照设计的磁盘节点、内存节点,添加到集群中命令不同,根据需要进行执行,然后将该节点的rabbitmq服务启动。
A、启动rabbitmq服务:
执行命令:./rabbitmq-server &
B、停止节点application:
执行命令:./rabbitmqctl stop_app
C、节点添加到集群:
磁盘节点执行命令:./rabbitmqctl join_cluster rabbit@mq01
默认添加的就是磁盘节点。@后面为启动的第一个磁盘节点名称。
内存节点执行命令:./rabbitmqctl join_cluster --ram rabbit@mq01
--ram表示磁盘节点。@后面为启动的第一个磁盘节点名称。
D、启动节点application:
执行命令:./rabbitmqctl start_app
12、创建web用户:
(1)创建用户:
建议在主节点mq01上操作。
执行命令:./rabbitmqctl add_user Username Password
说明:
Username:创建的用户名称;
Password:创建的用户密码;
(2)设置用户administrator角色:
建议在主节点mq01上操作。
执行命令:./rabbitmqctl set_user_tags User Tag
说明:
User:用户名称;
Tag:角色名称(administrator,monitoring,policymaker,management,或其他自定义名称);
13、查看普通集群:
(1)命令查看集群:
在任意一节点上执行命令:./rabbitmqctl cluster_status
(2)web控制台查看集群:
通过在浏览器中输入集群中任意一个节点的web控制台查看集群:
14、普通集群设置镜像队列:
镜像模式要依赖policy模块,policy中文来说是政策,策略的意思,那么他就是要设置哪些Exchanges或者queue的数据需要复制同步,以及如何同步。
使用浏览器访问rabbitmq的web管理平台,然后在admin中增加一个policy并设置为所有exchanges或queue同步。
参数解释:
name:为策略名称。
Pattern:为匹配符,只有一个^代表匹配所有,这里设置为匹配全部。
Apply to:使用对象,设置为exchange和queue。
Priority:配置了多个策略时候的优先级,值越大,优先级越高。(单个策略配置意义不大)注意:没有指定优先级的消息会将优先级以0对待。对于超过优先级队列所定最大优先级的消息,优先级以最大优先级对待。
Definition:为匹配类型,他分为3种模式:
all-所有(所有的queue);
exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器);
nodes-指定(需配置ha-params参数,此参数为数组类型比如["3rabbit@F","rabbit@G"])。
15、镜像集群测试:
(1)消息同步测试:
使用浏览器访问rabbitmq的web管理平台,控制台queue tab页面添加一个测试用的queue,然后查看queue的node都有哪些节点同步了消息数据。
无论将queue创建在哪个节点上,都会按照设置好的policy马上将数据同步到集群其它节点上去。
(2)集群高可用测试:
A、关闭一个内存节点:
关闭一个内存节点后,通过java客户端操作还是可以写入和消费。
B、关闭一个磁盘+一个内存节点:
关闭一个磁盘+一个内存节点后,通过java客户端操作还是可以写入和消费。
C、恢复内存和磁盘节点:
a、节点服务恢复:
在宕机的rabbitmq节点中,执行命令让rabbitmq服务启动即可:
执行命令:./rabbitmq-server &
b、数据同步检查:
如果因为部分节点宕机然后重启,可能会有数据不能自动同步到宕机重启节点,那么就需要手动点击同步数据。
将上图中的Synchronised按钮进行手动辅助同步数据。
16、集群重新启动:
(1)关闭集群节点:
先关闭非主节点,最后关闭主节点。
执行命令:./rabbitmqctl stop
(2)启动集群节点:
先启动主节点,然后再启动非主节点。
执行命令:./rabbitmq-server &
(3)命令查看集群:
在任意一节点上执行命令:./rabbitmqctl cluster_status
(4)Web控制体查看集群:
通过在浏览器中输入集群中任意一个节点的web控制台查看集群: