RabbitMQ集群搭建

Posted Lossdate

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ集群搭建相关的知识,希望对你有一定的参考价值。

一、集群搭建

  1. 环境搭建
    B:192.168.200.139
    C:192.168.200.140
    D:192.168.200.141
    配置/etc/hosts

    vi /etc/hosts
    
    192.168.200.139 nodeB
    192.168.200.140 nodeC
    192.168.200.141 nodeD
    
    #重启网络
    systemctl restart network
    setenforce 0
    #重启
    init 6
    
    #关闭防火墙
    systemctl stop iptables
    systemctl stop firewalld
    systemctl disable firewalld.service
    

    在BCD四个虚拟机上安装RabbitMQ

  2. 拷贝.erlang.cookie到其它两个的相应目录
    如果没有该文件,手动创建 /var/lib/rabbitmq/.erlang.cookie ,生成Cookie字符串,或者启 动一次RabbitMQ自动生成该文件
    生产中推荐使用第三方工具生成
    我首先在B上启动单机版RabbitMQ,以生成Cookie文件:

    cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.16/sbin/
    rabbitmq-server -detached
    cd /var/lib/rabbitmq
    ls -a
    

    就可以看到.erlang.cookie
    开始准备同步 .erlang.cookie 文件。RabbitMQ的集群依赖Erlang的分布式特性,需要保持 Erlang Cookie一致才能实现集群节点的认证和通信
    接着拷贝到C和D的当前目录下

    scp .erlang.cookie root@nodeC:/var/lib/rabbitmq/
    scp .erlang.cookie root@nodeD:/var/lib/rabbitmq/
    
  3. 修改C和D上该文件的所有者为rabbitmq:rabbitmq

    ll -a
    chown rabbitmq:rabbitmq .erlang.cookie
    

  4. 也启动C和D

    cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.16/sbin/
    rabbitmq-server -detached
    
  5. 将C和D这两个节点加入到集群中

    #停止Erlang VM上运行的RabbitMQ应用,保持Erlang VM的运行 
    rabbitmqctl stop_app
    
    #移除当前RabbitMQ虚拟主机中的所有数据:重置 
    rabbitmqctl reset
    
    #将当前RabbitMQ的主机加入到rabbit@nodeB这个虚拟主机的集群中。一个节点也是集群。 
    rabbitmqctl join_cluster rabbit@nodeB
    
    #启动当前Erlang VM上的RabbitMQ应用 
    rabbitmqctl start_app
    

    rabbit@nodeB表示RabbitMQ节点名称,
    默认前缀就是 rabbit , @ 之后是当前虚拟主机所在的物理主机 hostname
    join_cluster默认是使用disk模式,后面可以加入参数–ram启用内存模式
    在nodeB查看集群状态,可以看到nodeC和nodeD已加入集群

  6. 添加用户
    三台机器启动插件

    rabbitmq-plugins enable rabbitmq_management
    

    在任意一个机子

    rabbitmqctl add_user root 123456
    rabbitmqctl set_permissions --vhost "/" root ".*" ".*" ".*"
    rabbitmqctl set_user_tags --vhost "/" root administrator
    
  7. 登入
    访问http://192.168.200.139:15672/
    登入

  8. 修改集群名称和查看集群状态

    #修改集群名称(任意节点执行都可以) 
    rabbitmqctl set_cluster_name
    
    #查看集群状态(任意节点执行都可以) 
    rabbitmqctl cluster_status
    
  9. 移除集群

    #将虚拟主机(RabbitMQ的节点)rabbit@nodeD从集群中移除,
    #但是rabbit@nodeD还保留集群信息 
    #还是会尝试加入集群,但是会被拒绝。可以重置rabbit@nodeD节点。 
    rabbitmqctl forget_cluster_node rabbit@nodeD
    

二、镜像集群配置

  1. 简介
    RabbitMQ中队列的内容是保存在单个节点本地的(声明队列的节点)
    跟交换器和绑定不同,它 们是对于集群中所有节点的
    如此,则队列内容存在单点故障,解决方式之一就是使用镜像队列在多个节点上拷贝队列的副本
  2. 启用镜像队列
    #对/节点配置镜像队列,使用全局复制 
    rabbitmqctl set_policy ha-all "^" '"ha-mode":"all"'
    
    #配置过半(N/2 + 1)复制镜像队列 
    rabbitmqctl set_policy ha-halfmore "queueA" '"ha-mode":"exactly", "haparams":2'
    
    #指定优先级,数字越大,优先级越高 
    rabbitmqctl set_policy --priority 1 ha-all "^" '"ha-mode":"all"'
    

三、负载均衡-HAProxy

  1. 简介
    nodeA:192.168.200.136
    将客户端的连接和操作的压力分散到集群中的不同节点,防止单个或几台服务器压力过大成为访问的瓶颈,甚至宕机
  2. 安装
    在nodeA上安装HAProxy
    yum -y install haproxy
    
    haproxy默认在/usr/sbin/haproxy,且会自动创建配置文 件/etc/haproxy/haproxy.cfg
  3. 配置haproxy.cfg
    #查看uid, 用于配置
    id haproxy
    #配置
    vim /etc/haproxy/haproxy.cfg
    
    配置详细:
    global
        log 127.0.0.1 local0 info
        #服务器最大并发连接数;如果请求的连接数高于此值,将其放入请求队列,等待其它连接被释放;
        maxconn 5120
        #chroot /tmp
        #指定用户
        uid 188
        #指定组
        gid 188
        #让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能
        #当然,也可以在命令行中以“-db”选项将其禁用;
        daemon
        #debug参数
        quiet
        #指定启动的haproxy进程的个数,只能用于守护进程模式的haproxy;
        #默认只启动一个进程,
        #鉴于调试困难等多方面的原因,在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
        #nbproc 20
        nbproc 1
        pidfile /var/run/haproxy.pid
    
    defaults
        log global
        #tcp:实例运行于纯TCP模式,第4层代理模式,在客户端和服务器端之间将建立一个全双工的连接,
        #且不会对7层报文做任何类型的检查;
        #通常用于SSL、SSH、SMTP等应用;
        mode tcp
        option tcplog
        option dontlognull
        retries 3
        option redispatch
        maxconn 2000
        #contimeout 5s
        timeout connect 5s
        #客户端空闲超时时间为60秒则HA 发起重连机制
        timeout client 60000
        #服务器端链接超时时间为15秒则HA 发起重连机制
        timeout server 15000
    
    listen rabbitmq_cluster
        #VIP,反向代理到下面定义的三台Real Server
        bind 192.168.200.136:5672
        #配置TCP模式
        mode tcp
        #简单的轮询
        balance roundrobin
        #rabbitmq集群节点配置
        # nter 每隔五秒对mq集群做健康检查,2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
        server rabbitmqNode1 192.168.200.139:5672 check inter 5000 rise 2 fall 2
        server rabbitmqNode2 192.168.200.140:5672 check inter 5000 rise 2 fall 2
        server rabbitmqNode3 192.168.200.141:5672 check inter 5000 rise 2 fall 2
    
    #配置haproxy web监控,查看统计信息
    listen stats
        bind 192.168.200.136:9000
        mode http
        option httplog
        #启用基于程序编译时默认设置的统计报告
        stats enable
        #设置haproxy监控地址为http://192.168.200.136:9000/rabbitmq-stats
        stats uri /rabbitmq-stats
        #每5s刷新一次页面
        stats refresh 5s
    
  4. 启动
    haproxy -f /etc/haproxy/haproxy.cfg
    
  5. 查看
    访问http://192.168.200.136:9000/rabbitmq-stats
  6. 关闭
    kill -9 <pid>
    

以上是关于RabbitMQ集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ教程_6 搭建集群

RabbitMQ集群搭建

CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看

CentOS 7 下 RabbitMQ 集群搭建

centos7 rabbitmq集群搭建+高可用

六、rancher搭建rabbitmq集群化部署