消息队列——rabbitmq——集群搭建(linux)

目录

1、集群四种架构:

2、集群两种模式:

3、集群节点类型:

4、镜像集群规划:

5、镜像集群思路流程图:

6、各节点关闭防火墙:

7、各节点配置hostname:

8、各节点Erlang环境:

9、各节点rabbitmq安装:

10、各节点通信打通:

11、各节点rabbitmq加入普通集群:

12、创建web用户:

13、查看普通集群:

14、普通集群设置镜像队列:

15、镜像集群测试:

16、集群重新启动:


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控制台查看集群:

发布了131 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LSY_CSDN_/article/details/103836139