搭建rabbitmq高可用,rabbitmq集群需要几台机器
说明:本文在操作系统redhatenterpriselinuxserverrelease 7.2 (mai po )上进行
另一方面,Rabbit MQ独立安装本文采用离线安装的方法,即在Windows上下载必要的软件,然后上传到Linux。 1 .下载软件
erlang下载https://github.com/rabbit MQ/Erlang-rpm/releases
注:如果操作系统为Red Hat,请注意不要将错误安装软件包下载到cent os操作系统版本。 否则,无法正常安装。
rabbitmq下载http://www.rabbit MQ.com/download.html
2 .打开安装过程访问端口以关闭防火墙或添加授权访问端口:
systemctl stop firewalld.service或
yuminstalliptables-servicesserviceiptablesstopyum命令安装将上述安装软件包置于Linux自己的文件夹中。 我的:/opt/rabbitmq/installer
本地安装cd /opt/rabbitmq/installer/yum命令:
yuminstallerlang-21.1.1-1.el6.x86 _ 64.rpmyuminstallrabbitmq-server-3.7.8-1.el7.noarch.rpm监视插件
service rabbitmq-server restart通过访问主页访问URL。 http://10.161.7.21336015672/应该会出现以下接口:
日志CD/var/log/rabbit MQ/tail-f rabbit @ RBM Q1.log3.查看帐户管理参考博客有关用户管理的信息,请参阅https://segment fault.com/a/1190000010101010010000
guest登录解决了guest帐户无法登录的问题:
CD/etc/rabbit MQ/touchrabbitmq.configvimrabbitmq.config请填写以下内容,记住不要遗漏符号。
[{rabbit,[{loopback_users,[]}]}] .添加用户将用户添加到rabbitmqctladd _ userusernamenewpassword图形中:
用户使用rabbitmqctl list_permissions -p /
rabbitmqctlset _ permissions-p '/' wzk '.*.* '.* * '.* '
添加角色rabbitmqctl list_users
rabbitmqctlset _ user _ tagswzkadministrator
注意:执行上述操作后,请重新启动rabbitmq服务。
service Rabbitmq-server restart、RabbitMQ集群构建1 .准备工作本集群由两台服务器构成,确认两台服务器分别以rabbit独立安装方式正常安装后
参见博客https://segment fault.com/a/119000010702020
更改主机以在群集上的两个服务器上配置ip和主机名:
vim /etc/hosts分别在21和22下添加对方的IP、主机名和别名:
停止服务设置rabbit MQ-serverstoperlang cookie在不同节点之间设置具有相同验证的Erlangcookie
在服务器22上输入命令:
[ root @ rbmq2rabbit MQ ] # CD/var/lib/rabbit MQ/[ root @ rbmq2rabbit MQ ] # mv.Erlang.cookie.cookie.bak
[ root @ RBM Q1 ssh ] #使用scp/var/lib/rabbit MQ/. Erlang.cookier bmq 23360/var/lib/rabbit MQ/scp命令验证定义
同时对两台服务器执行以下操作:
vim /etc/ssh/sshd_config将PermitRootLogin更改为yes
重新启动ssh服务:
服务固态硬盘重新启动
通过运行scp命令,可以远程复制文件。
对两台服务器分别运行以下命令:
chmod 400/var/lib/rabbit MQ/. Erlang.cookiechownrabbi
tmq /var/lib/rabbitmq/.erlang.cookiechgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie 2. 普通集群搭建 组成集群两台服务器分别执行:
rabbitmq-server -detached在从节点RBMQ2上执行:
[root@RBMQ2 a-wzk]# rabbitmqctl stop_appStopping rabbit application on node rabbit@RBMQ2 ...[root@RBMQ2 a-wzk]# rabbitmqctl join_cluster rabbit@RBMQ1Clustering node rabbit@RBMQ2 with rabbit@RBMQ1[root@RBMQ2 a-wzk]# rabbitmqctl start_appStarting node rabbit@RBMQ2 ... completed with 3 plugins.如果进入RabbitMQ后台管理页面发现从节点没有启动,那么从节点RBMQ2上执行:
rabbitmqctl start_app 设置节点属性(可选)RabbitMQ集群中节点包括内存节点、磁盘节点。内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘上。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。那么内存节点的性能只能体现在资源管理上,比如增加或删除队列(queue),虚拟主机(vrtual hosts),交换机(exchange)等,发送和接受message速度同磁盘节点一样。一个集群至少要有一个磁盘节点。一个rabbitmq集群中可以共享user,vhost,exchange等,所有的数据和状态都是必须在所有节点上复制的,对于queue根据集群模式不同,应该有不同的表现。在集群模式下只要有任何一个节点能够工作,RabbitMQ集群对外就能提供服务。
在两台服务器上分别执行命令:
rabbitmqctl cluster_status可以看出两个节点都是磁盘节点。
登录RabbitMQ后台查看:
上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。
3. 镜像队列 镜像队列概念镜像队列可以同步queue和message,当主queue挂掉,从queue中会有一个变为主queue来接替工作。
镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列。
镜像队列设置后,会分一个主节点和多个从节点,如果主节点宕机,从节点会有一个选为主节点,原先的主节点起来后会变为从节点。
queue和message虽然会存在所有镜像队列中,但客户端读取时不论物理面连接的主节点还是从节点,都是从主节点读取数据,然后主节点再将queue和message的状态同步给从节点,因此多个客户端连接不同的镜像队列不会产生同一message被多次接受的情况。
在Name中输入策略名;
在Pattern中输入queue的匹配模式(正则表达式),^表示以任意字符开头的queue;
在Definition中选择HA mode作为key,将value填上all,策略模式为all,即复制到所有节点,包含新增节点。
如果没有Linux系统的root账号密码,但自己使用的普通账号拥有超级用户权限,那么执行一些需要超级用户权限的命令时,每次都需要输入密码,比如:
sudo yum install erlang-21.1.1-1.el6.x86_64.rpm为了避免每次都输入sudo密码的麻烦:
sudo vim /etc/sudoers修改其中自己的账号为免密模式:
## Allow root to run any commands anywhere rootALL=(ALL) ALLa-wzkALL=(ALL)NOPASSWD:ALL 2. 重置后的恢复在使用RabbitMQ的过程中,RabbitMQ中往往会加入大量的队列,有时候需要使用“暴力”的方法对RabbitMQ进行清理。
rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl start_app进行了上述重置后,不仅所有的队列都被清除,而且集群、策略、配置的用户(默认用户guest除外)等全部消失。
重新进行本文提到的配置,特别是join_cluster命令,让集群恢复到之前的状态。
如果不慎在操作中将以下两个erlang进程杀死,
那么应该重新执行:
cd /usr/lib/rabbitmq/ssddy ./rabbitmq-plugins enable rabbitmq_management重启rabbitmq使得配置生效:
service rabbitmq-server restart查看erlang相关进程是否已经启动:
ps -ef | grep erlang停止服务,开启集群:
service rabbitmq-server stoprabbitmqctl stop_apprabbitmqctl start_app查看集群状态: rabbitmqctl cluster_status
4. 重启Linux服务器后无法访问Rabbit后台管理页面如果之前从未永久关闭过防火墙,那么Linux在重启后,防火墙会默认打开,需要关闭防火墙。
systemctl stop firewalld.service或
service iptables stop为了防止下次再出现类似的问题,永久关闭防火墙:
chkconfig iptables off重启后该命令会生效。
5. 本地Web管理页面无法访问在本地Windows系统上安装好了ErLang和RabbitMQ,但打开http://localhost:15672却无法访问。
此时应该进入RabbitMQ安装目录的sssddy文件夹,输入以下命令:
再次访问就可以看到后台主页了。