RabbitMQ02-安装RabbitMQ

  • RabbitMQ官网:https://www.rabbitmq.com/
  • Github地址:https://github.com/rabbitmq/rabbitmq-server
  • RabbitMQ是由Erlang语言编写的,因此,在安装RabbitMQ之前需要安装Erlang 。建议采用较新版的Erlang ,这样可以获得较多更新和改进

1、二进制安装RabbitMQ(单机单节点)

1.1、部署环境

  • 软件版本
    • Erlang:23.3.4.15
    • RabbitMQ:3.9.19
  • 系统环境
    • 10.1.1.14:CentOSLinuxrelease7.7.1908(Core)

1.2、安装Erlang

  • 注意,Erlang和Rabbit的版本兼容问题。(兼容矩阵:https://www.rabbitmq.com/which-erlang.html)
  • 建议使用rpm安装Erlang,容易简单(下载地址:https://packagecloud.io/rabbitmq/erlang)。

1、下载Erlang

下载地址:https://www.erlang.org/downloads
安装包:https://github.com/erlang/otp/releases/download/OTP-23.3.4.15/otp_src_23.3.4.15.tar.gz

2、安装依赖

  • 不安装这些依赖就会在执行./configure时,有对应的报错信息。
//报错信息:configure: error: no acceptable C compiler found in $PATH
]# yum install gcc-c++ -y
//报错信息:configure: error: No curses library functions found
]# yum install ncurses-devel -y

//报错信息: No usable OpenSSL found,ODBC library - link check failed
]# yum install openssl-devel unixODBC-devel -y

//报错信息:wx will NOT be usable wxWidgets not found
]# yum install epel-release -y
]# yum install wxWidgets-devel -y
]# cd /usr/bin; ln -s wx-config-3.0 wx-config
  • 报错:不安装上面的依赖,在执行./configure时会有以下报错。
*********************************************************************
**********************  APPLICATIONS DISABLED  **********************
*********************************************************************

crypto         : No usable OpenSSL found
jinterface     : No Java compiler found
odbc           : ODBC library - link check failed
ssh            : No usable OpenSSL found
ssl            : No usable OpenSSL found

*********************************************************************
*********************************************************************
**********************  APPLICATIONS INFORMATION  *******************
*********************************************************************

wx             : No OpenGL headers found, wx will NOT be usable
No GLU headers (glu.h) found, wx will NOT be usable
wxWidgets not found, wx will NOT be usable

*********************************************************************
*********************************************************************
**********************  DOCUMENTATION INFORMATION  ******************
*********************************************************************

documentation  : 
                 fop is missing.
                 Using fakefop to generate placeholder PDF files.

*********************************************************************

3、安装Erlang

]# mkdir -p /apps/erlang
]# tar zxvf otp_src_23.3.4.15.tar.gz

]# cd otp_src_23.3.4.15
]# ./configure --prefix=/apps/erlang
]# make
]# make install
  • ./configur时会有报错信息,这个是可以忽略的。
    • 使用gcc编译器进行编译,就不要再安装JDK了。

4、配置环境变量

//修改/etc/profile文件
]# cat >> /etc/profile << EOF
export ERLANG_HOME=/apps/erlang
export PATH=\$PATH:\$ERLANG_HOME/bin
EOF

//让配置文件生效
]# source /etc/profile

5、验证Erlang是否安装成功

]# erl
Erlang/OTP 23 [erts-11.2.2.14] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1]

Eshell V11.2.2.14  (abort with ^G)
1> 

1.3、安装RabbitMQ

1、下载RabbitMQ

下载地址:https://www.rabbitmq.com/download.html
安装包:https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.19/rabbitmq-server-generic-unix-3.9.19.tar.xz

2、安装RabbitMQ

]# xz -d rabbitmq-server-generic-unix-3.9.19.tar.xz
]# tar vfx rabbitmq-server-generic-unix-3.9.19.tar -C /apps/

]# cd /apps/
]# ln -s rabbitmq_server-3.9.19 rabbitmq

3、配置环境变量

//修改/etc/profile文件
]# cat >> /etc/profile << EOF
export RABBITMQ_HOME=/apps/rabbitmq
export PATH=\$PATH:\$RABBITMQ_HOME/sbin
EOF

//让配置文件生效
]# source /etc/profile

4、启动RabbitMQ

  • 启动RabbitMQ后,会监听5672和25672端口。
]# rabbitmq-server              #前台启动mq服务
]# rabbitmq-server -detached    #后台启动mq服务

]# rabbitmqctl stop             #停止mq服务

]# rabbitmqctl status           #查看rabbitmq服务状态
]# rabbitmqctl cluster_status   #查看集群状态
  • 启动时的报错,这是因为主机名使用了数字(纯数字),需改主机名即可(这里改成了hh14)。

5、开启管理页面

  • 开启管理页面后会加一个监听的端口15672。
]# rabbitmq-plugins list                           #查看插件打开情况
]# rabbitmq-plugins enable rabbitmq_management     #启动管理页面
]# rabbitmq-plugins disable rabbitmq_management    #关闭管理页面
  • 添加一个用户root,并删除默认用户guest
    • 默认情况下,访问RabbitMQ服务的用户名和密码都是"guest",这个账户有限制,默认只能通过本地网络(如localhost)访问,远程网络访问受限,所以在实现生产和消费消息之前,需要另外添加一个用户,并设置相应的访问权限。
//查看所有用户
]# rabbitmqctl list_users

//添加一个用户
]# rabbitmqctl add_user root root
//设置用户角色
]# rabbitmqctl set_user_tags root administrator

//删除用户(安全起见,删除默认用户)
]# rabbitmqctl delete_user guest
  • 使用管理页面访问RabbitMQ(http://10.1.1.14:15672/    root/root)

2、二进制安装RabbitMQ集群(多机多节点)

  • RabbitMQ集群允许消费者和生产者在RabbitMQ一个节点崩惯的情况下继续运行,它也可以通过添加更多的节点来水平扩展消息通信的吞吐量。
  • RabbitMQ集群不能保证消息的不会丢失,可以通过特殊的配置比如镜像队列可以解决这个问题。
  • RabbitMQ集群对延迟非常敏感,应当只在本地局域网内使用。在广域网中不应该使用RabbirMQ集群,而应该使用Federation或者Shovel来代替。

2.1、部署环境

  • 软件版本
    • Erlang:23.3.4.15
    • RabbitMQ:3.9.19
  • 系统环境
    • 10.1.1.12:CentOSLinuxrelease7.7.1908(Core)
    • 10.1.1.13:CentOSLinuxrelease7.7.1908(Core)
    • 10.1.1.14:CentOSLinuxrelease7.7.1908(Core)

2.2、安装Erlang和RabbitMQ

  • 在配置集群之前,需要在三台机器上根据单机单节点的安装方法分别正确地安装Erlang和RabbitMQ。
  • 注意,要在三台机器上都启用rabbitmq_management插件
    • 否则,在web管理页面看不到没有开启rabbitmq_management插件的节点的信息。

2.3、配置集群

  • 假设三台机器均己正确地安装了RabbitMQ,且主机名分别为hh12、hh13和hh14。

2.3.1、配置三台机器的hosts文件

  • 配置各个节点的hosts文件,让各个节点都能互相识别对方的存在。
]# cat >> /etc/hosts << EOF
10.1.1.12 hh12
10.1.1.13 hh13
10.1.1.14 hh14
EOF

2.3.2、编辑RabbitMQ的cookie文件

  • 编辑RabbitMQ的cookie文件,以确保各个节点的cookie文件使用的是同一个值。
    • cookie相当于密钥令牌,集群中的RabbitMQ节点需要通过交换密钥令牌以获得相互认证。如果节点的密钥令牌不一致,在节点加入集群时会报错。
    • cookie文件默认路径为/var/lib/rabbitmq/.erlang.cookie(rpm安装RabbitMQ)或者$HOME/.erlang.cookie(二进制安装RabbitMQ)。(启动RabbitMQ后才会有.erlang.cookie文件
  • 可以读取hh14节点的cookie值,然后将其复制到hh12和hh13节点中。
//启动hh14上的RabbitMQ服务
]# rabbitmq-server -detached
//将hh14的.erlang.cookie文件复制到hh12和hh13上
]# scp .erlang.cookie root@10.1.1.12:/root

//权限必须是400,否者启动rabbitmq时会报错
]# ls -l /root/.erlang.cookie
-r-------- 1 root root 20 7月   6 00:00 /root/.erlang.cookie

2.3.3、配置集群

  • 配置集群有三种方式:
    • 通过rabbitmqctl工具配置
    • 通过rabbitmq.conf配置文件配置
    • 通过rabbitmq-autoclusterl插件配置。
  • 这里使用rabbitmqctl工具配置集群,这种方式是最常用的方式。其余两种方式在实际中很少使用,所以就不做介绍了。

1、启动hh12和hh13节点上的RabbitMQ服务

//启动hh12、hh13这3个节点的RabbitMQ服务。
]# rabbitmq-server -detached

//查看各个节点的状态
]# rabbitmqctl cluster_status

2、组成集群

  • 将3个节点组成一个集群,需要以一个节点为基准,将另外两个节点加入基准节点,从而组成集群。(这些节点是平等的,即可以以任何一个节点为基准节点)
  • 这里以hh14为基准,将hh12和hh13加入到hh14中。(在hh14执行以下命令)
//将rabbit@hh12加入rabbit@hh14
]# rabbitmqctl --node rabbit@hh12 stop_app
]# rabbitmqctl --node rabbit@hh12 reset
]# rabbitmqctl --node rabbit@hh12 join_cluster rabbit@hh14
]# rabbitmqctl --node rabbit@hh12 start_app

//将rabbit@hh13加入rabbit@hh14
]# rabbitmqctl --node rabbit@hh13 stop_app
]# rabbitmqctl --node rabbit@hh13 reset
]# rabbitmqctl --node rabbit@hh13 join_cluster rabbit@hh14
]# rabbitmqctl --node rabbit@hh13 start_app
  • 报错:在执行rabbitmqctl join_cluster rabbit@hh14时,有报错信息。
    • 通过网上了解,说这是之前加入集群失败造成的(虽然之前从没有加入过集群),可以忽略这些报错。(是否真正可以忽略这些报错,有待验证???
11:25:43.119 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/apps/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@hh12-feature_flags`:
11:25:43.119 [warning] Feature flags:   - list of previously disabled feature flags now marked as such: [:maintenance_mode_status]
11:25:43.419 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/apps/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@hh12-feature_flags`:
11:25:43.419 [warning] Feature flags:   - list of previously enabled feature flags now marked as such: [:maintenance_mode_status]
11:25:43.444 [error] Failed to create a tracked connection table for node :rabbit@hh12: {:node_not_running, :rabbit@hh12}
11:25:43.445 [error] Failed to create a per-vhost tracked connection table for node :rabbit@hh12: {:node_not_running, :rabbit@hh12}
11:25:43.445 [error] Failed to create a per-user tracked connection table for node :rabbit@hh12: {:node_not_running, :rabbit@hh12}

3、查看集群状态

//在任意一个节点中都可以查看集群状态,并且输出的内容是一样的
]# rabbitmqctl cluster_status
  • hh14节点输出的集群状态
Cluster status of node rabbit@hh14 ...
Basics

Cluster name: rabbit@hh14

Disk Nodes

rabbit@hh12
rabbit@hh13
rabbit@hh14

Running Nodes

rabbit@hh12
rabbit@hh13
rabbit@hh14

Versions

rabbit@hh12: RabbitMQ 3.9.19 on Erlang 23.3.4.15
rabbit@hh13: RabbitMQ 3.9.19 on Erlang 23.3.4.15
rabbit@hh14: RabbitMQ 3.9.19 on Erlang 23.3.4.15

Maintenance status

Node: rabbit@hh12, status: not under maintenance
Node: rabbit@hh13, status: not under maintenance
Node: rabbit@hh14, status: not under maintenance

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@hh12, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@hh12, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@hh13, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@hh13, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@hh14, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@hh14, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

Feature flags

Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
View Code

3、二进制安装RabbitMQ集群(单机多节点)

  • 在单台物理机器上搭建一个多RabbitMQ服务节点的集群。
    • 在一台机器上部署多个RabbitMQ服务节点,需要确保每个节点都有独立的名称、数据存储位置、端口号(包括插件的端口号)等。

3.1、部署环境

  • 软件版本
    • Erlang:23.3.4.15
    • RabbitMQ:3.9.19
  • 系统环境
    • 10.1.1.14:CentOSLinuxrelease7.7.1908(Core)

3.2、安装Erlang和RabbitMQ

  • 在配置集群之前,需要在机器上根据单机单节点的安装方法正确地安装Erlang和RabbitMQ。

3.3、配置集群

  • 在主机hh14上创建一个由rabbitl@hh14、rabbit2@hh14和rabbit3@hh14这3个节点组成RabbitMQ集群。
    • 首先需要确保机器上己经安装了Erlang和RabbitMQ。
    • 其次,为每个RabbitMQ服务节点设置不同的端口号和节点名称来启动相应的服务。

1、启动3个RabbitMQ节点

]# RABBITMQ_NODE_PORT=5671 RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
  • 报错:在启动rabbit1@hh14节点之后,继续启动rabbit2@hh14和rabbit3@hh14节点可能会遇到启动失败的情况。这种情况大多数是由于配置发生了冲突造成的,需要进一步确认是否开启了某些功能,比如RabbitMQ Management插件。
    • 如果开启了RabbitMQ Management插件,就需要为每个服务节点配置一个对应插件端口号。
//开启了RabbitMQ Management插件(注意,逗号的前后不要有空格)
RABBITMQ_NODE_PORT=5671 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15671}]" rabbitmq-server -detached
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" rabbitmq-server -detached
RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" rabbitmq-server -detached

2、组成集群

  • 以rabbit1为基准,将rabbit2和rabbit3加入到rabbit1中。
//将rabbit2@hh14加入rabbit1@hh14
]# rabbitmqctl --node rabbit2@hh14 stop_app
]# rabbitmqctl --node rabbit2@hh14 reset
]# rabbitmqctl --node rabbit2@hh14 join_cluster rabbit1@hh14
]# rabbitmqctl --node rabbit2@hh14 start_app

//将rabbit3@hh14加入rabbit1@hh14
]# rabbitmqctl --node rabbit3@hh14 stop_app
]# rabbitmqctl --node rabbit3@hh14 reset
]# rabbitmqctl --node rabbit3@hh14 join_cluster rabbit1@hh14
]# rabbitmqctl --node rabbit3@hh14 start_app
  • 报错:在执行rabbitmqctl join_cluster时,有报错信息。
    • 通过网上了解,说这是之前加入集群失败造成的(虽然之前从没有加入过集群),可以忽略这些报错。(是否真正可以忽略这些报错,有待验证???)
20:32:15.712 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/apps/rabbitmq/var/lib/rabbitmq/mnesia/rabbit3@hh14-feature_flags`:
20:32:15.712 [warning] Feature flags:   - list of previously disabled feature flags now marked as such: [:maintenance_mode_status]
20:32:16.082 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/apps/rabbitmq/var/lib/rabbitmq/mnesia/rabbit3@hh14-feature_flags`:
20:32:16.083 [warning] Feature flags:   - list of previously enabled feature flags now marked as such: [:maintenance_mode_status]
20:32:16.099 [error] Failed to create a tracked connection table for node :rabbit3@hh14: {:node_not_running, :rabbit3@hh14}
20:32:16.100 [error] Failed to create a per-vhost tracked connection table for node :rabbit3@hh14: {:node_not_running, :rabbit3@hh14}
20:32:16.100 [error] Failed to create a per-user tracked connection table for node :rabbit3@hh14: {:node_not_running, :rabbit3@hh14}

3、查看集群状态

//必须有-n参数,否者会报错
]# rabbitmqctl --node rabbit1@hh14 cluster_status
]# rabbitmqctl --node rabbit2@hh14 cluster_status
]# rabbitmqctl --node rabbit3@hh14 cluster_status
posted @ 2022-06-25 22:05  麦恒  阅读(238)  评论(0编辑  收藏  举报