Rabbitmq+HAproxy+Keepalived实现高可用加负载均衡

1 篇文章 0 订阅
1 篇文章 0 订阅


前言

生产环境中连接单节点服务是比较危险的情况,一旦服务宕机则会出现前端用户访问失败的情况,而且只连单机服务容易造成单机负载过高导致服务响应过慢,使用Rabbitmq集群则能够避免这种情况,同时通过haProxy实现负载均衡,再使用keepalived服务实现虚拟IP漂移,任一节点服务宕机均不会影响服务的正常运行,对于业务要求度比较高的场合适合此种模式,尤其是7x24的服务。

一、配置信息

  1. 本次服务安装涉及的中间件信息、服务器信息如下表所示:
IP主机名操作系统用途
80.31.102.15cd15Centos 7.6MQ集群节点
80.31.102.18cd18Centos 7.6MQ集群节点
80.31.102.22cd22Centos 7.6MQ集群节点
80.85.6.4dy04Centos 7.6haproxy+keepalived
80.85.6.6dy06Centos 7.6haproxy+keepalived
  1. 集群规划图如下所示:

  1. 本次安装的rabbitmq3.8.1、haproxy-1.9.5、keepalived-2.1.5均提供下载地址,也可自行选择其他版本,或者直接使用yum -y install命令进行安装 ,楼主选择源码安装的原因主要是方便管理,建议各位在实际生产中尽量使用源码安装,方便后期运维管理

#Rabbitmq
链接地址: https://pan.baidu.com/s/1CUxFJX8oMsRd9tPeIqLUmg
提取码: 9tbr
#haproxy+keepalived
链接地址:https://pan.baidu.com/s/1XSd9IlouPjp9V0e31tHPQw
提取码: spk8


二、安装

Rabbitmq集群

安装配置Rabbitmq集群,需要先安装单节点rabbitmq服务,单机版服务安装可参照此项地址《Rabbitmq 单节点安装
分别在上述三台服务器(80.31.102.15、80.31.102.18、80.31.102.22)上安装Rabbitmq单机服务。

1.MQ集群

  1. 更改主机信息
#1、修改主机名,三台主机都需要修改
hostnamectl set-hostname cd15
#2、修改/etc/hosts,新增如下内容
80.31.103.15	cd15
80.31.103.15	cd18
80.31.103.15	cd22
#3、三台主机的hosts文件都需要修改,重启完成后进行ping码测试,查看主机名是否相通
ping cd18
ping cd22
  1. 同步.erlang.cookie
#1、查看.erlang.cookie,源码安装的.erlang.cookie文件在用户的$HOME下,我这边编译安装erlang的用户是bph_zhdd
ls  -a	 /home/bph_zhdd/.erlang.cookie
#2、使用scp将主节点.erlang.cookie同步到其他两个节点
scp   -P 63322	/home/bph_zhdd/.erlang.cookie  bph_zhdd@:/home/bph_zhdd
#3、也可人工修改.erlang.cookie,先更改.erlang.cookie权限,再人工修改
chmod 600 .erlang.cookie 
  1. MQ集群搭建
#1、逐个启动节点,在三个服务器上分别执行
rabbitmq-server -detached

#2、将节点2(80.31.102.18以内存节点的方式加入节点1)
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@cd15
rabbitmqctl start_app
#3、查看集群节点状态
rabbitmqctl cluster_status

#3、将节点2(80.31.102.22以磁盘节点的方式加入节点1)
rabbitmqctl stop_app
rabbitmqctl reset
#默认为磁盘节点
rabbitmqctl join_cluster  rabbit@cd15
rabbitmqctl start_app
#3、查看集群节点状态
rabbitmqctl cluster_status

2.集群访问

  1. 使用google浏览器任一输入其中一台服务器ip:15672即可访问rabbitmq集群服务,集群访问如下图所示:
    在这里插入图片描述

3. 配置镜像模式
上图搭建的Rabbitmq集群为普通模式(默认的集群模式),实际生产中需要把普通集群配置镜像模式以实现高可用。本文提供在前端Web页面配置镜像模式的方法,如下图所示:
在这里插入图片描述


Haproxy负载均衡

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
1.HA安装

#1、安装依赖环境
yum -y install gcc
#2、解压安装文件
tar -xvf haproxy-1.9.5.tar.gz 
#3、编译,TARGRT为linux编译版本
uname -r #查看linux版本
make TARGRT=linux310 PREFIX=/Founder/haproxy
#安装
make install 

2.配置文件

#1、创建配置文件目录
mkdir	-p	/Founder/haproxy/conf
#2、将配置文件从解压目录复制安装包conf目录下
cp /Founder/haproxy-1.9.5/examples/auth.cfg 	/Founder/haproxy/conf 
#3、设置环境变量
echo "export PATH=$PATH:/Founder/haproxy/sbin" >> /home/bph_zhdd/.bash_profile
source /home/bph_zhdd/.bash_profile
#配置文件示例
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local0 info
pidfile /Founder/haproxy/haproxy.pid # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 # 最大连接数,默认4000
daemon # 创建1个进程进入deamon模式运行。此参数要求将运行模式设置为daemon
#---------------------------------------------------------------------
# defaults settings
#---------------------------------------------------------------------
# 注意:因为要使用tcp的负载,屏蔽掉与http相关的默认配置
defaults
mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
log global
# option httplog # 采用http日志格式
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
# option http-server-close # 每次请求完毕后主动关闭http通道
# option forwardfor except 127.0.0.0/8 # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 # 3次连接失败就认为服务不可用,也可以通过后面设置
# timeout http-request 10s 
timeout queue 1m
timeout connect 10s # 连接超时时间
timeout client 1m # 客户端连接超时时间
timeout server 1m # 服务器端连接超时时间
# timeout http-keep-alive 10s
timeout check 10s 
maxconn 3000 # 最大连接数
#--------------------------------------------------------
### haproxy 监控页面地址是:http://IP:9188/hastatus
listen admin_stats
    bind *:9188   #监听的地址和端口,默认端口1080
    mode http      #模式
    option tcplog
    stats refresh 5s    #页面自动刷新间隔,每隔5s刷新
    stats uri /hastatus  #访问路径,在域名后面添加/stats可以查看haproxy监控状态,默认为/haproxy?stats
    stats realm welcome login\ Haproxy  #提示信息,空格之前加\
    stats auth admin:123456  #登陆用户名和密码
    stats hide-version   #隐藏软件版本号
    stats admin if TRUE   #当通过认证才可管理
#-------------------------------------------------
frontend rabbitmq
    mode tcp
    bind *:5679
    timeout client 168h
    default_backend rabbitmq_nodes
    log global
    option tcplog
backend rabbitmq_nodes
    mode tcp
    balance roundrobin
    server rabbit1 80.31.102.15:5672 check inter 2000 rise 2 fall 3 weight 1  #节点一
    server rabbit2 80.31.102.18:5672 check inter 2000 rise 2 fall 3 weight 1  #节点二
    server rabbit3 80.31.102.22:5672 check inter 2000 rise 2 fall 3 weight 1  #节点三

#rabbitmq 集群配置
listen rabbitmq_admin 
    bind  0.0.0.0:15679
    mode http
    balance roundrobin
    server rabbit1 80.31.102.15:15672 check inter 2000 rise 2 fall 3 weight 1  #节点一
    server rabbit2 80.31.102.18:15672 check inter 2000 rise 2 fall 3 weight 1  #节点二
    server rabbit3 80.31.102.22:15672 check inter 2000 rise 2 fall 3 weight 1  #节点三

#启动
haproxy -f /Founder/haproxy/conf/haproxy.cfg
#查看端口及进程
lsof -i:9188

3.访问

  1. 使用google浏览器输入IP:15679即可访问rabbitmq集群服务,如下图所示:
    在这里插入图片描述
  2. IP:9188/hastatus,输入配置的用户名和密码即可访问haproxy监控界面,如下图所示:在这里插入图片描述
    3.HAproxy负载均衡配置已完成,再在80.85.6.6服务器上使用同样的操作安装haproxy软件,再配置haproxy.cfg配置文件。

Keepalived高可用

1.安装

#解压
tar -xvf	keepalived-2.1.5.tar.gz
#编译
cd	keepalived-2.1.5
./configure --prefix=/Founder/keepalived
#安装
make && make install

2.初始化及使用

#keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/
cp /Founder/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived
# 将keepalived主程序加入到环境变量(安装目录下)
cp /Founder/keepalived/sbin/keepalived /usr/sbin/keepalived

# 将配置文件放到默认路径下,keepalived最好使用root用户来启动管理
mkdir /etc/keepalived
cp /Founder/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

#加为系统服务
chkconfig –add keepalived
#开机自启动
chkconfig keepalived on

3.keepalived.conf配置文件说明
keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器是可选的。下面是楼主的主备节点配置文件模板:

global_defs {
    router_id LVS_DEVEL_A  #虚拟路由名称,不同主机名需设置不同主机名
}

#HAProxy健康检查配置
vrrp_script chk_haproxy {
    script "/etc/keepalived/keepalived.conf/scripts/haproxy_check.sh"  #使用haproxy_check.sh检查haproxy服务
    interval 2   #脚本运行周期
    weight 2   #每次检查的加权权重值
}

#虚拟路由配置
vrrp_instance haproxy {
    state MASTER           #本机实例状态,MASTER/BACKUP,备机配置文件中请写BACKUP
    interface eth0      #本机网卡名称,使用ifconfig命令查看
    virtual_router_id 51   #虚拟路由编号,主备机保持一致
    priority 100           #本机初始权重,备机请填写小于主机的值(例如100)
    advert_int 1           #争抢虚地址的周期,秒
    virtual_ipaddress {
        80.85.6.222      #虚地址IP,主备机保持一致
    }
    track_script {
        chk_haproxy        #对应的健康检查配置
    }
}
virtual_server 80.85.6.222 15679 {
	delay_loop 3
	lb_algo rr
	lb_kind DR
	persistence_timeout 50
	protocol TCP

	real_server 80.85.6.4 15679 {
	weight 1
	}
}
#BCAKUP节点配置文件
global_defs {
    router_id LVS_DEVEL_B  #虚拟路由名称,不同主机名需设置不同主机名
}

#HAProxy健康检查配置
vrrp_script chk_haproxy {
    script "/etc/keepalived/keepalived.conf/scripts/haproxy_check.sh"  #使用haproxy_check.sh检查haproxy服务
    interval 2   #脚本运行周期
    weight 2   #每次检查的加权权重值
}

#虚拟路由配置
vrrp_instance haproxy {
    state BACKUP           #本机实例状态,MASTER/BACKUP,备机配置文件中请写BACKUP
    interface eth0      #本机网卡名称,使用ifconfig命令查看
    virtual_router_id 51   #虚拟路由编号,主备机保持一致
    priority 50           #本机初始权重,备机请填写小于主机的值(例如50)
    advert_int 1           #争抢虚地址的周期,秒
    virtual_ipaddress {
        80.85.6.222      #虚地址IP,主备机保持一致
    }
    track_script {
        chk_haproxy        #对应的健康检查配置
    }
}
virtual_server 80.85.6.222 15679 {
	delay_loop 3
	lb_algo rr
	lb_kind DR
	persistence_timeout 50
	protocol TCP

	real_server 80.85.6.6 15679 {
	weight 1
	}
}

4.keepalived服务再搭配一个haproxy_check.sh脚本来检测haproxy服务正常,一旦服务异常则及时进行虚拟IP切换,避免出现脑裂的情况导致服务无法访问

#haproxy_check.sh脚本来检测haproxy服务是否正常运行,haproxy服务没有启动则尝试重新启动,如果启动失败则关闭keepalived服务。
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /Founder/haproxy-1.9.5/conf/haproxy.cfg
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi

5.keepalived服务启动

#keepalived启动
service keepalived start
#查看keepalived进程,keepalived一共存在3个进程
ps -ef | grep keepalived
#查看keepalived日志
tail -f -n 50 /var/log/messages 

4.MQ集群访问(虚拟IP)

  1. keepalived服务和haproxy服务启动存在一定的顺序,需要先启动主备节点的haproxy服务,再启动MASTER节点的keepalived服务,最后启动BACKUP节点的keepalived服务。重启haproxy服务之后需要重启keepalived服务,不然keepalived服务是无法感知到haproxy服务的恢复的。

  2. 查看虚拟IP是否正常。
    在这里插入图片描述

  3. 使用浏览器访问80.85.6.222:9188/hastatus即可访问haproxy监控界面,使用80.85.6.222:15679即可访问rabbitmq集群管理界面。
    在这里插入图片描述

5.容灾性测试

  1. 关闭MATER服务器的haproxy服务,查看虚拟IP是否漂移到BACKUP服务器,服务是否正常访问,恢复服务。
    在这里插入图片描述

  2. 关闭MATER服务器的keepalived服务,查看虚拟IP是否漂移到BACKUP服务器,服务是否正常访问,恢复服务。在这里插入图片描述

  3. 关闭Rabbitmq集群节点中的任意一个节点服务,查看服务是否可以正常访问,恢复节点服务。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
RabbitMQ是一个开源的消息队列软件,可以实现消息的发布和订阅。HAProxy是一个高可用负载均衡器,可以将请求分发到多个后端服务器上。Keepalived是一个用于实现高可用性的软件,可以监控服务器的状态并在主备切换时进行通知。 在搭建RabbitMQ高可用镜像模式集群时,可以使用HAProxyKeepalived实现负载均衡和故障切换。具体步骤如下: 1. 配置HAProxy:在HAProxy的配置文件中,可以指定RabbitMQ的节点和端口,并设置负载均衡策略。可以使用命令`haproxy -f /etc/haproxy/haproxy.cfg`启动HAProxy服务。 2. 配置Keepalived:在Keepalived的配置文件中,可以设置虚拟IP和监控脚本。Keepalived会监控RabbitMQ节点的状态,并在主节点故障时切换到备节点。可以使用命令`service keepalived start`启动Keepalived服务。 3. 验证高可用性:可以通过访问RabbitMQ管理平台和HAProxy监控统计平台的虚拟IP来验证高可用性。可以使用命令`curl http://172.22.40.1:35672/#/`访问RabbitMQ管理平台,使用命令`curl http://172.22.40.1:9188/admin_stats#`访问HAProxy监控统计平台。 总结来说,通过配置HAProxyKeepalived,可以实现RabbitMQ高可用性和负载均衡HAProxy负责将请求分发到多个RabbitMQ节点上,而Keepalived则负责监控节点的状态并在主备切换时进行通知。这样可以确保RabbitMQ集群的稳定性和可靠性。[1][2][3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值