CentOS 7 下 RabbitMQ 集群搭建
2017-10-16 18:01
489 查看
环境
搭建(在所有节点执行)
添加EPEL源
10.0.0.20 node1 10.0.0.21 node2 10.0.0.22 node3
搭建(在所有节点执行)
添加EPEL源
[root@node1 ~]# rpm -Uvh https://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm[/code]
添加Erlang[root@node1 ~]# rpm -Uvh http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm[/code]
安装RabbitMQ[root@node1 ~]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm [root@node1 ~]# rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc [root@node1 ~]# yum install -y rabbitmq-server-3.6.6-1.el7.noarch.rpm
启动服务[root@node1 ~]# systemctl enable rabbitmq-server.service [root@node1 ~]# systemctl start rabbitmq-server.service
查看端口监听状态 5672为集群间通信端口,15672为web端管理端口[root@node1 ~]# netstat -atn |grep 5672
启用RabbitMQ监控插件[root@node1 ~]# rabbitmq-plugins enable rabbitmq_management
RabbitMQ用户管理
添加用户为:root ,密码为:admin)[root@node1 ~]# rabbitmqctl add_user admin admin
设置用户角色(设置admin用户为管理员角色)[root@node1 ~]# rabbitmqctl set_user_tags admin administrator
设置用户权限(设置admin用户配置、写、读的权限)[root@node1 ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
删除用户(删除guest用户)[root@node1 ~]# rabbitmqctl delete_user guest
RabbitMQ集群配置
设置hosts解析,所有节点配置相同[root@node1 ~]# vim /etc/hosts
10.0.0.20 node1 10.0.0.21 node2 10.0.0.22 node3
设置节点间的认证 (Erlang Cookie)
Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie。这里将 node3 的该文件复制到 node1、node2,由于这个文件权限是 400,所以需要先修改 node1、node2 中的该文件权限为 777,然后将 node3 中的该文件拷贝到 node1、node2,最后将权限和所属用户/组修改回来。
将node3 的cookie发送到 node1和node2 上[root@node1 ~]# chmod 777 /var/lib/rabbitmq/.erlang.cookie [root@node2 ~]# chmod 777 /var/lib/rabbitmq/.erlang.cookie [root@node3 ~]# scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.20:/var/lib/rabbitmq/.erlang.cookie [root@node3 ~]# scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.21:/var/lib/rabbitmq/.erlang.cookie [root@node1 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie [root@node2 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie
分别启动独立的单机版rabbitmq broker节点[root@node1 ~]# systemctl start rabbitmq-server.service [root@node1 ~]# rabbitmq-server -detached [root@node2 ~]# systemctl start rabbitmq-server.service [root@node2 ~]# rabbitmq-server -detached [root@node3 ~]# systemctl start rabbitmq-server.service [root@node3 ~]# rabbitmq-server -detached
查看broker的状态[root@node1 ~]# rabbitmqctl status Status of node rabbit@node1 ... [{pid,14503}, {running_applications, [{rabbitmq_management,"RabbitMQ Management Console","3.6.6"}, {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.6"},
查看broker的集群状态root@node1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@node1 ... [{nodes,[{disc,[rabbit@node1]}]}, {running_nodes,[rabbit@node1]}, {cluster_name,<<"rabbit@node2">>}, {partitions,[]}]
配置防火墙(如果开启)[root@node1 ~]# firewall-cmd --permanent --add-port={4369/tcp,25672/tcp} [root@node1 ~]# firewall-cmd --reload
配置集群
默认是磁盘节点,如果是内存节点的话,需要加--ram参数
将node1节点加入node3作为RAM类型节点[root@node1 ~]#rabbitmqctl stop_app [root@node1 ~]#rabbitmqctl reset [root@node1 ~]#rabbitmqctl join_cluster root@node3 --ram [root@node1 ~]#rabbitmqctl start_app [root@node1 ~]# rabbitmqctl cluster_status
将node2节点加入node3 作为RAM类型节点[root@node2 ~]#rabbitmq stop_app [root@node2 ~]#rabbitmqctl reset [root@node2 ~]#rabbitmqctl join_cluster root@node3 --rm [root@node2 ~]#rabbitmqctl start_app [root@node2 ~]# rabbitmqctl cluster_status (rabbitmq集群节点有disc 和ram两种类型,一个集群中至少要有一个disc类型的节点,不指定默认加入为disc)
修改集群的名字[root@node1 ~]# rabbitmqctl set_cluster_name rabbitMQ Setting cluster name to rabbitMQ ... [root@node1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@node1 ... [{nodes,[{disc,[rabbit@node1,rabbit@node3]},{ram,[rabbit@node2]}]}, {running_nodes,[rabbit@node2,rabbit@node3,rabbit@node1]}, {cluster_name,<<"rabbitMQ">>}, {partitions,[]}, {alarms,[{rabbit@node2,[]},{rabbit@node3,[]},{rabbit@node1,[]}]}]
重要信息
(1)、当整个集群down掉时,最后一个down机的节点必须第一个启动到在线状态,如果不是这样,节点会等待30s等最后的磁盘节点恢复状态,然后失败。如果最后下线的节点不能上线,可以通过forget_cluster_node 指令来踢出集群
(2)、如果所有的节点不受控制的同时宕机,比如掉电,会进入所有的节点都会认为其他节点比自己宕机的要晚,即自己先宕机,这种情况下可以使用force_boot指令来启动一个节点
打破集群
当一个节点不属于这个集群的时候,我们需要显式的踢出,可以通过本地或者远程的方式[root@node1 ~]# rabbitmqctl stop_app [root@node1 ~]# rabbitmqctl reset [root@node1 ~]# rabbitmqctl start_app [root@node1 ~]# rabbitmqctl cluster_status
设置镜像队列策略
设置policy,以ha.开头的队列将会被镜像到集群其他所有节点,一个节点挂掉然后重启后会自动同步队列消息(我们生产环境采用这个方式)[root@node1 ~]# rabbitmqctl set_policy ha-all-queue "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
[b]查看状态[/b]
查看应用状态[root@node3 ~]# rabbitmqctl status
查看集群信息[root@node3 ~]# rabbitmqctl cluster_status
访问任意管理端界面查看http://ip:15672HAproxy+Keepalived 高可用
消息队列作为公司的关键基础服务,为给客户端提供稳定、透明的rabbitmq服务,现通过Haproxy+keepalived构建高可用的rabbitmq统一入口,及基本的负载均衡服务
安装[root@node4 ~]# yum install haproxy keepalived -y
设置开机启动
相关文章推荐
- centos搭建rabbitmq集群
- CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看
- centos7 rabbitmq集群搭建+高可用
- centos 7下rabbitmq集群搭建
- centos7 搭建docker内运行rabbitmq,然后再镜像ha方案的完全教程,暂时一个宿主机只能运行一个docker的rabbitmq,但是集群 ha都正常
- Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析
- CentOS7搭建rabbitmq集群
- (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
- rabbitmq集群搭建(centos6.5)
- mariadb多主集群搭建(centos 7)
- CentOS下的rabbitMQ集群安装,高并发消息队列中间件(何志雄)
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.7.Oracle 11G R2 RAC修改public网络IP
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:5.安装Oracle RAC FAQ-RAC安装DB软件runInstaller看不到节点
- Centos7下ZooKeeper集群搭建
- RabbitMQ集群搭建
- RabbitMQ集群搭建
- CentOS下RabbitMq高可用集群环境搭建
- RabbitMQ 高可用:在 Windows 搭建镜像集群
- 在centos上搭建redis集群并附测试(真集群非伪集群)
- CentOS 6.3 HA集群搭建详细过程 提供 软件包