部署RabbitMQ集群记录
前言:RabbitMQ是一款流行的开源消息代理和队列服务器,用于在分布式系统中异步地传递消息。这意味着系统或应用程序的不同部分可以通过发送消息到队列进行通信,而不是直接调用彼此的接口。由于系统组件可以独立地处理传入的消息,这种方式可以显著提高应用程序的可扩展性和健壮性。
一,实验背景
三台CentOS 7 部署rabbitmq集群(普通模式+镜像模式);以下是服务器IP信息
rabbitmq1:192.168.229.133
rabbitmq2:192.168.229.149
rabbitmq3:192.168.229.150
在/etc/hosts里面做好本地解析
二,安装步骤
2.1,单节点部署
yum update
yum install erlang -y #安装二郎
#最新版已经不支持了,为了方便直接安装epel包里面的3.3.5
yum list |grep rabbitmq-server
rabbitmq-server.noarch 3.3.5-34.el7 epel
yum install rabbitmq-server.noarch -y
#编辑配置文件
vim /etc/rabbitmq/rabbitmq.config
安装插件并启动服务
rabbitmq-plugins enable rabbitmq_management
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service
查看节点状态,目前只有一个节点
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1]}]},
{running_nodes,[rabbit@rabbitmq1]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]}]
...done.
这时候单机部署就已经完成,可以登录web页面看一下(端口15672,账号密码都是guest)
2.2,部署集群
另外两台也安装上rabbitmq,然后同步.erlang.cookie文件,保证其内容一致。
#使用scp同步
scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
#在rabbitmq2/3上重启RabbitMQ服务
systemctl restart rabbitmq-server.service
#在rabbitmq2/3上暂停服务
rabbitmqctl stop
#启动rabbitmq,-detached代表后台守护进程方式启动
rabbitmq-server -detached
在rabbitmq2/3上加入rabbitmq1的集群中
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
#查看3台MQ服务器的集群状态
# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq3 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
{running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]}]
...done.
由于guest这个用户,只能在本地访问,所以我们要在每个节点上,新增一个用户并赋予对/的所有权限,然后添加到管理员组中,让此用户能够远程访问
# 创建名为 demo 的 VirtualHost
rabbitmqctl add_vhost demo
# 添加用户,密码
rabbitmqctl add_user admin admin@321
# 设置权限
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p demo admin '.*' '.*' '.*'
2.3,切换成镜像集群
在主节点执行以下命令
rabbitmqctl set_policy -p demo ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
demo:vhost名称
ha-all:策略名称
“^”:是正则表达式中匹配字符串开始的元字符,这里表示匹配模式为匹配所有队列
ha-mode:指明镜像列队模式,all表示在集群中所有的节点上进行镜像,包含新增节点
automatic:镜像之间的数据同步是自动进行的
三,扩展:Rabbitmq + Haproxy
上面的Rabbitmq集群再加一台单独的CentOS 7 安装Haproxy负载均衡器。
yum install -y haproxy.x86_64
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats mode 660 level admin
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 5s
timeout client 120s
timeout server 120s
listen rabbitmq_web
bind 0.0.0.0:80
mode tcp
balance roundrobin
server node1 192.168.229.133:15672 check inter 5000 rise 2 fall 2
server node2 192.168.229.149:15672 check inter 5000 rise 2 fall 2
server node3 192.168.229.150:15672 check inter 5000 rise 2 fall 2
listen rabbitmq_cluster
bind :5673
mode tcp
balance roundrobin
server node1 192.168.229.133:5672 check inter 5000 rise 2 fall 3 weight 1
server node2 192.168.229.149:5672 check inter 5000 rise 2 fall 3 weight 1
server node3 192.168.229.150:5672 check inter 5000 rise 2 fall 3 weight 1
listen monitor
bind 0.0.0.0:8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 20s
stats auth admin:admin
评论
发表评论