使用源码包安装
安装rabbitmq
xz -d rabbitmq-server-generic-unix-3.6.1.tar.xz
tar –xf rabbitmq-server-generic-unix-3.6.1.tar
mv rabbitmq_server-3.6.1/ rabbitmq
useradd –d /app/rabbitmq rabbitmq
chown –R rabbitmq.rabbitmq /app/rabbitmq
配置环境变量
Vim /etc/profile
#SET ERLANG
export PATH=$PATH:/usr/erlang/bin
#SET RABBITMQ
export PATH=$PATH:/usr/rabbitmq/sbin
source /etc/profile
启动mq
cd /app/rabbitmq/sbin
rabbitmq-server –detached 启动mq
启动插件
./rabbitmq-plugins enable rabbitmq_management
添加登录用户
rabbitmqctl add_user guest guest 添加用户前面用户后面密码
rabbitmqctl set_permissions -p / guest ".*" ".*" ".*" 添加权限
rabbitmqctl set_user_tags guest administrator 修改用户角色
rabbitmq 集群搭建 –3台
按照上面方式安装rabbitmq并启动
添加hosts解析(3台)
10.75.3.116 server1
10.75.3.16 server2
10.75.3.12 server3
添加解析完后拷贝erlang.cookie至其他节点中
scp /var/lib/rabbitmq/.erlang.cookie server2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie server3:/var/lib/rabbitmq/
通过rabbitmqctl工具加入集群节点
在server2和server3节点中执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@server1
rabbitmqctl start_app
在server1中查看
rabbitmqctl cluster_status
1、如果关闭了集群中的所有节点,则需要确保在启动的时候最后关闭的那个节点是第一个启动的。如果第一个启动的不是最后关闭的节点,那么这个节点会等待最后关闭的节点启动。这个等待时间是30秒,如果没有等到,那么这个先启动的节点也会失败。
2、如果最后一个关闭的节点最终由于某些异常而无法启动,则可以通过rabbitmqctl forget_cluster_node 命令来将此节点剔出当前集群。如果集群中的所有节点由于某些非正常因素,比如断电而关闭,那么集群中的节点都会认为还有其他节点在它后面关闭,此时需要调用rabbitmqctl force_boot命令来启动一个节点,之后集群才能正常启动。
3、如果集群已经创建好了,那么也可以使用rabbitmqctl change_cluster_node_type {disc,ram}命令来切换节点的类型,其中disc表示磁盘节点,而ram表示内存节点,切换方式如下所示
在server2中可执行修改为磁盘节点
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app
server3中修改为内存节点
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
在server1中查看rabbitmq状态
这是因为管理的web未启动导致
rabbitmq-plugins enable rabbitmq_management 启动后在检测
Rabbitmq (HA方案)
镜像模式:把需要的队列做成镜像队列,消息存在于多个节点,属于RabbitMQ的HA方案。
优点:镜像队列集群与普通集群不同之处在于,queue中的消息数据会在镜像节点中同步,消息写入队列,都交给master节点进行写入,然后同步至各slave。当master当机后,内部会从slave节点重新选举出一个新的master节点,从而有效的防止消息丢失及服务不可用等问题。
缺点:正所谓凡事有利亦有弊,正是因为涉及到主节点之间消息的同步,当内部需要同步的镜像队列较多,数据量很大的时候,磁盘IO,网络带宽等都会成为master节点的瓶颈,进而影响整个集群的性能。并且由于各节点之间消息的同步(即各镜像队列数据完全一致),也丧失了通过新增节点线性增加性能(cpu、内存)和容量(内存、磁盘)的能力。
配置方式
镜像队列主要是通过添加相应的policy来完成的,配置参数如下:
策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
rabbitmqctl set_policy -p / ha-allqueue "^" '{"ha-mode":"all"}'
新建一个队列查看会发现有个+2
清理制定queue对列数据
cd 至sbin下
rabbitmqctl purge_queue queue_name
这里清理时察看下管理端是否做了集群,如做集群需清理集群所在机器的该queue
全部清理 (这里一般不使用)
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
检测对列数
./rabbitmqctl list_queues messages_ready | awk 'NR>=2{print }'| awk '{sum+=$1}END{print sum}'