多机搭建haproxy+rabbitmq集群

版权声明: https://blog.csdn.net/zhuangzi123456/article/details/83858240

环境说明:

主机1:192.168.0.234 mq01 DISK

主机2:192.168.0.235 mq02 RAM

主机3:192.168.0.236 mq03 RAM

主机4:测试机器,安装了jdk-8u151-linux-x64,

操作系统:CentOS release 6.9 (Final)

内核版本:2.6.32-696.10.1.el6.x86_64

rabbitmq版本:3.6.11

拓扑图:

步骤:

1,各个主机上下载安装rabbitmq(步骤略)

2,配置3台机器上本地主机名解析

vim /etc/hosts

192.168.0.234 mq01

192.168.0.235 mq02

192.168.0.236 mq03

3,设置3个机器上的节点间统一认证的Erlang Cookie

登录到主机1上传输配置文件:

scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/

scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/

在3个节点上分别执行(确保 Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only):

chmod 600 /var/lib/rabbitmq/.erlang.cookie

4,在3台主机上使用-detached运行各个节点

在各个主机上启动rabbitmq-server

rabbitmqctl stop

rabbitmq-server -detached

[root@mq01 scripts]# rabbitmqctl cluster_status

[root@mq02 scripts]# rabbitmqctl cluster_status

[root@mq03 scripts]# rabbitmqctl cluster_status

5,创建并部署集群

主机2上的rabbit@mq02:

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@mq01

rabbitmqctl start_app

主机3上的rabbit@mq03:

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@mq01

rabbitmqctl start_app

然后在3台主机上分别执行:

主机1:rabbitmqctl cluster_status

Cluster status of node rabbit@mq01

[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq03,rabbit@mq02]}]},

{running_nodes,[rabbit@mq02,rabbit@mq03,rabbit@mq01]},

{cluster_name,<<"rabbit@mq01">>},

{partitions,[]},

{alarms,[{rabbit@mq02,[]},{rabbit@mq03,[]},{rabbit@mq01,[]}]}]

主机2:rabbitmqctl cluster_status

Cluster status of node rabbit@mq02

[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq03,rabbit@mq02]}]},

{running_nodes,[rabbit@mq03,rabbit@mq01,rabbit@mq02]},

{cluster_name,<<"rabbit@mq01">>},

{partitions,[]},

{alarms,[{rabbit@mq03,[]},{rabbit@mq01,[]},{rabbit@mq02,[]}]}]

主机3:rabbitmqctl cluster_status

Cluster status of node rabbit@mq03

[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq03,rabbit@mq02]}]},

{running_nodes,[rabbit@mq02,rabbit@mq01,rabbit@mq03]},

{cluster_name,<<"rabbit@mq01">>},

{partitions,[]},

{alarms,[{rabbit@mq02,[]},{rabbit@mq01,[]},{rabbit@mq03,[]}]}]

6,配置镜像队列

rabbit@mq01作为备份节点,磁盘节点

在主机2上执行操作:

[root@mq02 scripts]# rabbitmqctl -n rabbit@mq02 set_policy mytest '.*' '{"ha-mode": "nodes", "ha-params": ["rabbit@mq01",], "ha-sync-mode": "automatic"}'

Setting policy "mytest" for pattern ".*" to "{\"ha-mode\": \"nodes\", \"ha-params\": [\"rabbit@mq01\",], \"ha-sync-mode\": \"automatic\"}" with priority "0"

[root@mq02 scripts]# rabbitmqctl -n rabbit@mq02 set_policy -p test mytest '.*' '{"ha-mode": "nodes", "ha-params": ["rabbit@mq01",], "ha-sync-mode": "automatic"}'

Setting policy "mytest" for pattern ".*" to "{\"ha-mode\": \"nodes\", \"ha-params\": [\"rabbit@mq01\",], \"ha-sync-mode\": \"automatic\"}" with priority "0"

查看策略:

主机1:

[root@mq01 scripts]# rabbitmqctl list_policies

Listing policies

/ mytest all .* {"ha-mode":"nodes","ha-params":["rabbit@mq01"],"ha-sync-mode":"automatic"} 0

主机2:

[root@mq02 scripts]# rabbitmqctl list_policies

Listing policies

/ mytest all .* {"ha-mode":"nodes","ha-params":["rabbit@mq01"],"ha-sync-mode":"automatic"} 0

主机3:

[root@mq03 scripts]# rabbitmqctl list_policies

Listing policies

/ mytest all .* {"ha-mode":"nodes","ha-params":["rabbit@mq01"],"ha-sync-mode":"automatic"} 0

7,在3台主机上启动rabbitmq的web管理插件management

[root@mq02 scripts]# rabbitmq-plugins enable rabbitmq_management

[root@mq02 scripts]# rabbitmq-plugins enable rabbitmq_management

[root@mq03 scripts]# rabbitmq-plugins enable rabbitmq_management

8,配置haproxy作为集群的代理

配置文件/etc/haproxy/haproxy.cfg

global

log 127.0.0.1 local3 info

maxconn 5120

gid 507

daemon

quiet

nbproc 4

pidfile /var/run/haproxy.pid

defaults

log global

mode tcp

option tcplog

option dontlognull

retries 3

option redispatch

maxconn 5000

contimeout 5s

clitimeout 120s

srvtimeout 120s

listen rmqcluster

bind 0.0.0.0:5672

mode tcp

option tcpka

log 127.0.0.1 local3 info

balance roundrobin

server mq01 192.168.0.234:5672 weight 4 check inter 2000 rise 2 fall 1 backup

server mq02 192.168.0.235:5672 weight 4 check inter 2000 rise 2 fall 1

server mq03 192.168.0.236:5672 weight 4 check inter 2000 rise 2 fall 1

listen rmqmgt

bind 0.0.0.0:15672

mode tcp

option tcpka

log 127.0.0.1 local3 info

balance roundrobin

server mq01 192.168.0.234:15672 weight 4 check inter 2000 rise 2 fall 1 backup

server mq02 192.168.0.235:15672 weight 4 check inter 2000 rise 2 fall 1

server mq03 192.168.0.236:15672 weight 4 check inter 2000 rise 2 fall 1

listen stats

bind 0.0.0.0:8080

mode http

log 127.0.0.1 local3 err

stats enable

stats uri /status

stats refresh 5s

stats auth admin:A9724hxJ

9,关闭集群

disk节点mq01:

rabbitmqctl stop_app

此时beam.smp进程还在运行;

ram节点mq02:

rabbitmqctl stop_app

此时beam.smp进程还在运行;

ram节点Mq03:

rabbitmqctl stop_app

此时beam.smp进程还在运行;

10,启动集群

必须先把磁盘节点启动起来。一个磁盘节点都没有运行的时候,直接启动内存节点会报错如下,出现下面报错之后上面“9,关闭集群”中说的beam.smp进程也会挂掉:

[root@mq03 ~]# rabbitmqctl start_app

Starting node rabbit@mq03

Error: unable to connect to node rabbit@mq03: nodedown

DIAGNOSTICS

===========

attempted to contact: [rabbit@mq03]

rabbit@mq03:

* connected to epmd (port 4369) on mq03

* epmd reports: node 'rabbit' not running at all

no other nodes on mq03

* suggestion: start the node

current node details:

- node name: 'rabbitmq-cli-72@mq03'

- home dir: /var/lib/rabbitmq

- cookie hash: TI04uDcfMAPrk+JQ82hdCw==

解决办法:

先启动磁盘节点,然后再在ram节点主机上的执行/etc/init.d/rabbbitmq-server start来启动节点,然后再start_app。

猜你喜欢

转载自blog.csdn.net/zhuangzi123456/article/details/83858240