部署RabbitMQ
手动部署
本操作以安装最新版RabbitMQ为例进行说明,更多版本及安装方式,请参见Installing RabbitMQ。
前提条件
手动部署RabbitMQ时,请确保已创建ECS实例,并满足以下条件:
实例已分配公网IP地址或绑定弹性公网IP(EIP)。具体操作,请参见弹性公网IP。
操作系统:Ubuntu 20.04、Ubuntu 22.04、Debian 11.0~Debian 12.5。
更多支持的系统及安装方式,请参见Installing RabbitMQ。
安全组规则:安全组规则入方向需放行22、80、15672端口。
说明 如果需要通过MQ工具连接RabbitMQ服务器,还需放行5672端口。
操作步骤
远程连接需要部署RabbitMQ的实例。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
安装RabbitMQ。
安装RabbitMQ基本依赖。
sudo apt-get install curl gnupg apt-transport-https -y
下载RabbitMQ和Erlang的GPG公钥,并将公钥信息添加到系统的信任密钥环中。
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
将RabbitMQ和Erlang的官方APT仓库添加到/etc/apt/sources.list.d/rabbitmq.list文件中。
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main EOF
更新本地的包索引。
安装Erlang相关的各种包。
sudo apt-get install -y erlang-base \ erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \ erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \ erlang-runtime-tools erlang-snmp erlang-ssl \ erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
安装RabbitMQ。
sudo apt-get install rabbitmq-server -y --fix-missing
配置RabbitMQ。
设置RabbitMQ开机自启动并启动RabbitMQ。
sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server
为保证数据安全,建议您运行以下命令,删除默认用户。
RabbitMQ默认的账号用户名和密码都是guest。
sudo rabbitmqctl delete_user guest
创建RabbitMQ管理员用户。
创建一个新用户。
sudo rabbitmqctl add_user <用户名> <密码>
其中,<用户名>和<密码>为您自定义的信息。
将创建的新用户设置为管理员。
sudo rabbitmqctl set_user_tags <用户名> administrator
赋予新创建的用户所有权限。
sudo rabbitmqctl set_permissions -p / <用户名> ".*" ".*" ".*"
启动RabbitMQ的Web管理界面。
sudo rabbitmq-plugins enable rabbitmq_management
快速部署
使用云市场镜像快速部署
通过云市场镜像快速部署,省去了安装配置RabbitMQ的过程,大大节省了部署时间。所使用的云市场镜像是否收费,以云市场镜像界面为准。
单击开源消息队列中间件 RabbitMQ进入镜像详情页。
您可以在镜像详情页获取镜像信息以及使用指南。
单击立即购买。
在自定义购买页,根据页面提示,完成配置项并购买ECS实例。
配置时请注意以下参数,其他配置可以按需选择。更多参数说明,请参见自定义购买实例。
镜像:镜像区域已设置为您购买的镜像。
公网 IP:选中分配公网 IPv4 地址。
安全组:安全组规则应放行22、80、15672。
获取RabbitMQ的用户名和登录密码。
远程连接RabbitMQ服务器。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
执行以下命令,获取RabbitMQ的用户名和登录密码。
sudo cat /credentials/password.txt
回显信息类似如下所示。
rabbitmq_user:RabbitMQ用户名
rabbitmq_password:RabbitMQ登录密码
rabbitmq_gui_port:RabbitMQ Web服务器端口
rabbitmq_mq_port:RabbitMQ远程连接端口
rabbitmq_er_port:RabbitMQ服务器用于Erlang进程间通信的内部端口
rabbitmq_mqtt_port:RabbitMQ服务器对外提供MQTT协议服务的监听端口

使用Terraform快速部署
Terraform是一款IaC工具(Infrastructure as Code),能够帮助开发人员和运维团队自动化基础设施的创建、部署和管理。您可以通过编写简洁的代码来定义和配置云端基础设施,而不必手动操作和配置。
操作步骤
点击一键运行进入Terraform Explorer,自动加载如下的Terraform代码。
单击查看完整Terraform代码
provider "alicloud" { region = var.region } variable "region" { default = "cn-beijing" } variable "common_name" { description = "Common name for resources." type = string default = "deploy_rabbitmq_by_tf" } variable "system_disk_category" { default = "cloud_essd" description = "The category of the system disk." } variable "instance_password" { description = "Server login password, length 8-30, must contain three (Capital letters, lowercase letters, numbers, `~!@#$%^&*_-+=|{}[]:;'<>?,./ Special symbol in)" type = string default = "Test@123456" } variable "image_id" { description = "Image of instance. Supported only on Ubuntu." type = string default = "ubuntu_22_04_x64_20G_alibase_20241224.vhd" } variable "instance_type" { description = "Instance type." type = string default = "ecs.e-c1m2.large" } variable "access_ip" { description = "The IP address you used to access the ECS." type = string default = "0.0.0.0/0" } variable "rabbitmq_user_name" { description = "Create a new user for RabbitMQ." type = string default = "rabbitmq@new_user" } variable "rabbitmq_user_password" { description = "Password for a new RabbitMQ user." type = string default = "rabbitmq@pw12345" } # 查询满足条件的可用区 data "alicloud_zones" "default" { available_disk_category = var.system_disk_category available_resource_creation = "VSwitch" available_instance_type = var.instance_type } resource "alicloud_vpc" "rabbitmq_vpc" { vpc_name = "${var.common_name}-vpc" cidr_block = "192.168.0.0/16" } resource "alicloud_vswitch" "rabbitmq_vsw" { vpc_id = alicloud_vpc.rabbitmq_vpc.id vswitch_name = "${var.common_name}-vsw" cidr_block = "192.168.0.0/24" zone_id = data.alicloud_zones.default.zones.0.id } resource "alicloud_security_group" "rabbitmq_sg" { security_group_name = "${var.common_name}-sg" vpc_id = alicloud_vpc.rabbitmq_vpc.id } resource "alicloud_security_group_rule" "allow_tcp_22" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "22/22" priority = 1 security_group_id = alicloud_security_group.rabbitmq_sg.id cidr_ip = var.access_ip } resource "alicloud_security_group_rule" "allow_tcp_80" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "80/80" priority = 1 security_group_id = alicloud_security_group.rabbitmq_sg.id cidr_ip = var.access_ip } resource "alicloud_security_group_rule" "allow_tcp_15672" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "15672/15672" priority = 1 security_group_id = alicloud_security_group.rabbitmq_sg.id cidr_ip = var.access_ip } resource "alicloud_security_group_rule" "allow_icmp_all" { type = "ingress" ip_protocol = "icmp" nic_type = "intranet" policy = "accept" port_range = "-1/-1" priority = 1 security_group_id = alicloud_security_group.rabbitmq_sg.id cidr_ip = "0.0.0.0/0" } resource "alicloud_instance" "rabbitmq_ecs" { availability_zone = data.alicloud_zones.default.zones.0.id security_groups = [alicloud_security_group.rabbitmq_sg.id] instance_type = var.instance_type system_disk_category = var.system_disk_category image_id = var.image_id instance_name = "${var.common_name}-ecs" vswitch_id = alicloud_vswitch.rabbitmq_vsw.id internet_max_bandwidth_out = 10 password = var.instance_password } locals { command_content = <<SHELL #!/bin/sh sudo apt-get install curl gnupg apt-transport-https -y ## Team RabbitMQ's main signing key curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null ## Community mirror of Cloudsmith: modern Erlang repository curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null ## Community mirror of Cloudsmith: RabbitMQ repository curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null ## Add apt repositories maintained by Team RabbitMQ sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF ## Provides modern Erlang/OTP releases deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main # another mirror for redundancy deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main ## Provides RabbitMQ deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main # another mirror for redundancy deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main EOF ## Update package indices sudo apt-get update -y ## Install Erlang packages sudo apt-get install -y erlang-base \ erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \ erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \ erlang-runtime-tools erlang-snmp erlang-ssl \ erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl ## Install rabbitmq-server and its dependencies sudo apt-get install rabbitmq-server -y --fix-missing sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server sudo rabbitmqctl delete_user guest sudo rabbitmqctl add_user ${var.rabbitmq_user_name} ${var.rabbitmq_user_password} sudo rabbitmqctl set_user_tags ${var.rabbitmq_user_name} administrator sudo rabbitmqctl set_permissions -p / ${var.rabbitmq_user_name} ".*" ".*" ".*" sudo rabbitmq-plugins enable rabbitmq_management SHELL } resource "alicloud_ecs_command" "deploy_rabbitmq" { name = "DeploydRabbitMQ" type = "RunShellScript" command_content = base64encode(local.command_content) timeout = 3600 working_dir = "/root" } resource "alicloud_ecs_invocation" "invocation" { instance_id = [alicloud_instance.rabbitmq_ecs.id] command_id = alicloud_ecs_command.deploy_rabbitmq.id timeouts { create = "5m" } } output "rabbitmq-login_url" { value = format("http://%s:15672", alicloud_instance.rabbitmq_ecs.public_ip) }
根据实际情况修改参数,默认情况下,将会在cn-beijing创建1个VPC、1个交换机、1个安全组、1台按量付费ECS实例。关于ECS实例的计费说明,请参见计费概述。
单击发起调试,预览待创建资源详细信息,若资源信息无误,单击预览并执行开始创建资源。当任务的执行详情状态为执行成功时,说明已部署完成。
登录RabbitMQ管理界面
在本地浏览器中,输入http://<Linux实例的公网IP>:15672。
显示如下页面,说明RabbitMQ安装成功。
输入已创建的RabbitMQ管理员用户名和密码后,单击Login,进入RabbitMQ管理界面。
RabbitMQ管理界面展示信息如下所示:
开源RabbitMQ迁移上云
如果您希望解决RabbitMQ集群各种稳定性痛点(例如消息堆积、脑裂等问题)、并实现高并发、分布式、灵活扩缩容时,您可以将开源RabbitMQ集群迁移至云消息队列 RabbitMQ 版,具体操作,请参见开源RabbitMQ迁移上云。