消息中间件之RabbitMQ(一)
简介
RabbitMQ是一个开源的遵循AMQP协议实现的基于Erlang语言编写,支持多种客户端语言,用于在分布式系统中存储消息,转发消息,具有高可用,高扩展性,易用性等特征。
安装RabbitMQ
在虚拟机上二进制安装
- 下载地址:https://www.rabbitmq.com/download.html.
- 环境准备:Centos7.x+Erlang
RabiitMQ是采用Erlang语言开发的,所以系统环境必须依赖Erlang环境,第一步就是安装Erlang。
查看eralng和RabbitMQ版本对比:https://www.rabbitmq.com/which-erlang.html.
- 安装Erlang环境可参考https://www.cnblogs.com/jimlau/p/12029985.html.
1.安装类库(按照顺序)
2.安装Erlang环境yum -y install gcc-c++ yum -y install ncurses-devel yum -y install openssl-devel yum -y install unixODBC-devel #有可以不用执行安装 yum install xz
3.测试tar xvfz otp_src_18.2.1.tar.gz ./configure make install
erl -v
- 安装RabbitMQ
1.通过官网下载RabbitMQ最新rpm包,使用以下命令进行安装
2.若安装报错信息如下:rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
3.若安装出现2的问题使用以下命令安装警告:rabbitmq-server-3.8.14-1.el7.noarch.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 6026dfca: NOKEY 错误:依赖检测失败: erlang >= 21.3 被 rabbitmq-server-3.8.14-1.el7.noarch 需要
4.安装WEB管理界面插件及执行添加用户授权操作即可。rpm -ivh --nodeps rabbitmq-server-3.8.14-1.el7.noarch.rpm
#添加web管理界面插件 rabbitmq-plugins enable rabbitmq_management # 重启RbbitMQ systemctl restart rabbitmq-server # 添加用户名、密码 rabbitmqctl add_user admin admin # 给用户添加权限 rabbitmqctl set_user_tags admin administrator
- 启动rabbitMq服务命令
#启动服务 systemctl start rabbitmq-server #停止服务 systemctl stop rabbitmq-server #重启服务 systemctl restart rabbitmq-server #开机自启动服务 systemctl enable rabbitmq-server
至此手动安装RbbitMQ完成。
docker镜像安装
安装命令
docker run -di --name myrabbit -v /home/rabbitmq/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
http://192.168.204.110:15672/#/ 访问即可
RabbitMQ新增授权账号和密码
RabbitMQ默认只有一个来宾用户guest/guest,这个账号密码只适合本机访问,对于虚拟机及远程使用只能新增。
- 新增用户
rabbitmqctl add_user admin admin
- 设置用户分配操作权限
rabbitmqctl set_user_tags admin administrator
用户级别:
1、administrator 可以登陆控制台,查看所有信息,可以对Rabbitmq进行管理。
2、monitoring 监控者 登陆控制台,查看所有信息
3、policymaker 策略制定者 登陆控制台,指定策略
4、managment 普通管理员 登陆控制台
5、none 不能访问management plugin
6、management 查看自己相关节点信息
- 为用户添加资源权限
rabbitmqctl set_permissions -p /admin “." ".” “.*”
- 小结
rabbitmqctl add_user 账号 密码
rabbitmqctl set_user_tags 账号 权限角色
rabbitmqctl change_password 用户名 新密码 ---修改密码
rabbitmqctl delete_user username ---删除用户
rabbitmqctl list_users 查看用户清单
rabbitmqctl.bat set_permissions -p / 用户名".*" ".*" ".*" ----为用户设置administrator角色。
rabbitmqctl.bat set_permissions -p / root ".*" ".*" ".*"
RabbitMQWeb管理界面操作及授权
- 默认情况下,rabbitmq是没有安装web端的客户端插件,需要重新安装才可以生效
rabbitmq-plugins enable rabbitmq_management
- 安装完毕之后,重启服务即可
systemctl restart rabbitmq-server
一定要记住,在对应服务器(阿里云,腾讯云等)安全组件中开放15672的端口。
- 访问地址:http://ip:15672/
RabbitMQ集群安装(单机伪集群)
第一步:停止单机服务
[root@localhost ~]# clear
[root@localhost ~]# ps -aux|grep rabbitmq
[root@localhost ~]# systemctl stop rabbitmq
[root@localhost ~]# systemctl stop rabbitmq-server
[root@localhost ~]# systemctl status rabbitmq-server
第二步:启动第一个节点主节点
# 启动第一个节点
[root@localhost ~]# sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-node1 rabbitmq-server start &
[1] 1735
[root@localhost ~]# Configuring logger redirection
## ## RabbitMQ 3.8.14
## ##
########## Copyright (c) 2007-2021 VMware, Inc. or its affiliates.
###### ##
########## Licensed under the MPL 2.0. Website: https://rabbitmq.com
Doc guides: https://rabbitmq.com/documentation.html
Support: https://rabbitmq.com/contact.html
Tutorials: https://rabbitmq.com/getstarted.html
Monitoring: https://rabbitmq.com/monitoring.html
Logs: /var/log/rabbitmq/rabbit-node1@localhost.log
/var/log/rabbitmq/rabbit-node1@localhost_upgrade.log
Config file(s): (none)
Starting broker... completed with 3 plugins.
至此代表第一个节点启动成功
第三步:启动从节点
# 启动第二个节点
[root@localhost ~]# sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit-node2 rabbitmq-server start &
[2] 1982
[root@localhost ~]# sudo: listener:找不到命令
#sudo 找不到这个命令的解决方式:请参考后面备注
第四步:验证俩个节点是否启动成功
[root@localhost ~]# ps -ef|grep rabbitmq
root 1735 1415 0 16:56 pts/0 00:00:00 /usr/bin/sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-node1 env LD_LIBRARY_PATH=/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:/opt/rh/devtoolset-9/root/usr/lib64/dyninst:/opt/rh/devtoolset-9/root/usr/lib/dyninst:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib PATH=/opt/rh/devtoolset-9/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/mongodb/mongodb/bin:/root/bin scl enable devtoolset-9 'rabbitmq-server' 'start'
root 1737 1735 0 16:56 pts/0 00:00:00 scl enable devtoolset-9 'rabbitmq-server' 'start'
root 1743 1738 0 16:56 pts/0 00:00:00 /sbin/runuser -u rabbitmq -- /usr/lib/rabbitmq/bin/rabbitmq-server start
rabbitmq 1751 1743 0 16:56 pts/0 00:00:00 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server start
rabbitmq 1758 1751 1 16:56 pts/0 00:00:11 /usr/local/lib/erlang/erts-11.2/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -B i -- -root /usr/local/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa -noshell -noinput -s rabbit boot -boot start_sasl -lager crash_log false -lager handlers [] start
rabbitmq 1765 1758 0 16:56 ? 00:00:00 erl_child_setup 65536
rabbitmq 1787 1 0 16:56 ? 00:00:00 /usr/local/lib/erlang/erts-11.2/bin/epmd -daemon
rabbitmq 1805 1765 0 16:56 ? 00:00:00 inet_gethost 4
rabbitmq 1806 1805 0 16:56 ? 00:00:00 inet_gethost 4
root 2169 1415 0 17:06 pts/0 00:00:00 /usr/bin/sudo -E env LD_LIBRARY_PATH=/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:/opt/rh/devtoolset-9/root/usr/lib64/dyninst:/opt/rh/devtoolset-9/root/usr/lib/dyninst:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib PATH=/opt/rh/devtoolset-9/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/mongodb/mongodb/bin:/root/bin scl enable devtoolset-9 'env' 'PATH=/opt/rh/devtoolset-9/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/mongodb/mongodb/bin:/root/bin' 'RABBITMQ_NODE_PORT=5673' 'RABBITMQ_SERVER_START_ARGS=-rabbitmq_management listener [{port,15673}]' 'RABBITMQ_NODENAME=rabbit-node2' 'rabbitmq-server' 'start'
root 2173 2169 0 17:06 pts/0 00:00:00 scl enable devtoolset-9 'env' 'PATH=/opt/rh/devtoolset-9/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/src/java/jdk-11.0.5/bin:/usr/local/mongodb/mongodb/bin:/root/bin' 'RABBITMQ_NODE_PORT=5673' 'RABBITMQ_SERVER_START_ARGS=-rabbitmq_management listener [{port,15673}]' 'RABBITMQ_NODENAME=rabbit-node2' 'rabbitmq-server' 'start'
root 2179 2174 0 17:06 pts/0 00:00:00 /sbin/runuser -u rabbitmq -- /usr/lib/rabbitmq/bin/rabbitmq-server start
rabbitmq 2187 2179 0 17:06 pts/0 00:00:00 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server start
rabbitmq 2194 2187 4 17:06 pts/0 00:00:09 /usr/local/lib/erlang/erts-11.2/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -B i -- -root /usr/local/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa -noshell -noinput -s rabbit boot -boot start_sasl -rabbitmq_management listener [{port,15673}] -lager crash_log false -lager handlers [] start
rabbitmq 2201 2194 0 17:06 ? 00:00:00 erl_child_setup 65536
rabbitmq 2241 2201 0 17:06 ? 00:00:00 inet_gethost 4
rabbitmq 2242 2241 0 17:06 ? 00:00:00 inet_gethost 4
root 2515 1415 0 17:09 pts/0 00:00:00 grep --color=auto rabbitmq
第五步:将rabbit-node1节点操作为主节点
#停止应用
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node1 stop_app
Stopping rabbit application on node rabbit-node1@localhost ...
#目的是清除节点上面的数据,若不清除,无法将节点加入集群
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node1 reset
Resetting node rabbit-node1@localhost ...
#启动应用
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node1 start_app
Starting node rabbit-node1@localhost ...
第六步:将rabbit-node2节点操作为从节点
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node2 stop_app
Stopping rabbit application on node rabbit-node2@localhost ...
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node2 reset
Resetting node rabbit-node2@localhost ...
#将rabbit-node2节点加入到主节点中,@服务器的主机名
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node2 join_cluster rabbit-node1@localhost
Clustering node rabbit-node2@localhost with rabbit-node1@localhost
[root@localhost ~]# sudo rabbitmqctl -n rabbit-node2 start_app
Starting node rabbit-node2@localhost ...
第七步:验证集群状态
[root@localhost ~]# sudo rabbitmqctl cluster_status -n rabbit-node1
Cluster status of node rabbit-node1@localhost ...
Basics
Cluster name: rabbit-node1@localhost
Disk Nodes
rabbit-node1@localhost
rabbit-node2@localhost
Running Nodes
rabbit-node1@localhost
rabbit-node2@localhost
第八步:Web监控
分别为节点一和节点二添加用户权限
rabbitmqctl -n rabbit-node1 add_user admin admin
rabbitmqctl -n rabbit-node1 set_user_tags admin administrator
rabbitmqctl -n rabbit-node1 set_permissions -p / admin “." ".” “.*”
rabbitmqctl -n rabbit-node2 add_user admin admin
rabbitmqctl -n rabbit-node2 set_user_tags admin administrator
rabbitmqctl -n rabbit-node2 set_permissions -p / admin “." ".” “.*”
遇到问题:sudo listener命令未找到:
解决方式请参考:https://blog.csdn.net/hawkcici160/article/details/79810676/