RabbitMq镜像高可用集群模式

一、rabbitmq 有三种模式,但是集群模式是2种。

单一模式: 单机运行一个rabbitmq而已,不做任何集群

普通模式: 默认集群模式,以两个几点(rabbit01、rabbit02)为例进行说明。对于队列来说,消息实体只存在于其中一个节点rabbit01,rabbit01和rabbit02两个节点有相同的数据。当消息进入rabbit01节点的队列后,若消费者从2节点消费,则rabbitmq会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理queue。否则无论consumer连rabbit01还是rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01 节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象

镜像模式: 基于普通模式集群,在策略里面添加镜像策略即可。把需要的队列做成镜像队列,属于HA方案。该模式解决了普通模式中的问题,根本区别在于消息实体会主动在镜像节点间同步,而不是在客户端拉取数据时临时拉取。当然弊端就是降低系统性能,大量消息写入,集群内的网路带宽会被大大消耗。

二、节点类型:

1.RAM Node
内存节点,将所有的队列,交换机, 绑定,用户 权限与vhost的元数据存储在内存中,可以让队列和交换机声明更加的便捷。
2. Disk Node
将元数据存储在磁盘中,单节点系统,只运行 磁盘类型的节点,防止重启RabbitMQ时,丢失系统的配置信息

三、ErLang Cookie
ErLang Cookie 是保证不同节点之间的通讯,不同节点之间共享相同的Cookie,集群部署时候,需要copy这个数据到不同的节点,使得cookie一致。

四、安装服务

1.安装erlang
# wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm
# rpm -ivh erlang-18.1-1.el6.x86_64.rpm 
 确认erlang安装成功
# erl
2.安装rabbitmq-server
# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_12/rabbitmq-server-3.6.12-1.el6.noarch.rpm
# yum install -y socat
# rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm
4.安装插件管理 【http://ip:55672】
# rabbitmq-plugins enable rabbitmq_management
5.启动服务
# rabbitmq-server -deched

五、集群搭建
1.将1节点图示目录下的.eralang.cookie 文件拷贝到其他rabbit节点上,因为他们是基于这个cookie进行集群的统一认证通信。
在这里插入图片描述
2.配置命令

主服务节点配置命令
rabbitmqctl stop_app 
rabbitmqctl reset
rabbitmqctl start_app

这个是用来在node1上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.

节点服务配置命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app

和主服务配置脚本的唯一区别是多了第三行的内容,其中--ram指的是作为内存节点,之前已经讲述了内存节点和磁盘节点的优缺点,要是想做为磁盘节点的话,就去掉--ram这个参数了,把第3行写成这样就好了
rabbitmqctl join_cluster  rabbit@node1
若执行这条命令,则node2将成为磁盘节点加入集群
PS:只要在节点列表里包含了本身,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在

先执行主节点上的命令,等待执行完成之后再执行服务节点的脚本,顺序不要错了哦~

执行完之后分别在每台机器上查看节点状态
rabbitmqctl cluster_status

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,普通的集群模式已经部署成功了。

六、镜像队列
镜像队列是基于普通的集群模式

1.点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add / update a policy
2.按照图中的内容根据自己的需求填写
3.点击Add policy添加策略的,所以你还是得先配置普通集群,然后才能设置镜像队列.
在这里插入图片描述
下面我们来添加一个queues队列来看看效果,这里只是测试结果,其它的先不填写
在这里插入图片描述
注意红框中的 x-ha-policy = all 这个,网上说没有这个不会进行复制,但是我测试的时候好像可以复制的,至少queues队列是可以的,先添上吧.
在这里边添加的时候你是可以指定Node选项也就是把这个queues放在哪个node节点上,不过做镜像的时候就没有必要了

这里的镜像队列的集群介绍就到这里,要想做到高可用,需要HA软件的配合哦~轮询两个ram rabbitmq节点的接口(ip:5672)disc 节点一般当做备份节点,不做生产也不做消费。

七、常用命令

1.用户管理
(1)新增用户
rabbitmqctl add_user 用户名 密码
(2)删除用户
rabbitmqctl delete_user 用户名
(3)修改用户的密码
rabbitmqctl change_password 用户名  新密码
(4)查看当前用户列表
rabbitmqctl list_users
2.用户角色
(1)超级管理员: administrator
(2)监控者: monitoring
(3)策略制定者: policymaker
(4)普通管理者 management
(5)其他
设置用户角色的命令为:
rabbitmqctl set_user_tags 用户名  角色(上述五种角色 administrator monitoring policymaker management)
也可以给同一用户设置多个角色,例如
rabbitmqctl set_user_tags user01  monitoring policymaker
3.用户权限
用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限,配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向 exchange发送消息以及queue和exchange的绑定操作
(1)设置用户权限
rabbitmqctl set_permissions -p vhostpath user confp writep readp
(2) 查看(指定hostpath)所有用户的权限信息
rabbitmqctl list_permissions [-p VHostPath]
(3) 查看指定用户的权限信息
rabbitmqctl list_user_permissions User
(4) 清除用户的权限信息
rabbitmqctl clear_permissions [-p VHostPath] User
rabbitmqctl set_permissions -p / admin ‘.’ '.’ ‘.*’

猜你喜欢

转载自blog.csdn.net/zhutongcloud/article/details/93074158