RabbitMQ集群搭建与运维

7 篇文章 0 订阅
7 篇文章 0 订阅

说明:本文在操作系统Red Hat Enterprise Linux Server release 7.2 (Maipo)下进行

一、Rabbit MQ 单机安装

本文采取离线安装的方法,即在Windows上下载所需软件,并上传至Linux。

1. 下载软件

在这里插入图片描述

erlang下载

https://github.com/rabbitmq/erlang-rpm/releases
在这里插入图片描述
注:如果操作系统是Red Hat,注意erlang安装包不要下载成cent os版本了,否则无法正常安装。

rabbitmq下载

http://www.rabbitmq.com/download.html
在这里插入图片描述

2. 安装过程

开放访问端口

关闭防火墙或添加允许访问端口:

systemctl stop firewalld.service

或者

yum install iptables-services
service iptables stop

yum命令安装

将上述安装包放到Linux自己创建的文件夹下,我的: /opt/rabbitmq/installer

cd /opt/rabbitmq/installer/

yum命令本地安装:

yum install erlang-21.1.1-1.el6.x86_64.rpm
yum install rabbitmq-server-3.7.8-1.el7.noarch.rpm

开启监控插件

cd /usr/lib/rabbitmq/bin
./rabbitmq-plugins enable rabbitmq_management

重启rabbitmq使得配置生效:

service rabbitmq-server restart

访问主页

访问URL:http://10.161.7.21:15672/ 应出现以下界面:
在这里插入图片描述

查看日志

cd /var/log/rabbitmq/
tail -f rabbit@RBMQ1.log

3. 账号管理

参考博客

关于用户管理可以参考:https://segmentfault.com/a/1190000010693696#articleHeader4

guest登录

解决guest账号无法登录的问题:

cd /etc/rabbitmq/
touch rabbitmq.config
vim rabbitmq.config

加入如下内容,记得不要漏了符号.

[{rabbit, [{loopback_users, []}]}].

添加用户

rabbitmqctl add_user <username> <newpassword>

图形化添加用户:
在这里插入图片描述

用户授权

rabbitmqctl list_permissions -p /

在这里插入图片描述

rabbitmqctl set_permissions -p "/" wzk".*" ".*" ".*"

在这里插入图片描述

添加角色

rabbitmqctl list_users

在这里插入图片描述

rabbitmqctl set_user_tags wzk administrator

在这里插入图片描述

注意:在进行完上述操作后要重启一下rabbitmq服务:

service rabbitmq-server restart

二、RabbitMQ集群搭建

1. 准备工作

本集群由两台服务器组成,先确保两台服务器分别按照Rabbit单机安装方式安装成功,再进行以下操作。

参考博客

https://segmentfault.com/a/1190000010702020

修改Host

在集群上两台服务器上都配置ip和主机名 :

vim /etc/hosts

分别在21和22下添加对方的IP,主机名(别名):

停止服务

service rabbitmq-server stop

设置Erlang Cookie

设置不同节点间同一认证的Erlang Cookie

服务器22上输入命令:

[root@RBMQ2 rabbitmq]# cd /var/lib/rabbitmq/
[root@RBMQ2 rabbitmq]# mv .erlang.cookie .erlang.cookie.bak

服务器21上输入命令:

[root@RBMQ1 ssh]# scp /var/lib/rabbitmq/.erlang.cookie RBMQ2:/var/lib/rabbitmq/

如果scp命令出现Permission denied, please try again,
对两台服务器同时做以下操作:

vim /etc/ssh/sshd_config 

将PermitRootLogin改为yes
在这里插入图片描述
重启ssh服务:
service sshd restart
再执行scp命令,就可以远程拷贝文件了。

对两台服务器分别执行以下命令:

chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq /var/lib/rabbitmq/.erlang.cookie
chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie

在这里插入图片描述

2. 普通集群搭建

组成集群

两台服务器分别执行:

rabbitmq-server -detached

在从节点RBMQ2上执行:

[root@RBMQ2 a-wzk]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@RBMQ2 ...
[root@RBMQ2 a-wzk]# rabbitmqctl join_cluster rabbit@RBMQ1
Clustering node rabbit@RBMQ2 with rabbit@RBMQ1
[root@RBMQ2 a-wzk]# rabbitmqctl start_app
Starting 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被多次接受的情况。

设置镜像队列策略

命令行设置

在这里插入图片描述

后台UI设置

在Name中输入策略名;
在Pattern中输入queue的匹配模式(正则表达式),^表示以任意字符开头的queue;
在Definition中选择HA mode作为key,将value填上all,策略模式为all,即复制到所有节点,包含新增节点。
在这里插入图片描述

附录:RabbitMQ运维加油站

1. 超级用户免密

如果没有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 
root	ALL=(ALL) 	ALL
a-wzk		ALL=(ALL)	NOPASSWD:ALL

2. 重置后的恢复

在使用RabbitMQ的过程中,RabbitMQ中往往会加入大量的队列,有时候需要使用“暴力”的方法对RabbitMQ进行清理。

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

进行了上述重置后,不仅所有的队列都被清除,而且集群、策略、配置的用户(默认用户guest除外)等全部消失。
重新进行本文提到的配置,特别是join_cluster命令,让集群恢复到之前的状态。

3. 杀死erlang进程后的恢复

如果不慎在操作中将以下两个erlang进程杀死,
在这里插入图片描述

那么应该重新执行:

cd /usr/lib/rabbitmq/bin
 ./rabbitmq-plugins enable rabbitmq_management

重启rabbitmq使得配置生效:

service rabbitmq-server restart

查看erlang相关进程是否已经启动:

ps -ef | grep erlang

停止服务,开启集群:

service rabbitmq-server stop
rabbitmqctl stop_app
rabbitmqctl 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安装目录的sbin文件夹,输入以下命令:

rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述
再次访问就可以看到后台主页了。

附:RabbitMQ常用命令大全

#开启WEB后台监控

./rabbitmq-plugins enable rabbitmq_management



#rabbitmq服务

#启停服务

service rabbitmq-server start

service rabbitmq-server stop

service rabbitmq-server restart

#查看状态

service rabbitmq-server status

#运行节点

rabbitmq-server -detached



#rabbitmqctl(command line tool,命令行工具)

参考博客:https://my.oschina.net/guol/blog/186445

rabbitmqctl stop_app

rabbitmqctl start_app

#初始化node状态,会从集群中删除该节点,从管理数据库中删除所有数据,例如vhosts等等。在初始化之前rabbitmq的应用必须先停止

rabbitmqctl reset

#无条件的初始化node状态

rabbitmqctl force_reset

#[--ram]不写则默认为disc

rabbitmqctl join_cluster <clusternode> [--ram]

rabbitmqctl cluster_status
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值