部署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

查看web页面,192.168.229.152:15672



查看stats页面,192.168.229.152:8100




评论

此博客中的热门博文

ELK日志平台——Elasticsearch 8.x安装部署

Linux终端中文字体显示乱码问题解决方法

部署ELK日志平台集群(Elasticsearch, Logstash, Kibana)实验记录