目的
1. 配置 openstack 可用的 rabbitmq
2. rabbitmq 用于存储 openstack 消息队列
3. rabbitmq 作为数据存储中心
4. openstack i 版中, rabbitmq 为 cinder, nova, neutron 组件进行数据存储,
5. openstack h 版使用的是 qpid 进程, 经常出现进程队列堵塞现象, 导致无法创建新虚拟机
安装
yum install rabbitmq-server
启动
service rabbitmq-server start
配置
安装 rabbitmq 后, 默认创建 guest/guest 用户与密码, 可以利用下面方法修改密码
# rabbitmqctl change_password guest openstack
Changing password for user "guest" ......done.
修改密码后, 为 cinder 添加虚拟主机
# rabbitmqctl add_vhost cinder
Creating vhost "cinder" ......done.
为其他服务创建虚拟用户
# rabbitmqctl add_user cinder openstack
Creating user "cinder" ......done.
# rabbitmqctl add_user nova openstack
Creating user "nova" ......done.
# rabbitmqctl add_user neutron openstack
Creating user "neutron" ......done.
为上述用户添加对资源的读写权限
# rabbitmqctl set_permissions cinder ".*" ".*" ".*"
# rabbitmqctl set_permissions nova ".*" ".*" ".*"
# rabbitmqctl set_permissions neutron ".*" ".*" ".*"
校验
可用下面命令进行信息校验
# rabbitmqctl report
集群创建方法
第一步, 服务器启动
- 目标为两台 rabbitmq 服务器创建集群
- 先各自启动服务器 ( systemctl start rabbitmq-server)
第二部, 同步 cookie
- 注意 /var/lib/rabbitmq/.erlang.cookie 文件属性
- 两个服务器 cookie 文件必须内容一致
-r-------- 1 rabbitmq rabbitmq 20 Feb 7 00:00 /var/lib/rabbitmq/.erlang.cookie
利用 scp 复制到另外一台服务器则可确保内容一致
第三部。 获取第一台服务器节点名称信息
只需要在第一台上执行为了获取信息
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@ns-yun-020037' <--- 获取这里 rabbit@ns-yun-020037 字符
[{nodes,[{disc,['rabbit@ns-yun-020037']}]},
{running_nodes,['rabbit@ns-yun-020037']},
{cluster_name,<<"rabbit@ns-yun-020037.vclound.com">>},
{partitions,[]},
{alarms,[{'rabbit@ns-yun-020037',[]}]}]
第四部, 加入集群
再第二台上执行 (确保 当前服务器服务已经启动, cookie 文件已经同步)
执行下面命令加入第一台服务器
停止应用
# rabbitmqctl stop_app
Stopping rabbit application on node 'rabbit@ns-yun-020038'
加入集群 (输入第三部获取的服务器节点信息)
# rabbitmqctl join_cluster 'rabbit@ns-yun-020037'
Clustering node 'rabbit@ns-yun-020038' with 'rabbit@ns-yun-020037'
启动应用
# rabbitmqctl start_app
Starting node 'rabbit@ns-yun-020038'
验证集群状态
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@ns-yun-020038'
[{nodes,[{disc,['rabbit@ns-yun-020037','rabbit@ns-yun-020038']}]},
{running_nodes,['rabbit@ns-yun-020037','rabbit@ns-yun-020038']},
{cluster_name,<<"rabbit@ns-yun-020037.vclound.com">>},
{partitions,[]},
{alarms,[{'rabbit@ns-yun-020037',[]},{'rabbit@ns-yun-020038',[]}]}]
启用高可用队列
# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0"
启用 WEB 管理器 (需要在每个 rabbitmq 服务器上执行)
# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@ns-yun-020037... started 6 plugins.
检查 WEB 端口 (需要在每个 rabbitmq 服务器上执行)
# netstat -ntl | grep 15672
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN
web 登录 ( 默认用户/密码 guest / guest ) 默认只允许本机登录
修改 guest 用户名密码定义方法
修改密码
# rabbitmqctl change_password guest user_vip
Changing password for user "guest"
需要修改 /etc/rabbitmq/rabbitmq.conf 或 /etc/rabbitmq/advanced.config
{default_user, [{login, "guest"},
{passcode, "guest"}]}, <- 可以修改密码 重启 rabbitmq 即可
添加 admin 账号
# rabbitmqctl add_user admin user_vip
Creating user "admin"
授权 admin 为管理员
# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator]
授权
# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "/"