一、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 /releases/erlang/erlang-18.1-1.el6.x86_64.rpm# rpm -ivh erlang-18.1-1.el6.x86_64.rpm 确认erlang安装成功# erl2.安装rabbitmq-server# wget /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.rpm4.安装插件管理 【http://ip:55672】# rabbitmq-plugins enable rabbitmq_management5.启动服务# rabbitmq-server -deched
五、集群搭建
1.将1节点图示目录下的.eralang.cookie 文件拷贝到其他rabbit节点上,因为他们是基于这个cookie进行集群的统一认证通信。
2.配置命令
主服务节点配置命令rabbitmqctl stop_app rabbitmqctl resetrabbitmqctl start_app这个是用来在node1上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.节点服务配置命令rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster --ram rabbit@node1rabbitmqctl 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_users2.用户角色(1)超级管理员: administrator(2)监控者: monitoring(3)策略制定者: policymaker(4)普通管理者 management(5)其他设置用户角色的命令为:rabbitmqctl set_user_tags 用户名 角色(上述五种角色 administrator monitoring policymaker management)也可以给同一用户设置多个角色,例如rabbitmqctl set_user_tags user01 monitoring policymaker3.用户权限用户权限指的是用户对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] Userrabbitmqctl set_permissions -p / admin ‘.’ '.’ ‘.*’