我是靠谱客的博主 积极画笔,最近开发中收集的这篇文章主要介绍RabbitMQ+keepalived+haproxy搭建高可用集群,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、搭建普通集群

1.环境准备
在这里插入图片描述
2.RabbitMQ普通集群配置
(1)配置hosts文件
更改三台MQ节点的计算机名分别为mq01、mq02 和mq03,然后修改hosts配置文件

vim /etc/hostname    //其他两台相同
  mq01.localdomain

vi /etc/hosts
192.168.100.143 mq01  //注意不能带.注意-主机名称也要更改
192.168.100.144 mq02
192.168.100.145 mq03

(2)三个节点配置yum源,安装rabbitmq软件

yum install -y epel-release

yum install -y rabbitmq-server

(3)拷贝erlang.cookie
a. Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie一致,不然节点之间就无法通信。

[root@mq01 ~]# cat /var/lib/rabbitmq/.erlang.cookie 
XAHPZVPYUQDWWJIOHUPQ 

b.用scp的方式将mq01节点的.erlang.cookie的值复制到其他两个节点中

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.100.144:/var/lib/rabbitmq/.erlang.cookie

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.100.145:/var/lib/rabbitmq/.erlang.cookie

(4)分别查看三个节点并添加管理服务,最后启动rabbitmq服务
RabbitMQ提供了一个非常友好的图形化监控页面插件(rabbitmq_management),让我们可以一目了然看见Rabbit的状态或集群状态

/usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安装情况

/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务

rabbitmq-server -detached

(5)查看监听端口

netstat -ntap | grep 5672

(6)将mq02、mq03作为内存节点加入mq01节点集群中
在mq02、mq03执行如下命令:

rabbitmqctl stop_app    //停掉rabbit应用

rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盘节点

rabbitmqctl start_app  //启动rabbit应用

在这里插入图片描述

注意查看报错信息
说明:
a. 默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq02和mq03是内存节点,mq01是磁盘节点。
b. 如果要使mq02、mq03都是磁盘节点,去掉–ram参数即可。
c. 如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用
(7)查看集群状态

rabbitmqctl cluster_status

在这里插入图片描述
(8)登录rabbitmq web管理控制台,创建新的队列
a. 打开浏览器输入http://192.168.100.143:15672, 输入默认的Username:guest,输入默认的Password:guest ,登录后出现如图所示的界面。
在这里插入图片描述
b. 根据界面提示创建一条队列

在这里插入图片描述
在这里插入图片描述

c. 在RabbitMQ集群集群中,必须至少有一个磁盘节点,否则队列元数据无法写入到集群中,当磁盘节点宕掉时,集群将无法写入新的队列元数据信息。

可以参见:https://blog.51cto.com/11134648/2155934
或 https://www.cnblogs.com/shihaiming/p/11014257.html
注意:
(1)修改主机名和/etc/hosts后,最好重启一下服务
(2)在修改完成后,不要使用该文档中说明的启动方式(service rabbitmq-server start),使用rabbitmq-server -detached命令会更好,该命令会启动rabbitmq服务和erlang虚拟机。

3.RabbitMQ镜像集群配置
概述
上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。
说明
设置的镜像队列可以通过开启的网页的管理端,也可以通过命令,这里说的是其中的网页设置方式。
(1)创建rabbitmq策略
在mq01节点的控制台上创建策略

(a)点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add/update a policy。

(b)按照图中的内容根据自己的需求填写。
在这里插入图片描述
指令说明:
Name:策略名称
Pattern:匹配的规则,这里表示匹配a开头的队列,如果是匹配所有的队列,那就是^.
Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档。

(c)点击Add policy添加策略
在这里插入图片描述
此时分别登陆mq02、mq03两个节点的控制台,可以看到上面添加的这个策略,如图所示:
在这里插入图片描述
在这里插入图片描述
(2)添加队列
在mq01节点的控制台上添加队列
(a)点击Queues菜单–>左侧下边的Add a new queue
(b)输入Name和Arguments参数的值,别的值默认即可
在这里插入图片描述
(c)点击Add queue
在这里插入图片描述
将鼠标指向+2可以显示出另外两台消息节点。

(3)创建消息
(a)点击ab队列按钮
(b)拖动滚动条,点击publish message
(c)填写相关内容
在这里插入图片描述
2-Persistent:表示持久化
Headers:随便填写即可
Properties:点击问号,选择一个消息ID号
Payload:消息内容
(d)点击Publish message按钮
在这里插入图片描述
点击queue按钮,发现ab队列的Ready和Total中多了一条消息记录。
在这里插入图片描述
(4)做破坏性测试
(a)将mq01节点的服务关闭,再通过mq02和mq03查看消息记录是否还存在。

rabbitmqctl stop_app  //停掉mq01的rabbit应用

在这里插入图片描述
在这里插入图片描述
从中可以看到ab队列已经从之前的+2显示成+1了,而且消息记录是存在的。
(b)再将mq02节点的服务关闭,通过mq03查看消息记录是否还存在。

rabbitmqctl stop_app  //停掉mq02的rabbit应用

在这里插入图片描述
从中可以看到ab队列和消息记录还是存在的,只是变成了一个节点了。

(c)将mq01和mq02的服务再启动起来

rabbitmqctl start_app   //启动mq01、mq02的rabbit应用

在这里插入图片描述
从中可以看到ab队列后面+2变成了粉色,鼠标指上去显示镜像无法同步。如果这时候停掉mq03节点的服务,那么队列里面的消息将会丢失。

采取的解决办法是选择在mq02节点上执行同步命令。

rabbitmqctl sync_queue ab  //同步ab队列

在这里插入图片描述

同步完成后,+2又变成了蓝色。

这样,我们就测试了rabbitmq集群的破坏性测试,说明集群配置成功。

二、HAproxy负载

详见:https://www.jianshu.com/p/22d46b4fc5eb

说明:在192.168.1.6和192.168.1.7做负载
1.安装HAproxy

[root@rabbit1 tmp] yum install haproxy
// 编辑配置文件
[root@rabbit1 tmp] vim /etc/haproxy/haproxy.cfg

在/etc/haproxy/haproxy.cfg文件末尾新增配置信息

listen status
    bind 0.0.0.0:9188
    mode http
    stats enable
    stats refresh 30s
    stats uri /stats #脡脰haproxy录脿碌脴路为http://localhost:9188/stats
    stats auth admin:123456 #脤录脫没搂脙脙脗脠证
    stats realm (Haproxy statistic)
    stats admin if TRUE

listen rabbitmq_admin
    bind 0.0.0.0:15673
    server mq01 192.168.1.6:15672
    server mq02 192.168.1.7:15672
    server mq03 192.168.1.9:15672


listen rabbitmq_cluster
    bind 0.0.0.0:5673
    mode tcp
    option tcplog
    maxconn 10000
    balance roundrobin
    server mq03 192.168.1.9:5672 check inter 1000 rise 2 fall 2 backup
    server mq02 192.168.1.7:5672 check inter 1000 rise 2 fall 2 backup
    server mq01 192.168.1.6:5672 check inter 1000 rise 2 fall 2

并且注释掉option forwardfor
2.启动HAproxy负载

[root@rabbit1 tmp] haproxy -f /etc/haproxy/haproxy.cfg

3.HAproxy负载完毕

ps -ef|grep haproxy

三、Keepalived安装

利用keepalived做主备,避免单点问题,实现高可用
在 192.168.1.6和192.168.1.7做主备,前者主,后者备
1.安装Keepalived

[root@rabbit1 tmp] yum -y install keepalived

2.配置Keepalived生成VIP

[root@rabbit1 tmp] vim /etc/keepalived/keepalived.conf

3.部分配置信息(只显示使用到的):

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   # vrrp_strict    # 注释掉,不然访问不到VIP
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 检测任务
vrrp_script check_haproxy {
    # 检测HAProxy监本
    script "/etc/keepalived/script/check_haproxy.sh"
    # 每隔两秒检测
    interval 2
    # 权重
    weight 2
}

# 虚拟组
vrrp_instance haproxy {
    state MASTER # 此处为`主`,备机是 `BACKUP`
    interface enp4s0f0 # 物理网卡,根据情况而定
    mcast_src_ip 192.168.1.219 # 当前主机ip
    virtual_router_id 51 # 虚拟路由id,同一个组内需要相同
    priority 100 # 主机的优先权要比备机高
    advert_int 1 # 心跳检查频率,单位:秒
    authentication { # 认证,组内的要相同
        auth_type PASS
        auth_pass 1111
    }
    # 调用脚本
    track_script {
        check_haproxy
    }
    # 虚拟ip,多个换行
    virtual_ipaddress {
        192.168.1.222
    }
}

4. /etc/keepalived/script/check_haproxy.sh内容

#!/bin/bash
LOGFILE="/var/log/keepalived-haproxy-status.log"
date >> $LOGFILE
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
    echo "warning: restart haproxy" >> $LOGFILE
    haproxy -f /etc/haproxy/haproxy.cfg
    sleep 2

    if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
        echo "fail: check_haproxy status" >> $LOGFILE
        systemctl stop keepalived
    fi
else
    echo "success: check_haproxy status" >> $LOGFILE
fi

说明:
Keepalived组之间的心跳检查并不能察觉到HAproxy负载是否正常,所以需要使用此脚本。
在Keepalived主机上,开启此脚本检测HAproxy是否正常工作,如正常工作,记录日志。
如进程不存在,则尝试重启HAproxy,两秒后检测,如果还没有则关掉主Keepalived,此时备Keepalived检测到主Keepalive挂掉,接管VIP,继续服务。

最后

以上就是积极画笔为你收集整理的RabbitMQ+keepalived+haproxy搭建高可用集群的全部内容,希望文章能够帮你解决RabbitMQ+keepalived+haproxy搭建高可用集群所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部