天天看点

linux安装rabbitmq离线版(含单机部署和集群部署)

rabbitMq离线部署文档

1.环境说明

对于linux系统版本、rabbitMq及相关依赖版本如下:

名称 版本要求
centos系统 7.0以上
rabbitmq 3.7.7~3.7.14
erlang 20.3.x~21.3.x
socat 1.7.3.x

rabbitMq及相关依赖的rpm包下载地址如下:

  1. rabbitMq:https://github.com/rabbitmq/rabbitmq-server/releases/
  2. erlang:https://github.com/rabbitmq/erlang-rpm/releases
  3. socat:https://pkgs.org/download/socat

该部署文档使用的版本如下:

rabbitMq:3.7.9

erlang:21.3.6

socat:1.7.3.2

2.单机版部署

2.1上传rpm包并安装

将rpm包上传至$HOME目录,按照顺序分别执行以下命令

#安装erlang依赖
rpm -ivh erlang-21.3.6-1.el7.x86_64.rpm
#安装socat依赖
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
#安装rabbitmq
rpm -ivh rabbitmq-server-3.7.9-1.el7.noarch.rpm
           

【注意】:部分服务器在执行第一个rpm的时候可能会出现error:Failed dependencies:libcrypto.so.10() …的错误,解决方法如下三种,

1.升级openssl,安装离线文件中的openssl-libs-1.0.2k-19.el7.x86_64.rpm包,然后重新安装上面报错的rpm包即可,执行命令如下

rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force
           

2.安装rpm包的时候添加–force(强制)和–nodeps(不查找依赖关系)参数即可,如下

rpm -ivh erlang-21.3.6-1.el7.x86_64.rpm --force --nodeps
           

3.使用yum安装libcrypto*后,再重新安装rpm包命令如下

yum install libcrypto*
           
2.2 rabbitMq服务的启停
#查看状态
systemctl status rabbitmq-server
#启动服务
systemctl start rabbitmq-server
#停止服务
systemctl stop rabbitmq-server
#重启服务
systemctl restart rabbitmq-server
#添加开机启动RabbitMQ服务
chkconfig rabbitmq-server on
           
2.3 开启web管理接口

RabbitMQ自带了web管理界面,只需要启动插件便可以使用,命令如下:

rabbitmq-plugins enable rabbitmq_management
           

然后通过浏览器访问 http://localhost:15672 (默认用户:guest,密码:guest)

2.4 用户管理

由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见,我们需要删掉默认用户,并添加新用户,此处用户名、密码以【admin、admin123】为例,命令如下:

# 1.删除guest用户
rabbitmqctl delete_user guest
# 2.添加admin用户
rabbitmqctl add_user admin admin123
# 3.将admin添加至administrator
rabbitmqctl set_user_tags robot administrator
# 4.赋予用户默认vhost的全部操作权限
rabbitmqctl set_permissions -p / robot ".*" ".*" ".*"
# 5.查看当前所有用户
rabbitmqctl list_users
# 6.查看admin用户的权限
rabbitmqctl list_user_permissions admin
           
2.5 修改端口(可跳过)

rabbitmq服务的主程序使用的默认端口为5672,如果有需要修改,则按如下步骤操作

查找配置文件位置:

find / -name rabbitmq.config*
# /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example
           

拷贝配置文件到

/etc/rabbitmq

目录下:

cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
           

修改配置文件:

#修改控制台端口号
{rabbitmq_management, [{listener, [{port, 8888}]}]}
#修改mq服务端口号
{rabbit, [{tcp_listeners, [5673]}]}
           

3.集群版部署

3.1 简介

RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。

普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

3.2 部署方案

3.2.1 部署规划

准备至少两台机器,我这里分别为:192.168.24.100,192.168.24.101,设置主机名分别为:mem-100,mem-101。

【注意】如果主机名为localhost,请修改主机名,命令如下

hostnamectl set-hostname mem-100
           

3.2.2 配置hosts文件

配置hosts文件内容(两台台机器上都需要配置,内容一样就可以,前面是IP,后面是各个主机的主机名)

命令:

vi /etc/hosts
           

在hosts文件末尾添加一下内容:

192.168.24.100 mem-100
192.168.24.101 mem-101
           

修改完成后保证两台主机能够相互ping通,如下图:

linux安装rabbitmq离线版(含单机部署和集群部署)
linux安装rabbitmq离线版(含单机部署和集群部署)

【注意】如果无法ping通,请确保两台服务器防火墙关闭,命令如下

systemctl stop firewalld
           

3.2.3 安装和启动

两台服务器分别安装rabbitmq并启动,具体可参考单机部署

#启动服务
systemctl start rabbitmq-server
#启用web插件
rabbitmq-plugins enable rabbitmq_management
           

3.2.4 创建用户(仅在主节点执行)

请在主节点主机上添加用户,参考2.4部分内容

3.2.5 拷贝cookie文件,并重启子节点

Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在$HOME中或者在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie一致,不然节点之间就无法通信。(此处的cookie存放在/var/lib/rabbitmq/.erlang.cookie中)

此处将mem-100设为主节点,使用scp的方式将mem-100节点的.erlang.cookie的值复制到mem-101节点中,命令如下:

scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/.erlang.cookie
           

查看.erlang.cookie中的值,保证mem-100和mem-101的cookie值一样,命令如下:

cat /var/lib/rabbitmq/.erlang.cookie 
           

重启子节点的rabbitmq,使新的.erlang.cookie生效

#重启服务
systemctl restart rabbitmq-server
           

3.2.6 查看集群状态

此处已mem-100作为主节点,在主节点mem-100服务器上查看集群状态,命令:

rabbitmqctl cluster_status
           
linux安装rabbitmq离线版(含单机部署和集群部署)

从上面的结果{cluster_name,<<“[email protected]”>>},可以看出来,集群的名称叫[email protected]

3.2.7 添加集群节点

在子节点mem-101主机上做如下操作,将该节点添加到集群([email protected])中,命令:

# 1.rabbitmqctl stop是停止应用和集群节点,rabbitmqctl stop_app是只停应用,不停集群节点
rabbitmqctl stop_app
rabbitmqctl reset
# 2.添加集群节点
rabbitmqctl join_cluster [email protected]
# 3.再启动应用
rabbitmqctl start_app
           

此时在主节点mem-100主机上查看集群状态如下:

linux安装rabbitmq离线版(含单机部署和集群部署)

【注意】如果在添加集群节点的时候报错,可能的原因如下:

  1. 防火墙问题,端口被拦截,需关闭防火墙或者开放相应端口
  2. hosts文件未修改或者不正确,需检查/etc/hosts文件
  3. cookie文件不一致,需保证两台主机的.erlang.cookie文件的值一致
  4. 集群名称错误,导致集群添加节点失败;通过rabbitmqctl cluster_status命令得到的cluster_name为[email protected],而实际的主机名称为mem-100,此时的集群名称应该为[email protected],而不是[email protected]
  5. 如果仍然不能成功,请kill掉子节点主机的rabbitmq的服务,删除/var/lib/rabbitmq/目录下的mnesia目录所有内容,然后再启动rabbitmq,执行添加节点操作

3.2.8 启用镜像模式,实现高可用集群

在主节点mem-100主机上执行命令:

参数意思为:

ha-all:为策略名称。

:为匹配符,只有一个代表匹配所有,^zlh为匹配名称为zlh的exchanges或者queue。

ha-mode:为匹配类型,他分为3种模式:all-所有(所有的queue),exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器),nodes-指定(需配置ha-params参数,此参数为数组类型比如[“[email protected]”,“[email protected]”]这样指定为mem-100与mem-101这2台机器。)。

web管理界面显示如下

linux安装rabbitmq离线版(含单机部署和集群部署)