使用Haproxy代理rabbitmq集群,用keepalive保证haproxy高可用
原文地址:https://www.jianshu.com/p/440b8e1d5339
使用Haproxy代理rabbitmq集群
上一篇文章教了rabbitmq集群搭建。但是这样搭建出来的集群是3个IP:port。客户端一般只会填写一个Ip端口,这个时候就需要有个服务器去代理3个rabbitmq服务。这个时候haproxy就派上用场了。
架构图如下:

HaProxy搭建
1、下载Haproxy tar包
https://www.haproxy.org/download/1.7/src/

下载haproxy-1.7.0.tar.gz
2、安装Haproxy
安装gcc包
yum install -y gcc
上传tar包
tar -xvf haproxy-1.7.0.tar.gz
安装
cd haproxy-1.7.0
sudo make TARGET=linux31 PREFIX=/usr/local/haproxy
sudo make install PREFIX=/usr/local/haproxy
cd /usr/local/haproxy
sudo vi haproxy-rabbitmq.cfg
填入如下配置
global
log 127.0.0.1 local1
log-tag haproxy
maxconn 4096
#user haproxy
#group haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
option http-server-close
listen admin
bind *:8008
mode http
stats uri /stats
frontend rabbitmq
mode tcp
bind *:5679
#把client的超时时间设置的长一点很重要,HAProxy默认是50秒,这样如果50秒还没有消息到来,HAProxy就会断开客户端,这是不合适的
timeout client 168h
default_backend rabbitmq_nodes
log global
option tcplog
option logasap
backend rabbitmq_nodes
mode tcp
balance roundrobin
timeout server 168h
server rabbit1 rabbit1:5672 check inter 1000 fall 3 rise 3
server rabbit2 rabbit2:5672 check inter 1000 fall 3 rise 3
server rabbit3 rabbit1:5672 check inter 1000 fall 3 rise 3
listen rabbitmq_admin
bind 0.0.0.0:15679
mode http
timeout server 168h
balance roundrobin
server rabbit1 rabbit1:15672 check inter 1000 fall 3 rise 3
server rabbit2 rabbit2:15672 check inter 1000 fall 3 rise 3
server rabbit3 rabbit3:15672 check inter 1000 fall 3 rise 3
3、配置与启动
./sbin/haproxy -f haproxy-rabbitmq.cfg
查看页面 ip:8008/stats查看haproxy的状态
查看页面 ip:15679查看rabbitmq的管理后台
客户端连接用ip:5672去连接
ps:ip是安装haproxy的机器的ip
使用Keepalived实现HAProxy高可用
尽管HAProxy非常稳定,但仍然无法规避操作系统故障、主机硬件故障、网络故障甚至断电带来的风险。所以必须对HAProxy实施高可用方案。
下文将介绍利用Keepalived实现的HAProxy热备方案。即两台主机上的两个HAProxy实例同时在线,其中权重较高的实例为MASTER,MASTER出现问题时,另一台实例自动接管所有流量。
原理
在两台HAProxy的主机上分别运行着一个Keepalived实例,这两个Keepalived争抢同一个虚IP地址,两个HAProxy也尝试去绑定这同一个虚IP地址上的端口。
显然,同时只能有一个Keepalived抢到这个虚IP,抢到了这个虚IP的Keepalived主机上的HAProxy便是当前的MASTER。
Keepalived内部维护一个权重值,权重值最高的Keepalived实例能够抢到虚IP。同时Keepalived会定期check本主机上的HAProxy状态,状态OK时权重值增加。
安装keepalived后结构图如下

安装keepalived
yum -y install openssl-devel
wget --no-check-certificate http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
tar -xzf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make &make install
注册为系统服务:
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
chmod +x /etc/init.d/keepalived
配置Keepalived
为了使用killall命令
yum install psmisc
mkdir -p /etc/keepalived/
vi /etc/keepalived/keepalived.conf
主机文件配置
global_defs {
router_id LVS_DEVEL #虚拟路由名称
}
#HAProxy健康检查配置
vrrp_script chk_haproxy {
script "killall -0 haproxy" #使用killall -0检查haproxy实例是否存在,性能高于ps命令
interval 2 #脚本运行周期
weight 2 #每次检查的加权权重值
}
#虚拟路由配置
vrrp_instance VI_1 {
state MASTER #本机实例状态,MASTER/BACKUP,备机配置文件中请写BACKUP
interface ens33 #本机网卡名称,使用ifconfig命令查看
virtual_router_id 51 #虚拟路由编号,主备机保持一致
priority 101 #本机初始权重,备机请填写小于主机的值(例如100)
advert_int 1 #争抢虚地址的周期,秒
virtual_ipaddress {
192.168.2.200 #虚地址IP,主备机保持一致
}
track_script {
chk_haproxy #对应的健康检查配置
}
}
副机文件配置
global_defs {
router_id LVS_DEVEL #虚拟路由名称
}
#HAProxy健康检查配置
vrrp_script chk_haproxy {
script "killall -0 haproxy" #使用killall -0检查haproxy实例是否存在,性能高于ps命令
interval 2 #脚本运行周期
weight 2 #每次检查的加权权重值
}
#虚拟路由配置
vrrp_instance VI_1 {
state BACKUP #本机实例状态,MASTER/BACKUP,备机配置文件中请写BACKUP
interface ens33 #本机网卡名称,使用ifconfig命令查看
virtual_router_id 51 #虚拟路由编号,主备机保持一致
priority 100 #本机初始权重,备机请填写小于主机的值(例如100)
advert_int 1 #争抢虚地址的周期,秒
virtual_ipaddress {
192.168.2.200 #虚地址IP,主备机保持一致
}
track_script {
chk_haproxy #对应的健康检查配置
}
}
启动
service keepalived start
验证
启动后,先分别在两台主机查看虚IP 192.168.8.201由谁持有,执行命令:
ip addr sh ens33 (将ens33替换成主机的网卡名)
访问192.168.2.200:8008/stats(自己配置的虚拟IP),192.168.2.200:15679(rabbitmq管理台)。
如果能访问,则可以使用192.168.2.200:5679作为rabbitmq的入口来使用。
使用Haproxy代理rabbitmq集群,用keepalive保证haproxy高可用的更多相关文章
- 用 HAproxy 搭建 RabbitMQ 集群
构建参考: [ Rabbitmq cluster setup with HAproxy ] [ python demo ] RabbitMQ Cluster 遇到的问题 python pika 作为c ...
- 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
- Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)
当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- Java集群优化——dubbo+zookeeper构建高可用分布式集群
不久前,我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容, ...
- 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试
一. zookeeper安装(集群):http://www.cnblogs.com/wangfajun/p/8692117.html √ 二. ActiveMq配置: 1. ActiveMq集群部署 ...
- Redis Cluster 集群三主三从高可用环境搭建
前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用. Window环境下载地址:https://github.com/tporadowski/redis ...
- centos7下用kubeadm安装k8s集群并使用ipvs做高可用方案
1.准备 1.1系统配置 在安装之前,需要先做如下准备.三台CentOS主机如下: 配置yum源(使用腾讯云的) 替换之前先备份旧配置 mv /etc/yum.repos.d/CentOS-Base. ...
- 解决 RabbitMQ 集群 Channel shutdown: connection error 错误(HAProxy 负载均衡)
相关文章:搭建 RabbitMQ Server 高可用集群 具体错误信息: 2018-05-04 11:21:48.116 ERROR 60848 --- [.168.0.202:8001] o.s. ...
随机推荐
- 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构
037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构 本文知识点:Java中的switch结构 选择结构分类 选择结构只有如下2种 ...
- 更改MySQL 5.7的数据库的存储位置
操作系统:Windows 10 x64 MySQL安装包版本:mysql-installer-community-5.7.17.0 参考:MySQL 5.7版本的安装使用详细教程+更改数据库data的 ...
- Elasticsearch(3):别名
ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处.别名是一个非常实用的功 ...
- 第一次使用HSDB
今天看了几篇大佬关于HSDB使用的文章,自己也依样画葫芦的用来一下,强大的一匹!!! HSDB(Hotspot Debugger),JDK自带的工具,用于查看JVM运行时的状态. HSDB位于C:\P ...
- Apache Hudi与Apache Flink集成
感谢王祥虎@wangxianghu 投稿 Apache Hudi是由Uber开发并开源的数据湖框架,它于2019年1月进入Apache孵化器孵化,次年5月份顺利毕业晋升为Apache顶级项目.是当前最 ...
- 多测师讲解接口测试 —jmeter接数据库(004)_高级讲师肖sir
1.连接数据库jar包 2. 3. jdbc:mysql://192.168.153.131:3306/baoan?zeroDateTimeBehavior=convertToNull&all ...
- 多测师讲解selenium--常用关键字归纳-_高级讲师肖sir
常见的定位方式: 1.通过id定位 id=kw 2.通过name定位 name=wd 3.通过xpath相对路径定位:xpath=//*[@id="kw"] 4.通过两个属性值定位 ...
- 多测师讲解_肖sir _rf报错归纳(1):
错误一: 报错原因:文件格式 解决方案: 修改文件格式,将txt改成robot格式 错误二: rf 运行以后出现乱码现象 解决方案: 打开python的安装路径下:C:\python37\Lib\ ...
- 扫描仪扫描文件处理-ABBYY生成小体积黑白二值化PDF
禁止所有预处理选项: PDF保存选项: 保存提示(选择"保存为仅图像PDF"):
- 集训DP复习整理
DP复习 集训%你赛2:测绘(审题DP) 经过2000+个小时的努力终于把这道题做出来的蒟蒻通 分析: 这道题我一直没做出来的原因就是因为我太蒟了题面看不懂,题面读懂了,其实不是特别难. 题目翻译: ...