RabbitMQ集群搭建

    技术2024-07-18  71

    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
    Processed: 0.013, SQL: 9