RabbitMQ的安装
1、Windows环境下的RabbitMQ安装步骤
使用的版本:otp_win64_23.2 + rabbitmq-server-3.8.16
版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix
1.1 下载并安装erlang
RabbitMQ 服务端代码是使用并发式语言 Erlang 编写的,安装 RabbitMQ 的前提是安装 Erlang。
下载地址:
http://www.erlang.org/downloads
https://www.erlang.org/patches/otp-23.2
根据操作系统选择 erlang 下载版本。
下载完的软件包:
双击软件点击下一步进行安装,和平时使用的软件的安装方式是一样的。
安装完之后配置环境变量,此电脑-->鼠标右键属性-->高级系统设置-->环境变量-->新建系统环境变量。
变量名:ERLANG_HOME
变量值就是刚才 erlang 的安装地址,点击确定。
然后编辑系统变量 path,将 %ERLANG_HOME%\bin
加入到 path 中。
最后 windows 键 +R 键,输入 cmd,再输入 erl,看到版本号就说明 erlang 安装成功了。
1.2 下载并安装RabbitMQ
下载地址:http://www.rabbitmq.com/download.html
这里下载 v3.8.16
版本:
https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.16
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.16/rabbitmq-server-3.8.16.exe
双击下载后的 .exe 文件,安装过程与 erlang 的安装过程相同。
RabbitMQ 安装目录中是不允许有空格的。
RabbitMQ 安装好后接下来安装 RabbitMQ-Plugins
,打开命令行 cd,输入 RabbitMQ 的 sbin 目录。
我的目录是:C:\zsxsoftware\rabbitmq\rabbitmq_server-3.8.16\sbin
然后在后面输入 rabbitmq-plugins enable rabbitmq_management
命令进行安装:
输入 rabbitmqctl status
,如果出现以下的图,说明安装是成功的,并且说明现在 RabbitMQ Server 已经启动
了,运行正常。
打开 sbin 目录,双击 rabbitmq-server.bat
等几秒钟看到这个界面后,访问 http://localhost:15672
然后可以看到如下界面:
默认用户名和密码都是 guest,登陆即可:
1.3 安装遇到的问题
rabbitmq-plugins enable rabbitmq_management
命令执行错误:
shell
rabbitmq-service stop
rabbitmq-service remove
rabbitmq-service install
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl status
命令执行错误:
tex
Error: unable to perform an operation on node 'rabbit@DESKTOP-8VB0JLG'. Please see diagnostics information and suggestions below.
1、将C:\Users\{用户名}\.erlang.cookie
复制到 C:\Windows\System32\config\systemprofile
目录。
2、重启 rabbitMQ 服务。
1.4 配置允许远程访问
更多情况下,队列服务往往不在我们本机上,我们需要远程来控制 RabbitMQ,但是默认是无法通过
http://hostname:15672
来访问的:
添加一个新的用户:
点击 zsx242030
用户:
点击 set permission
赋予权限。
使用 rabbitmqctl list_users
查看用户信息:
然后使用新建的用户尝试登录:
1.5 RabbitMQ常用的命令
shell
# 停止服务
rabbitmq-service stop
# 安装服务
rabbitmq-service install
# 开启服务
rabbitmq-service start
shell
# 查看用户信息
rabbitmqctl list_users
shell
# guest密码忘记,更改密码
rabbitmqctl change_password guest guest
# 设置用户为超级管理员
rabbitmqctl set_user_tags guest administrator
# 赋予权限
rabbitmqctl set_permissions -p / guest '.*' '.*' '.*'
2、Linux环境下的RabbitMQ安装步骤
使用的版本:otp_src_22.3.tar.gz + rabbitmq-server-generic-unix-3.7.15.tar.xz
2.1 安装erlang
由于 rabbitmq 是基于 erlang 语言开发的,所以必须先安装 erlang。
安装依赖:
shell
$ yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel
去 erlang 官网下载安装包上传到 linux 服务器。
https://www.erlang.org/downloads
或者使用 wget 命令下载:
shell
$ wget http://erlang.org/download/otp_src_22.3.tar.gz
解压:
shell
$ tar -zxvf otp_src_22.3.tar.gz
移走:
shell
$ mv otp_src_22.3 /usr/local/
切换目录:
shell
$ cd /usr/local/otp_src_22.3/
创建即将安装的目录:
shell
$ mkdir ../erlang
配置安装路径:
shell
$ ./configure --prefix=/usr/local/erlang
如果遇到这个错你就假装没看到:
安装:
shell
$ make install
查看一下是否安装成功:
shell
$ ll /usr/local/erlang/bin
添加环境变量:
shell
$ echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
刷新环境变量:
shell
$ source /etc/profile
甩一条命令:
shell
$ erl
在里面输入 halt(). 命令退出来(那个点号别忘记)
2.2 安装RabbitMQ
使用下面命令下载 rabbitmq 或者是下载好之后上传到 linux 服务器。
shell
$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.15/rabbitmq-server-generic-unix-3.7.15.tar.xz
由于是 tar.xz 格式的所以需要用到 xz,没有的话就先安装:
shell
$ yum install -y xz
第一次解压:
shell
$ /bin/xz -d rabbitmq-server-generic-unix-3.7.15.tar.xz
第二次解压:
shell
$ tar -xvf rabbitmq-server-generic-unix-3.7.15.tar
移走:
shell
$ mv rabbitmq_server-3.7.15/ /usr/local/
改名:
shell
$ mv /usr/local/rabbitmq_server-3.7.15 /usr/local/rabbitmq
配置环境变量
shell
$ echo 'export PATH=$PATH:/usr/local/rabbitmq/sbin' >> /etc/profile
刷新环境变量
shell
$ source /etc/profile
2.3 启动
启动:
shell
$ rabbitmq-server -detached
编辑 /etc/hosts
文件,在文件的末尾加一条 127.0.0.1 zsx
即可。
重新启动:
状态:
shell
$ rabbitmqctl status
停止:
shell
$ rabbitmqctl stop
2.4 WEB管理
开启web插件
shell
$ rabbitmq-plugins enable rabbitmq_management
开放 15672 端口:
shell
# 查看开放的端口号
firewall-cmd --list-all
# 设置开放的端口号
firewall-cmd --add-port=15672/tcp --permanent
# 重启防火墙
firewall-cmd --reload
访问:http://192.168.94.186:15672/
默认账号密码(这个账号只允许本机访问):guest/guest
2.5 用户管理
查看所有用户:
shell
$ rabbitmqctl list_users
添加一个用户:
shell
$ rabbitmqctl add_user zsx242030 zsx242030
配置权限:
shell
$ rabbitmqctl set_permissions -p "/" zsx242030 ".*" ".*" ".*"
查看用户权限:
shell
$ rabbitmqctl list_user_permissions zsx242030
设置 tag:
shell
$ rabbitmqctl set_user_tags zsx242030 administrator
删除用户(安全起见,删除默认用户)
shell
$ rabbitmqctl delete_user guest
2.6 登陆
配置好用户之后然后就可以用新账号进行登陆:
3、Docker安装RabbitMQ
3.1 搜索镜像
shell
$ docker search rabbitmq
3.2 拉取镜像
shell
$ docker pull rabbitmq:3.7.15
3.3 启动运行
shell
$ docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --hostname myRabbit --name rabbitmq --restart=always rabbitmq:3.7.15
参数说明:
-d
:表示在后台运行容器;
-p
:将容器的端口 5672(应用访问端口)和15672(控制台Web端口号)映射到主机中;
-e
:指定环境变量:
-
RABBITMQ_DEFAULT_VHOST
:默认虚拟机名; -
RABBITMQ_DEFAULT_USER
:默认的用户名; -
RABBITMQ_DEFAULT_PASS
:默认的用户密码;
--hostname
:指定主机名(RabbitMQ 的一个重要注意事项是它根据所谓的节点名称存储数据,默认为主机名);
--name
:设置容器名称;
rabbitmq:3.7.15
:容器使用的镜像名称;
3.4 查看启动情况
shell
$ docker logs -f rabbitmq
shell
$ docker ps -l
3.5 启动 rabbitmq_management
shell
$ docker exec -it rabbitmq /bin/bash
$ rabbitmq-plugins enable rabbitmq_management
或者是通过下面命令:
shell
$ docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
3.6 访问 RabbitMQ后台管理
浏览器输入地址:http://192.168.94.186:15672/
即可访问后台管理页面,这里的 ip 为运行 RabbitMQ 所
在的服务器的 IP 地址。
默认的用户名和密码都是 guest (如果没有在容器创建的时候指定用户名密码)。
但由于我们启动的时候设置了默认的用户名和密码,所以我们可以使用设置的用户名和密码登录。
4、镜像集群搭建
4.1 搭建环境
IP | 主机 |
---|---|
192.168.54.200 | master |
192.168.54.201 | slave1 |
192.168.54.202 | slave2 |
shell
$ vi /etc/hosts
192.168.54.200 master
192.168.54.201 slave1
192.168.54.202 slave2
使用的版本:otp_src_22.3.tar.gz + rabbitmq-server-generic-unix-3.7.15.tar.xz
4.2 安装erlang(所有机器)
由于 rabbitmq 是基于 erlang 语言开发的,所以必须先安装 erlang。
安装依赖:
shell
$ yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel
去 erlang 官网下载安装包上传到 linux 服务器:
shell
http://erlang.org/download/otp_src_22.3.tar.gz
解压:
shell
$ tar -zxvf otp_src_22.3.tar.gz
移走:
shell
$ mv otp_src_22.3 /usr/local/
切换目录:
shell
$ cd /usr/local/otp_src_22.3/
创建即将安装的目录:
shell
$ mkdir ../erlang
配置安装路径:
shell
$ ./configure --prefix=/usr/local/erlang
安装:
shell
$ make install
查看一下是否安装成功:
shell
$ ll /usr/local/erlang/bin
添加环境变量:
shell
$ echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
刷新环境变量:
shell
$ source /etc/profile
甩一条命令:
shell
$ erl
在里面输入 halt(). 命令退出来(那个点号别忘记)
4.3 安装RabbitMQ(所有机器)
将下载好之后的软件上传到 linux 服务器:
shell
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.15/rabbitmq-server-generic-unix-3.7.15.tar.xz
由于是 tar.xz 格式的所以需要用到 xz,没有的话就先安装:
shell
$ yum install -y xz
第一次解压:
shell
$ /bin/xz -d rabbitmq-server-generic-unix-3.7.15.tar.xz
第二次解压:
shell
$ tar -xvf rabbitmq-server-generic-unix-3.7.15.tar
移走:
shell
$ mv rabbitmq_server-3.7.15/ /usr/local/
改名:
shell
$ mv /usr/local/rabbitmq_server-3.7.15 /usr/local/rabbitmq
配置环境变量:
shell
$ echo 'export PATH=$PATH:/usr/local/rabbitmq/sbin' >> /etc/profile
刷新环境变量:
shell
$ source /etc/profile
启动:
shell
$ rabbitmq-server -detached
查看启动状态:
elixir
$ ps -ef | grep rabbitmq
状态:
shell
$ rabbitmqctl status
停止:
shell
$ rabbitmqctl stop
4.4 WEB管理(所有机器)
开启 web 插件:
shell
$ rabbitmq-plugins enable rabbitmq_management
开放 15672 端口:
shell
# 查看开放的端口号
firewall-cmd --list-all
# 设置开放的端口号
firewall-cmd --add-port=15672/tcp --permanent
# 重启防火墙
firewall-cmd --reload
访问:http://ip:15672/
默认账号密码(这个账号只允许本机访问):guest/guest
4.5 用户管理(所有机器)
查看所有用户:
shell
$ rabbitmqctl list_users
添加一个用户:
shell
$ rabbitmqctl add_user zsx242030 zsx242030
配置权限:
shell
$ rabbitmqctl set_permissions -p "/" zsx242030 ".*" ".*" ".*"
查看用户权限:
shell
$ rabbitmqctl list_user_permissions zsx242030
设置 tag:
shell
$ rabbitmqctl set_user_tags zsx242030 administrator
删除用户(安全起见,删除默认用户)
shell
$ rabbitmqctl delete_user guest
4.6 镜像模式集群的搭建
4.6.1 停止RabbitMQ服务(所有机器)
shell
$ rabbitmqctl stop
4.6.2 拷贝.erlang.cookie(master机器)
官方在介绍集群的文档中提到过 .erlang.cookie
一般会存在这两个地址:
第一个是 ~/.erlang.cookie
第二个地方就是 /var/lib/rabbitmq/.erlang.cookie
本文的地址在 ~/.erlang.cookie
shell
$ scp /root/.erlang.cookie root@slave1:/root/
$ scp /root/.erlang.cookie root@slave2:/root/
4.6.3 启动RabbitMQ服务
顺带启动 Erlang 虚拟机和 RabbitMQ 应用服务,在 master、slave1、slave2 执行命令:
shell
$ rabbitmq-server -detached
4.6.4 节点加入
RabbitMQ 集群的搭建需要选择其中任意一个节点为基准,将其它节点逐步加入。这里我们以 master 为基准节
点,将 slave1 和 slave2 加入集群。在 slave1 和 slave2 上执行以下命令:
shell
# 1.停止服务
rabbitmqctl stop_app
# rabbitmqctl stop会将Erlang虚拟机关闭,rabbitmqctl stop_app只关闭RabbitMQ服务
# 2.重置状态
rabbitmqctl reset
# 3.节点加入,在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
# slave1加入master,slave2加入master
rabbitmqctl join_cluster rabbit@master
# 4.启动服务
rabbitmqctl start_app
4.6.5 查看集群状态
此时可以在任意节点上使用 rabbitmqctl cluster_status
命令查看集群状态,输出如下:
shell
[root@master ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@master ...
[{nodes,[{disc,[rabbit@master,rabbit@slave1,rabbit@slave2]}]},
{running_nodes,[rabbit@slave2,rabbit@slave1,rabbit@master]},
{cluster_name,<<"rabbit@master">>},
{partitions,[]},
{alarms,[{rabbit@slave2,[]},{rabbit@slave1,[]},{rabbit@master,[]}]}]
shell
[root@slave1 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@slave1 ...
[{nodes,[{disc,[rabbit@master,rabbit@slave1,rabbit@slave2]}]},
{running_nodes,[rabbit@slave2,rabbit@master,rabbit@slave1]},
{cluster_name,<<"rabbit@master">>},
{partitions,[]},
{alarms,[{rabbit@slave2,[]},{rabbit@master,[]},{rabbit@slave1,[]}]}]
shell
[root@slave2 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@slave2 ...
[{nodes,[{disc,[rabbit@master,rabbit@slave1,rabbit@slave2]}]},
{running_nodes,[rabbit@master,rabbit@slave1,rabbit@slave2]},
{cluster_name,<<"rabbit@master">>},
{partitions,[]},
{alarms,[{rabbit@master,[]},{rabbit@slave1,[]},{rabbit@slave2,[]}]}]
4.6.6 UI 界面查看
4.6.7 配置镜像模式
在任意节点执行即可:
shell
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
4.6.8 从集群中移除节点
1、在需要移除的节点上执行停止命令
shell
rabbitmqctl stop_app
2、在其他节点上执行移除节点命令
shell
rabbitmqctl forget_cluster_node rabbit@slave2
--offline 参数,它允许节点在自身没有启动的情况下将其他节点剔除。
4.6.9 解除集群
重置当前节点:
shell
# 1.停止服务
rabbitmqctl stop_app
# 2.重置集群状态
rabbitmqctl reset
# 3.重启服务
rabbitmqctl start_app
重新加入集群:
shell
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入
rabbitmqctl join_cluster rabbit@node1
# 4.重启服务
rabbitmqctl start_app
4.6.10 变更节点类型
shell
# 1.停止服务
rabbitmqctl stop_app
# 2.变更类型,有两种类型ram和disc
# 我们可以将节点的类型从RAM更改为Disk
rabbitmqctl change_cluster_node_type disc
# 3.重启服务
rabbitmqctl start_app