安装
安装环境:
系统:CentOS7.3
yum源:这里使用openstack queens的源
# yum install centos-release-openstack-queens
安装rabbitmq
# yum install rabbitmq-server -y
启动服务
# systemctl enable rabbitmq-server.service
# systemctl start rabbitmq-server.service
配置用户和权限
# rabbitmqctl add_user test test
Creating user "test" ...
# rabbitmqctl set_permissions test ".*" ".*" ".*"
Setting permissions for user "test" in vhost "/" ...
服务配置文件示例
# cat /etc/rabbitmq/rabbitmq.config
[
{rabbit,
[
{tcp_listeners, [{"192.168.1.47", 5672}]}, #rabbitmq监听ip和port
{cluster_partition_handling, pause_minority},
{loopback_users, []}, #loopback_user列表
{vm_memory_high_watermark, 0.4} #可以使用的内存百分比,默认为0.4,即40%物理内存
]},
{log_levels,
[
{connection, info} #log level
]},
{rabbitmq_management,
[
{listener, [{port, 15672}, #管理页面监听的port
{ip, "192.168.1.47"}, #管理页面监听的ip
{ssl, false}]} #是否使用ssl
]}
].
开启web
启用插件
# rabbitmq-plugins enable rabbitmq_management
The folowing plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
重启rabbitmq-server
# systemctl restart rabbitmq-server
使用web链接http://$ip:15672/ 即可访问。
集群配置
前提条件:
1.两台或以上安装好rabbitmq-server的服务器,选一台做主节点,其他做从节点
2.在所有节点配置好hosts到ip的解析(或者dns中配置主机名到ip的解析)
配置集群
演示将192.168.1.48和192.168.1.47组成一个集群,然后在将192.168.1.48加入到该集群
停止所有节点的rabbitmq-server服务,从一台节点拷贝.erlang.cookie到其他节点
# systemctl stop rabbitmq-server.service
# systemctl stop rabbitmq-server.service
# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.48:/var/lib/rabbitmq/.erlang.cookie
注意,拷贝完成后检查一下.erlang.cookie文件所有者所属组和权限,所有节点必须为下面权限,否则集群不能成功
# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Jan 8 00:00 /var/lib/rabbitmq/.erlang.cookie
启动所有节点,主节点启动后,查看一下集群名称,在从节点执行加入集群操作(加入集群如果带--ram就加入的是内存节点,如果不带,默认加入的是磁盘节点)
# systemctl start rabbitmq-server.service
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@test-192-168-1-47' ...
[{nodes,[{disc,['rabbit@test-192-168-1-47',
# systemctl start rabbitmq-server.service
# rabbitmqctl stop_app
# rabbitmqctl join_cluster rabbit@test-192-168-1-47
完成后查看集群状态
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@test-192-168-1-48' ...
[{nodes,[{disc,['rabbit@test-192-168-1-47',
'rabbit@test-192-168-1-48']}]},
{running_nodes,['rabbit@test-192-168-1-47',
'rabbit@test-192-168-1-48']},
{cluster_name,<<"rabbit@test-192-168-1-47">>},
{partitions,[]},
{alarms,[{'rabbit@test-192-168-1-47',[]},
{'rabbit@test-192-168-1-48',[]}]}]
配置HA policy
# rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'
Setting policy "ha-all" for pattern "^(?!amq\\.).*" to "{\"ha-mode\": \"all\"}" with priority "0" ...
# rabbitmqctl list_policies
Listing policies ...
/ ha-all all ^(?!amq\\.).* {"ha-mode":"all"} 0
rabbitmq集群中做了HA policy以后,使用rabbitmq的组件配置中需要有下面内容
[oslo_messaging_rabbit]
...
rabbit_ha_queues=true
rabbitmq 3.3.0及以上版本用户默认为本地用户,对于集群来说,只能访问集群的主节点,需要在配置文件加入如下内容
# vi /etc/rabbitmq/rabbitmq.config
[{rabbit, [{loopback_users, []}]}].
这样,用户就可以同时访问集群中的所有节点了。
集群增加节点
在需要扩容节点安装rabbitmq
# yum install rabbitmq-server -y
在所有节点配置好hosts到ip的解析(或者dns中配置主机名到ip的解析)
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.41 test-192-168-1-41
192.168.1.47 test-192-168-1-47
192.168.1.48 test-192-168-1-48
参考配置集群内容,将节点加入到集群
验证集群
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@test-192-168-1-47' ...
[{nodes,[{disc,['rabbit@test-192-168-1-41',
'rabbit@test-192-168-1-47',
'rabbit@test-192-168-1-48']}]},
{running_nodes,['rabbit@test-192-168-1-48',
'rabbit@test-192-168-1-41',
'rabbit@test-192-168-1-47']},
{cluster_name,<<"rabbit@test-192-168-1-41">>},
{partitions,[]},
{alarms,[{'rabbit@test-192-168-1-48',[]},
{'rabbit@test-192-168-1-41',[]},
{'rabbit@test-192-168-1-47',[]}]}]
节点移出集群
使用下面命令,可以将当前节点移出集群
# rabbitmqctl stop_app
Stopping node 'rabbit@test-192-168-1-48' ...
# rabbitmqctl reset
Resetting node 'rabbit@test-192-168-1-48' ...
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@test-192-168-1-48' ...
[{nodes,[{disc,['rabbit@test-192-168-1-48']}]},{alarms,[]}]