默认openstack使用rabbitmq做信息队列,如果想要是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文介绍如何使用rabbitmq
做高可用
高可用方法
通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。 这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。
主机服务器信息
node1 192.168.56.60 rabbitmq01 node2 192.168.56.61 rabbitmq02 node3 192.168.56.62 rabbitmq03
系统环境为
rabbitmq版本为3.3.5
# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -r 3.10.0-327.el7.x86_64
主机解析配置
#cat /etc/hosts 192.168.56.60 rabbitmq01 192.168.56.61 rabbitmq02 192.168.56.62 rabbitmq03
NTP 三台都配置上 保持时间是一致的
一 软件安装
安装第三方库与rabbitmq 可以安装阿里云的epel #yum install rabbitmq-server
启动服务
systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service
二 配置
在node1里配置
(1)设置每个节点Cookie
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信
将node1的/var/lib/rabbitmq/.erlang.cookie复制到node2与node3
修改权限(所有节点)
chmod 400 /var/lib/rabbitmq/.erlang.cookie chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
在node2里面配置
[[email protected] rabbitmq]# rabbitmqctl stop_app Stopping node [email protected] ... ...done. [[email protected] rabbitmq]# rabbitmq join_cluster [email protected] [[email protected] rabbitmq]# rabbitmqctl start_app
在node3里面配置
[[email protected] rabbitmq]# rabbitmqctl stop_app Stopping node [email protected] ... ...done. [[email protected] rabbitmq]# rabbitmq join_cluster [email protected] [[email protected] rabbitmq]# rabbitmqctl start_app
此时 node2 与 node3 也会自动建立连接;如果要使用内存节点,则可以使用
node2 # rabbitmqctl join_cluster --ram [email protected] 加入集群
查看集群状态
# rabbitmqctl cluster_status Cluster status of node [email protected] ... [{nodes,[{disc,[[email protected],[email protected],[email protected]]}]}, {running_nodes,[[email protected],[email protected],[email protected]]}, {cluster_name,<<"[email protected]">>}, {partitions,[]}] ...done.
三 集群高可用配置
设计镜像队列策略
在任何一个节点配置
#rabbitmqctl set_policy ha-all ‘^(?!amq\.).*‘ ‘{"ha-mode": "all"}‘
四 远程添加账户登陆
如果要从远程登录怎么做呢?处于安全考虑,guest这个默认的用户只能通过http://localhost:15672来登录,其他的IP无法直接用这个guest帐号。这里我们可以通过配置文件来实现从远程登录管理界面,只要编辑/etc/rabbitmq/rabbitmq.config文件(没有就新增),添加以下配置就可以了。
[ {rabbit, [{tcp_listeners, [5672]}, {loopback_users, ["asdf"]}]} ].
现在添加了一个新授权用户asdf,可以远程使用这个用户名。记得要先用命令添加这个命令才行:
$ cd /usr/lib/rabbitmq/bin/ #用户名与密码 $ sudo rabbitmqctl add_user asdf 123456 #用户设置为administrator才能远程访问 $ sudo rabbitmqctl set_user_tags asdf administrator $ sudo rabbitmqctl set_permissions -p / asdf ".*" ".*" ".*"
时间: 2024-10-11 12:40:59