操作系统: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客户端使用。
备注:下文的安装步骤中,【】包围的部分需根据自己的环境来配置
使用rpm方式安装。
1 安装erlang
rpm -ivh /opt/erlang-22.2.1-1.el7.x86_64.rpm2 安装RabbitMQ
rpm -ivh /opt/rabbitmq-server-3.8.1-1.el7.noarch.rpm3 安装rabbitmq管理工具
rabbitmq-plugins enable rabbitmq_management4 启动
systemctl start rabbitmq-server5 开机自启
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}
列出所有用户,结果为用户名和用户TAGrabbitmqctl 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_stomp8 启动应用
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 stop2.2 备份host-n节点上的现有Cookie
cp /var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie.bak2.3 将host-1节点的Cookie文件覆盖到其他节点 scp命令,或finalshell工具。 2.4 并修改每个节点的cookie权限为400
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie chmod 400 /var/lib/rabbitmq/.erlang.cookie2.5 重启Erlang虚拟机及RabbitMQ服务
rabbitmq-server -detached3 构建集群 假设将多台host-n加入到host-1节点上的RabbitMQ服务: 3.1 关闭host-n上的RabbitMQ服务
rabbitmqctl stop_app3.2 在host-n上执行加入集群的命令
rabbitmqctl join_cluster rabbit@【集群中某个节点的主机名】3.3 重启host-n上的rabbitMQ服务
rabbitmqctl start_app4 在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