RabbitMQ安装和RabbitMQ单机集群的搭建
RabbitMQ安装
环境:Centos7
先上官网文档地址(centos):https://www.rabbitmq.com/install-rpm.html
安装Erlang
因为RabbitMQ是基于erlang(一种面向并发的语言,多用于开发电话和通信应用程序)开发的,所以需要先安装erlang环境(好比运行java程序必须安装jdk)
先上erlang官方安装说明文档地址:https://www.erlang-solutions.com/resources/download.html
安装之前需要先查看RabbitMQ与Erlang之间版本兼容性 :https://www.rabbitmq.com/which-erlang.html
安装erlang有三种方式
1.去官网下载rpm包进行安装,附上下载地址:https://www.erlang-solutions.com/downloads/
2.使用yum安装(这种方式安装的版本可能过老,不建议)
3.使用RabbitMQ官方制作的依赖包
rpm包安装
先说rpm方式,去官网下载rpm包网速随缘,有时就会卡在页面上下面选择安装包的页面出不来,正常出来的样子:
点击view all查看所有可以获取的版本
我这边选择最新的23.2.3版本,具体选择哪个版本下载哪个包根据自己系统和准备安装的RabbitMQ版本决定
当然也可以直接使用wget命令下载:
wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
接下来进行安装:
rpm -Uvh erlang-solutions-2.0-1.noarch.rpm
yum install epel-release
sudo yum install erlang
yum安装
需要注意的是这种方式安装到的erlang版本可能比较老,如果和我一样啥软件都必须是安装最新版的还是不要使用这种方式了,需要根据erlang版本对照rabbitmq官方给出的版本对照表去下正确版本的rabbitmq(这并不是说其他方式不需要注意版本关系,只是其他两种方式安装如果erlang和rabbitmq选择的都是最新版本一般不会出问题)。
因为erlang在默认的yum库中不可用,所以需要先安装epel存储库:
[root@localhost opt]# yum -y install epel-release
题外话:EPEL (Extra Packages for Enterprise Linux) 是由 Fedora Special Interest Group 为企业 Linux 创建、维护和管理的一个高质量附加包集合,适用于但不仅限于 Red Hat Enterprise Linux (RHEL), CentOS, Scientific Linux (SL), Oracle Linux (OL)。
接下来进行erlang的安装:
[root@localhost opt]# yum -y install erlang socat
使用官方依赖包安装
这种方式适合和我一样只是为了安装RabbitMQ而去安装erlang的,根据官方解释,这是专门为rabbitmq制作的几乎零依赖的rpm软件包,只提供了足够运行rabbitmq的功能
github地址:https://github.com/rabbitmq/erlang-rpm
新建文件并编辑:
[root@localhost lib64]# vim /etc/yum.repos.d/rabbitmq-erlang.repo
填写内容如下(这部分内容可以在github上查找到)
# In /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
接下来进行安装:
[root@localhost lib64]# yum install erlang
关于erlang版本
使用erl -version查看
[root@localhost 22]# erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.7.2.8
容易就看懵了,使用erl -v命令再次查看
[root@localhost 22]# erl -v
Erlang/OTP 22 [erts-10.7.2.8] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]
Eshell V10.7.2.8 (abort with ^G)
1> erlang:system_info(otp_release).
"22"
2>
可以看到主版本为22,而要查看完整版本号,必须检查OTP_RELEASE文件,比较费劲
[root@localhost /]# which erl
/usr/bin/erl
[root@localhost /]# cd /usr/bin/
[root@localhost bin]# ls -l erl
lrwxrwxrwx. 1 root root 25 Mar 23 07:56 erl -> /usr/lib64/erlang/bin/erl
[root@localhost bin]# cd /usr/lib64/erlang/
[root@localhost erlang]# ls
bin erts-10.7.2.8 lib releases usr
[root@localhost erlang]# cd lib
[root@localhost lib]# ls
asn1-5.0.12 erts-10.7.2.8 mnesia-4.16.3.1 runtime_tools-1.14 syntax_tools-2.2.1
compiler-7.5.4.3 eunit-2.4.1 os_mon-2.5.1.1 sasl-3.4.2 tools-3.3.1
crypto-4.6.5.2 hipe-3.19.3 parsetools-2.1.8 snmp-5.5.0.4 xmerl-1.3.24
eldap-1.2.8 inets-7.1.3.3 public_key-1.7.2 ssl-9.6.2.3
erl_interface-3.13.2 kernel-6.5.2.1 reltool-0.8 stdlib-3.12.1
[root@localhost lib]# cd ..
[root@localhost erlang]# ls
bin erts-10.7.2.8 lib releases usr
[root@localhost erlang]# cd releases/
[root@localhost releases]# ls
22 RELEASES RELEASES.src start_erl.data
[root@localhost releases]# cd 22
[root@localhost 22]# ls
installed_application_versions OTP_VERSION start_clean.rel start_sasl.script
no_dot_erlang.boot start_all_example.rel start_clean.script start.script
no_dot_erlang.rel start.boot start_sasl.boot
no_dot_erlang.script start_clean.boot start_sasl.rel
[root@localhost 22]# cat OTP_VERSION
22.3.4.16
参考网址:https://cloud.tencent.com/developer/ask/77279
安装RabbitMQ
安装RabbitMQ有几种方式:rpm包安装,yum安装
具体安装方式在一开始的官方文档地址中都有,这边我用的是rpm包安装方式,所以先去下载rpm包
先放官方网址:https://www.rabbitmq.com/download.html
根据使用的系统选择对应的rpm包
因为在安装rabbitmq时需要依赖于一个socat组件,所以先安装socat:
[root@localhost opt]# yum install socat
接下来安装rabbitmq:
[root@localhost opt]# rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
Preparing... ################################# [100%]
Updating / installing...
1:rabbitmq-server-3.8.14-1.el7 ################################# [100%]
[root@localhost opt]# yum install rabbitmq-server -y
启动rabbitmq并查看状态:
[root@localhost opt]# systemctl start rabbitmq-server
[root@localhost opt]# systemctl status rabbitmq-server
RabbitMQ默认使用的端口:5672
设置开机自启:
[root@localhost opt]# systemctl enable rabbitmq-server
RabbitMQ管理界面
开启管理页面插件
[root@localhost opt]# rabbitmq-plugins enable rabbitmq_management
管理界面默认有一个来宾账号密码:guest/guest,但是只能通过本地访问,所以还需要创建一个账号并赋予权限:
[root@localhost opt]# rabbitmqctl add_user admin admin #admin admin分别为账号名密码
[root@localhost opt]# rabbitmqctl set_user_tags admin administrator
四种身份权限:
1: administrator 超级管理员
2: monitoring 监控者
3: policymaker 策略规则制定者
4: management 普通管理者
之后就可以通过rabbitmq主机上的15672端口实现访问管理界面,需要注意的是如果不是本地访问注意在防火墙上开启15672端口,防火墙开启端口:
[root@localhost opt]# firewall-cmd --zone=public --add-port=15672/tcp --permanent
success
[root@localhost opt]# firewall-cmd --reload
success
[root@localhost opt]# firewall-cmd --zone=public --query-port=15672/tcp
yes
管理界面:
关于rabbitmq一些参数配置可参考官方文档:https://www.rabbitmq.com/configure.html
Docker方式安装RabbitMQ
先上官方文档地址:https://registry.hub.docker.com/_/rabbitmq/
docker安装可以参考文章:https://blog.csdn.net/alexzch1/article/details/115133560
先启动docker:
[root@localhost ~]# systemctl start docker
先查找镜像(management版本才具有管理界面):
[root@localhost ~]# docker search rabbitmq:3-management
接下来拉取镜像:
[root@localhost ~]# docker pull rabbitmq:3-management
运行容器:
$ docker run -d --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:3-management
其中RABBITMQ_DEFAULT_USER为管理界面指定用户名,RABBITMQ_DEFAULT_PASS为其密码,如果启动时不添加这两个参数,默认会有一个guest/guest用户密码,但该用户密码只能用于本机登录,之后如果要修改还需要进入容器去修改,所以这边直接添加就ok
容器启动后就可以通过浏览器进入管理界面了
单机多实例搭建
rabbitmq搭建单机集群
惯例先上官方文档:https://www.rabbitmq.com/clustering.html#overview-hostname-requirements
搭建单机集群前首先停止所有rabbitmq服务
systemctl stop rabbitmq-server
启动第一个节点:
[root@localhost ~]# sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-1 rabbitmq-server start &
启动第二个节点(将5672端口改为5673,15672端口改为15673端口,因为是单机搭建集群,不修改就会端口冲突):
[root@localhost ~]# sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit-2 rabbitmq-server start &
启动第三个节点:
[root@localhost ~]# sudo RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit-3 rabbitmq-server start &
将第一个节点设为主节点:
[root@localhost ~]# sudo rabbitmqctl -n rabbit-1 stop_app #停止应用
Stopping rabbit application on node rabbit-1@localhost ...
[root@localhost ~]# sudo rabbitmqctl -n rabbit-1 reset #清除节点上的历史数据
Resetting node rabbit-1@localhost ...
[root@localhost ~]# sudo rabbitmqctl -n rabbit-1 start_app #启动应用
将第二个节点设为从节点:
[root@localhost ~]# sudo rabbitmqctl -n rabbit-2 stop_app
[root@localhost ~]# sudo rabbitmqctl -n rabbit-2 reset
[root@localhost ~]# sudo rabbitmqctl -n rabbit-2 join_cluster rabbit-1@localhost
[root@localhost ~]# sudo rabbitmqctl -n rabbit-2 start_app
再将第三个节点设为从节点:
[root@localhost ~]# sudo rabbitmqctl -n rabbit-3 stop_app
[root@localhost ~]# sudo rabbitmqctl -n rabbit-3 reset
[root@localhost ~]# sudo rabbitmqctl -n rabbit-3 join_cluster rabbit-1@localhost
[root@localhost ~]# sudo rabbitmqctl -n rabbit-3 start_app
注:如果是多机部署集群,需要保持.erlang.cookie的一致,需要将其中一个节点的cookie文件复制到其他节点的主机上,cookie文件位置/var/lib/rabbitmq/.erlang.cookie
web监控
为每个节点添加用户名密码,并授予权限
[root@localhost ~]# rabbitmqctl -n rabbit-1 add_user admin admin
[root@localhost ~]# rabbitmqctl -n rabbit-1 set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl -n rabbit-1 set_permissions -p / admin ".*" ".*" ".*"
最后进入主节点web页面监控: