RabbitMQ集群搭建

RabbitMQ集群搭建

操作系统:CentOS7
Erlang版本:22.2.1
RabbitMQ版本:3.8.1

端口:
  • 4369:epmd(Erlang Port Mapper Daemon), 一个供RabbitMQ节点和CLI工具使用的名字发现守护程序,在所有RabbitMQ节点上启动,起到name server的作用。
  • 5672, 5671:AMQP协议使用。
  • 25672:AMQP端口+20000,内部使用。
  • 15672:HTTP API和管理工具使用的端口。
  • 61613, 61614:STOMP协议使用。
  • 15674:运行于WebSocket之上的STOMP客户端使用。

备注:下文的安装步骤中,【】包围的部分需根据自己的环境来配置

RabbitMQ安装

使用rpm方式安装。

1 安装erlang

rpm -ivh /opt/erlang-22.2.1-1.el7.x86_64.rpm

2 安装RabbitMQ

rpm -ivh /opt/rabbitmq-server-3.8.1-1.el7.noarch.rpm

3 安装rabbitmq管理工具

rabbitmq-plugins enable rabbitmq_management

4 启动

systemctl start rabbitmq-server

5 开机自启

systemctl enable rabbitmq-server

注意:rabbitMQ使用rabbit@机器名来建立数据存放目录和pid文件,修改机器名后重启,会导致启动失败
6 用户管理
  本步骤完成后,可以通过http://【IP】:15672,访问管理界面。
6.1 新增管理员用户

rabbitmqctl add_user 【用户名】 【用户密码】

其他相关命令:

  • 修改用户密码

rabbitmqctl change_password {username} {newpassword}

  • 验证用户密码

rabbitmqctl authenticate_user {username} {password}

  • 删除用户

rabbitmqctl delete_user {username}

  • 列出所有用户,结果为用户名和用户TAG

rabbitmqctl list_users

6.2 设置用户标签(tag)

rabbitmqctl set_user_tags 【用户名】 【tag...】

tag有如下几种选项:

  • none
    无任何角色,新建的用户默认值
  • management
    可以访问WEB管理界面
  • policymaker
    包含management的所有权限,并且可以管理策略(Policy)和参数(Parameter)
  • monitoring
    包含management的所有权限,并且可以看到所有连接、信道和节点信息。
  • administrator
    包含monitoring的所有权限,并且可管理虚拟主机、用户、权限、策略、参数等,这是最高权限。

6.3 设置权限

rabbitmqctl set_permissions -p "/" 【用户名】 ".*" ".*" ".*"

命令格式:

rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}

参数说明:

  • conf
    正则表达式,用于匹配用户在哪些资源上拥有可配置权限。
  • write
    正则表达式,用于匹配用户在哪些资源上拥有可写入权限。
  • read
    正则表达式,用于匹配用户在哪些资源上拥有可读取权限。

7 增加web_stomp插件(可选)

/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.1/sbin/rabbitmq-plugins enable rabbitmq_web_stomp

8 启动应用

rabbitmqctl start_app

集群搭建

  当不使用镜像队列时,RabbitMQ集群可以在各个节点冗余存储元数据,但不会冗余存储消息,因此当一个节点宕机时,该节点上未被消费的消息将全部丢失,即整个集群无法做到高可用。
1 配置域名解析
  RabbitMQ节点使用短域名或全限定域名(FQDNs)相互寻址。因此,所有集群节点必须具备解析其它集群成员的主机名的能力。
打开hosts文件

vi /etc/hosts

增加

【IP1】 【host-1】
【IP2】 【host-2】
【IP3】 【host-3】

2 同步Erlang Cookie
  要保证集群中的不同节点互相通信必须共享相同的Erlang Cookie。Erlang节点会通过交换Erlang Cookie以获得认证。Cookie文件权限要保持一致(400)。
  假设将host-1节点的Cookie同步到多台host-n:
2.1 关闭host-n节点上的RabbitMQ服务

rabbitmqctl stop

2.2 备份host-n节点上的现有Cookie

cp /var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie.bak

2.3 将host-1节点的Cookie文件覆盖到其他节点
scp命令,或finalshell工具。
2.4 并修改每个节点的cookie权限为400

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie

2.5 重启Erlang虚拟机及RabbitMQ服务

rabbitmq-server -detached

3 构建集群
假设将多台host-n加入到host-1节点上的RabbitMQ服务:
3.1 关闭host-n上的RabbitMQ服务

rabbitmqctl stop_app

3.2 在host-n上执行加入集群的命令

rabbitmqctl join_cluster rabbit@【集群中某个节点的主机名】

3.3 重启host-n上的rabbitMQ服务

rabbitmqctl start_app

4 在host-1(或任一节点)上设置策略,实现镜像队列

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

命令格式:

rabbitmqctl set_policy [-p vhost] [–priority priority] [–apply- to
apply- to] {name} {pattern} {definition}

  这一行命令是在默认vhost(/)上创建一个策略:策略名称为ha-all;策略表达式为"^",表示所有匹配所有队列名称;ha-mode,指明镜像队列的模式,有效值为 all、exactly、 nodes(默认为all,即在集群中所有的节点上进行镜像;exactly 表示在指定个数的节点上进行镜像,节点个数由 ha-params 指定; nodes 表示在指定节点上进行镜像,节点名称通过 ha-params 指定,节点的名称通常类似于 rabbit@hostname ,可以通过rabbitmqctl cluster_status 命令查看到)。

其他相关命令:

  • 查看策略

rabbitmqctl list_policies -p /

  • 清除策略

rabbitmqctl clear_policy -p / ha-all

重要文件存储位置

  • 日志
/var/log/rabbitmq/rabbit@hostname.log
  • 配置文件
/etc/rabbitmq/rabbitmq.config:rabbitmq
  • 消息持久化文件
/var/lib/rabbitmq/mnesia/rabbit@hostname
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值