美文网首页
Centos 7+RabbitMQ+镜像集群之集群环境搭建

Centos 7+RabbitMQ+镜像集群之集群环境搭建

作者: pingwazi | 来源:发表于2020-09-04 06:46 被阅读0次

    阅读这篇文章的前提是你已经实现了单机版RabbitMQ服务的安装配置,并且能够正常访问了。如果还没有准备好?
    请参考:
    Centos 7+RabbitMQ+镜像集群之基础环境搭建

    rabbitmq_img_09.png

    1、准备几台Centos服务器

    我这里演示的是5台centos7虚拟机,如果你有这个条件的话,使用物理机器当然也可以。

    • Centos 7 64 130 安装了Rabbitmq服务
    • Centos 7 64 131 安装了Rabbitmq服务
    • Centos 7 64 132 安装了Rabbitmq服务
    • Centos 7 64 133 安装了Haproxy、Keepalived 设置了虚拟ip:172.16.255.135
    • Centos 7 64 134 安装了Haproxy、Keepalived 设置了虚拟ip:172.16.255.135

    这里先简单的说一下集群实现思路,在多台centos服务器上按照Rabbitmq服务(如果是使用虚拟机的话,可以先安装一台,然后通过镜像的方式再克隆几台出来。),Haproxy用来实现tcp层的负载均衡,而Keepalived用来创建虚拟ip实现负载均衡的高可用。Haproxy、Keepalived、Rabbitmq服务可以在同一台centos虚拟机中。

    2、集群环境搭建

    2.1、停掉所有机器中的Rabbitmq服务

    #方式1
    service rabbitmq-server stop
    #方式2
    rabbitmqctl stop_app
    

    2.2、从安装了Rabbitmq的centos中选择一个作为master节点,并将其/var/lib/rabbitmq/.erlang.cookie 文件拷贝到其他安装了Rabbitmq的centos中。(如果是克隆镜像的话,这步可以省略)

    2. 3、启动master节点的Rabbitmq服务

    service rabbitmq-server start
    

    2.4、将其他几个安装了rabbitmq的非master节点加入到master节点中

    如下命令在非master节点中执行

    rabbitmqctl join_cluster rabbit@server130  #server130是我master节点的机器名称,如果你没有设置机器名称的话,这里可以使用master节点的ip地址
    

    2.4.1、如果master节点的防火墙打开了,需要允许4369、25672端口通过

    1. 允许通过指定端口:firewall-cmd --zone=public --add-port=4369/tcp --permanent、firewall-cmd --zone=public --add-port=25672/tcp --permanent
    2. 重启防火墙:firewall-cmd --reload
    3. 查看允许通过防火墙的端口:firewall-cmd --list-ports
    

    2.5、启动非master节点的所有rabbitmq服务

    # 方式1
    service rabbitmq-server start
    # 方式2
    rabbitmqctl start_app
    

    2.6、设置集群名称,在任意一个节点上执行即可

     rabbitmqctl set_cluster_name pingwazi_rabbitmq_cluster
    

    2.7、设置为镜像队列,在任意一个节点上执行即可

    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    

    3、集群的负载均衡环境搭建

    3.1、Haproxy安装配置

    3.1.1、下载并安装

    #到官网下载Haproxy的合适包(一般选择次新版),文件默认是下载到当前目录的
    curl -O  https://www.haproxy.org/download/2.0/src/haproxy-2.0.15.tar.gz
    #解压文件
    tar -zxvf haproxy-2.0.15.tar.gz
    #按照依赖
    yum install -y openssl openssl-devel systemd-devel.x86_64
    #进入haproxy的解压目录
    cd haproxy-2.0.15
    #执行安装
    make TARGET=linux-glibc   USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1  USE_ZLIB=1  && make install 
    

    开启https
    USE_OPENSSL=1
    指定为systemd模式
    USE_SYSTEMD=1
    可指定安装目录
    PREFIX=/usr/local/haproxy
    默认为/usr/local/sbin/

    3.1.2、配置系统服务

    # 1、创建haproxy.service文件
    vi /usr/lib/systemd/system/haproxy.service
    # 2、haproxy.service 内容如下
    [Unit]
    Description=HAProxy Load Balancer
    After=syslog.target network.target
    
    [Service]
    ExecStartPre=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
    ExecStart=/usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /run/haproxy.pid
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    #3、重载系统服务
    systemctl daemon-reload
    #4、加入开机自启动
    systemctl enable haproxy.service
    #5、启动、停止等操作
    systemctl start/restart/stop/status haproxy
    

    3.1.3、覆盖Haproxy的配置文件

    里面的ip地址要换成自己安装了rabbitmq服务器的centos的机器的ip地址

    vi /etc/haproxy/haproxy.cfg 
    # 在命令行模式下输入d+G,目的是清空当前内容
    # 填写以下内容
    
    #绑定配置
    listen rabbitmq_cluster
            bind 0.0.0.0:5672
            #配置TCP模式
            mode tcp
            #简单的轮询
            balance roundrobin
            #RabbitMQ集群节点配置
            server rmq_node0 172.16.255.130:5672 check inter 5000 rise 2 fall 3 weight 1
            server rmq_node1 172.16.255.131:5672 check inter 5000 rise 2 fall 3 weight 1
            server rmq_node2 172.16.255.132:5672 check inter 5000 rise 2 fall 3 weight 1
    
    listen rabbitmq_cluster_webmanager
            bind 0.0.0.0:15672
            #配置TCP模式
            mode tcp
            #简单的轮询
            balance roundrobin
            #RabbitMQ集群节点配置
            server rmq_node0 172.16.255.130:15672 check inter 5000 rise 2 fall 3 weight 1
            server rmq_node1 172.16.255.131:15672 check inter 5000 rise 2 fall 3 weight 1
            server rmq_node2 172.16.255.132:15672 check inter 5000 rise 2 fall 3 weight 1
    
    #haproxy监控页面地址
    listen monitor
            bind 0.0.0.0:8100
            mode http
            option httplog
            stats enable
            stats uri /stats
            stats refresh 5s
    

    如果按照Haproxy机器的防火墙是打开的话,要允许通过5672、15672、8100接口

    # 通过指定端口
    firewall-cmd --zone=public --add-port=5672/tcp --permanent
    firewall-cmd --zone=public --add-port=15672/tcp --permanent
    firewall-cmd --zone=public --add-port=8100/tcp --permanent
    # 重启防火墙
    firewall-cmd --reload
    # 查看是否添加成功
    firewall-cmd --list-ports
    

    浏览器输入http://haproxy的ip:15627/、http://haproxy的ip:8100/stats

    rabbitmq_img_10.png

    3.1.4、另外一台服务器也是同样的步骤(当然也可以克隆镜像的方式再创建一个机器,但是ip地址要记得修改哦)

    3.2、keepalived安装配置

    3.2.1、下载并安装

    #到官网下载合适的安装包(一般选择次新版)
    curl -O https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
    #解压
    tar -zxvf keepalived-2.0.20.tar.gz
    #进入解压目录
    cd keepalived-2.0.20
    #执行配置,指定路径
    ./configure --prefix=/usr/local/keepalived
    # 编译并安装
    make && make install
    

    3.2.2、配置系统服务

    # 拷贝源码中的keepalived-2.0.20/keepalived/etc/init.d/keepalived 到 /etc/init.d/
    cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/
    
    # 拷贝编译后的keepalived/etc/sysconfig/keepalived 到 /etc/sysconfig/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
     
    # 创建文件夹
    mkdir /etc/keepalived
     
    # 把配置文件移到文件夹中
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
     
    # 把执行文件移动到/usr/sbin/
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    
    #安装系统自动启动
    systemctl enable keepalived
    

    3.2.3、覆盖配置文件

    vi /etc/keepalived/keepalived.conf

    #全局定义
    global_defs {
       router_id keepalived_133  #唯一的值,也可以改成IP
    }
    
    #检测脚本定义
    vrrp_script chk_haproxy {
        script "/etc/keepalived/scripts/haproxy_check.sh"
        interval 2   # 检测脚本执行的间隔
    }
    
    #虚拟实例定义
    vrrp_instance VI_1 {
        state MASTER   #主机为MASTER,备用机为BACKUP
        interface ens33   #网卡名,用ifconfig查看
        virtual_router_id 133   #主、备机的virtual_router_id必须相同
        priority 100   #主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1         #心跳,每隔1秒钟检测一下服务器是否还活着
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            172.16.255.135   # 暴露给外界的虚拟IP地址,切记要与实际服务器处于同一网段
        }
        track_script {
            chk_haproxy
        }
    }
    

    3.2.4、编写检查服务指定服务是否存活的脚本

    vi /etc/keepalived/scripts/haproxy_check.sh

    #!/bin/bash
    num=`ps -C haproxy --no-header |wc -l`
    if [ $num -eq 0 ]
    then
        echo "尝试重启haproxy">>/etc/keepalived/scripts/haproxy_check.log
        systemctl restart haproxy
        sleep 3
        if [ `ps -C haproxy --no-header |wc -l` -eq 0 ]
        then
            echo "重启haproxy失败,停止keepavlied服务">>/etc/keepalived/scripts/haproxy_check.log
            systemctl stop keepalived
        fi
    fi
    

    3.2.5、配置防火墙(如果防火墙没有打开,可以跳过)

    Keepalived是一个轻量级的HA集群解决方案,但开启防火墙后各节点无法感知其它节点的状态,各自都绑定了虚拟IP。网上很多文章讲要配置防火墙放过tcp/112,在CentOS7下是无效的,正确的做法是配置放过vrrp协议,方法如下:

    firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
    firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
    firewall-cmd --reload
    

    Keepalived使用vrrp组播,默认地址是224.0.0.18,因此要配置防火墙放过。 完成后再用ip addr查看,集群已经正常了,只有主节点绑定虚拟IP,备份节点不会绑定了。

    3.2.6、另外一台服务器keepalived的安装配置也是同理,只是conf文件中需要将state指定为BACKUP,同时将优先级设置得比MASTER小50

    3.2.7、浏览器中输入地址进行测试

    http://虚拟ip:15627/、http://虚拟ip:8100/


    rabbitmq_img_11.png

    3.2.8、将MASTER的haproxy服务停掉,在BACKUP中执行ip addr查看虚拟ip是否漂移过来。

    rabbitmq_img_12.png

    相关文章

      网友评论

          本文标题:Centos 7+RabbitMQ+镜像集群之集群环境搭建

          本文链接:https://www.haomeiwen.com/subject/umrosktx.html