Linux下RabbitMQ的下载、安装、集群
一、版本对应关系
RabbitMQ是erlang开发的,RabbitMQ和erlang的版本对应关系如下链接:
https://www.rabbitmq.com/which-erlang.html
这里安装RabbitMQ3.8.29,erlang23.3.版本对应关系如下:
二、安装包下载
RabbitMQ:
下载地址:https://github.com/rabbitmq/rabbitmq-server/releases
erlang:
下载地址:https://github.com/rabbitmq/erlang-rpm/releases
socat:
下载地址:http://www.rpmfind.net/linux/rpm2html/search.php?query=socat(x86-64)
三、将这三个安装包上传至Linux
四、erlang安装
进入到安装包目录下,执行如下命令:
rpm -ivh erlang-23.3.4.8-1.el7.x86_64.rpm
然后输入erl -v能看到版本信息就说明安装成功了
五、socat安装
执行如下命令:
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
六、RabbitMQ安装
执行如下命令:
rpm -ivh rabbitmq-server-3.8.29-1.el7.noarch.rpm
验证是否安装成功
rpm -qa |grep rabbitmq
七、开启管理界面
rabbitmq-plugins enable rabbitmq_management
然后就会在/etc/rabbitmq下看到有个enabled_plugins文件
------2022.8.12补充------
前端在做消息通知时使用到了rabbitma的插件rabbitmq_stomp,安装步骤如下:
##开启管理界面即上一步 rabbitmq-plugins enable rabbitmq_management ##启动js连接插件 rabbitmq-plugins enable rabbitmq_stomp rabbitmq-plugins enable rabbitmq_web_stomp_examples
#rabbit启动/重启后可查看对应的15674端口号是否启用,命令: netstat -tunlp
netstat -tunlp|grep 15674
--------补充end-------
八、在/etc/rabbitmq下添加配置文件rabbitmq.config,解决只能localhost访问的问题
vi /etc/rabbitmq/rabbitmq.config
复制下面到配置文件中后保存退出
[{rabbit,[{loopback_users,[]}]}].
九、RabbitMQ启动、查看启动状态、停止
# 启动rabbitmq命令: systemctl start rabbitmq-server # 查看启动状态命令: systemctl status rabbitmq-server #停止rabbitmq命令: systemctl stop rabbitmq-server
#开机自启动:
systemctl enable rabbitmq-server
十、登录管理界面
URL地址:http://192.168.80.10:15672
默认端口:15672
默认账号:guest
默认密码:guest
十一、集群
以上是单机部署,一个挂了整个服务都没法用,在实际工作中一般是集群化部署,一台挂了还有其他顶着,一般建议最少三台做集群。
集群方式有普通集群和镜像集群两种方式,普通集群方式只同步元数据,不同步队列中的消息,没做持久化挂了后会丢失数据,这里采用镜像集群,来保证高可用。
架构如下:
1.首先停止mq服务。
2.然后修改每台服务器的host,因为在添加节点的时候节点host不能包含点,有点就报错,所以这里必须修改此文件,通过host-name来添加节点
这里的名字我这里取mq01,mq02,mq03,设置用户名后下次进入服务器会自动跳转到这个名字,默认是localhost,可以设置一个具有大范围且具有代表性的名字,比如server01、server02啥的
vi /etc/hosts #添加以下 192.168.114.1 mq01 192.168.114.1 mq02 192.168.114.1 mq03
3.在每台服务器设置自己的host-name,默认是localhost
#设置与自己对应的名字 hostnamectl set-hostname mq01 #切换到此名下 bash
区别:
默认localhost:
mq0xxx:
4.修改.erlang.cookie保证三台机器的cookie内容一致
找到erlang cookie文件的位置,源码包安装一般会存在~/.erlang.cookie;rpm包安装一般是在/var/lib/rabbitmq/.erlang.cookie。
这个文件是隐藏文件且只读,因此没法直接修改其内容,这里将 mq01 的该文件使用rsync或者是scp复制到 mq02、mq03,其中过程中需要输入密码。
scp -r /var/lib/rabbitmq/.erlang.cookie mq2:/var/lib/rabbitmq/.erlang.cookie
scp -r /var/lib/rabbitmq/.erlang.cookie mq3:/var/lib/rabbitmq/.erlang.cookie
5.然后在每台机器启动自己的mq服务,在localhost下启动和在mq0xxx下启动的mq服务是完全不同的东西,所以要保证在mq0xxx下启动。
systemctl start rabbitmq-server
至此集群准备工作已完成,下面开始集群
6.这里我们将mq01作为主节点,只需将mq02,mq03加入到mq01即可,mq01不用做任何操作
在mq02,mq03机器上分别运行如下:
#停止RabbitMQ应用
rabbitmqctl stop_app #加入到mq01节点
#参数--ram表示内存节点,默认是disk磁盘节点,即mq01已经是disk节点,在集群中至少得有一个磁盘节点,三台集群中一般1个磁盘节点和2个内存节点 rabbitmqctl join_cluster --ram rabbit@mq01
#启动RabbitMQ应用 rabbitmqctl start_app
7.常用命令:rabbitmqctl help可以查看所有命令
#查看集群状态 rabbitmqctl cluster_status #查看插件安装情况 rabbitmq-plugins list
8.在任意节点服务器上创建策略
首先登录到管理界面,默认账号密码 guest guest 然后点击admin,添加策略
添加完后会自动同步到其他节点。
参数含义:
Name:policy 的名称。
Pattern:queue 的匹配模式(正则表达式)^表示匹配所有队列。
priority 为可选参数,表示 policy 的优先级。
Definition:镜像定义,主要由三个参数:ha-mode,ha-params,ha-sync-mode。
ha-mode:镜像队列的模式,有效值为 all、exactly、nodes。
all 表示在集群中所有的节点上进行镜像(默认这个)。
exactly 表示在指定个数的节点上进行镜像,节点的个数由 ha-params 指定。
nodes 表示在指定的节点上进行镜像,节点名称通过 ha-params 指定。
ha-params:ha-mode 模式需要用到的参数。
ha-sync-mode:进行队列中消息的同步方式,有效值为 automatic 和 manual。
9.测试结果
创建测试队列
点进去队列发布消息:
然后去别的节点可以看到同步的消息记录了,然后还可以获取到消息内容
十二、卸载
1、卸载rabbitmq相关文件
#停止rabbitmq服务 systemctl stop rabbitmq-server #查看rabbitmq安装的相关列表 yum list | grep rabbitmq #卸载rabbitmq-server.noarch yum -y remove rabbitmq-server.noarch
2、卸载erlang
#查看erlang安装的相关列表 yum list | grep erlang #卸载erlang已安装的相关内容 yum -y remove erlang-* #删除相关的文件 rm -rf /usr/lib64/erlang rm -rf /var/lib/rabbitmq rm -rf /usr/local/erlang rm -rf /usr/local/rabbitmq
十三、修改guest的密码
rabbitmqctl change_password guest aabbcc112233
十四、新增一个管理员账号
在服务器上运行以下命令即可:
#查看用户列表
rabbitmqctl list_users
#添加用户 设置密码
rabbitmqctl add_user admin password
#给用户打标签 rabbitmqctl set_user_tags admin administrator
#设置权限 rabbitmqctl set_permissions -p / admin"." "." ".*"
#admin为新管理员账号,自行命名,password为密码,自行命名
十五、其他命令:
注意以下所有命令前面需要加一个rabbitmqctl空格
#添加用户; add_user <username> <password> #删除一个用户: delete_user <username> #改变用户密码(也是改变web管理登陆密码) ; change_password <usemame> <newpassword> #清除用户的密码,该用户将不能使用密码登陆,但是可以通过SASL登陆如果配置了SASL clear_password <usemame> #设置用户tags; set_user_tags <username> <tag>#列出用户: list_users #创建一个vhosts; add_vhost <vhostpath> #删除一个vhosts; delete_vhost <vhostpath> #列出vhosts: list_vhosts [<vhostinfoitem>] #针对一个vhosts给用户赋予相关权限; set_permissions [p <vhostpath>] <User> <conf> <write> <read> #清除一个用户对vhosts的权限; clear_permissions [P <vhostpath>] <username> #列出哪些用户可以访问该vhosts; list_permissions [p <vhostpath>] #列出该用户的访问权限; list_user_permissions <username> set parameter [-P <vhostpath>] <component name> <name> <value> clear_parameter [p <vhostpath>] <component name> <key> list parameters [p <vhostpath>]