原文地址: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高可用的更多相关文章

  1. 用 HAproxy 搭建 RabbitMQ 集群

    构建参考: [ Rabbitmq cluster setup with HAproxy ] [ python demo ] RabbitMQ Cluster 遇到的问题 python pika 作为c ...

  2. 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  3. Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)

    当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...

  4. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  5. Java集群优化——dubbo+zookeeper构建高可用分布式集群

    不久前,我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容, ...

  6. 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试

    一. zookeeper安装(集群):http://www.cnblogs.com/wangfajun/p/8692117.html  √ 二. ActiveMq配置: 1. ActiveMq集群部署 ...

  7. Redis Cluster 集群三主三从高可用环境搭建

    前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用. Window环境下载地址:https://github.com/tporadowski/redis ...

  8. centos7下用kubeadm安装k8s集群并使用ipvs做高可用方案

    1.准备 1.1系统配置 在安装之前,需要先做如下准备.三台CentOS主机如下: 配置yum源(使用腾讯云的) 替换之前先备份旧配置 mv /etc/yum.repos.d/CentOS-Base. ...

  9. 解决 RabbitMQ 集群 Channel shutdown: connection error 错误(HAProxy 负载均衡)

    相关文章:搭建 RabbitMQ Server 高可用集群 具体错误信息: 2018-05-04 11:21:48.116 ERROR 60848 --- [.168.0.202:8001] o.s. ...

随机推荐

  1. 请编写sql多语句表值函数统,计指定年份中每本书的销售总额

    create table 图书表( 书号 varchar(50), 书名 varchar(50), 单价 int ) create table 销售表( 书号 varchar(50), 销售时间 da ...

  2. 009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量?

    009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量? 什么是变量? 形象化的生活中的例子理解什么是变量以及变量的三个元素 我们可以根据客人要求 ...

  3. Matlab中imagesc用法

    来源:https://ww2.mathworks.cn/help/matlab/ref/imagesc.html?searchHighlight=imagesc&s_tid=doc_srcht ...

  4. P1527 [国家集训队]矩阵乘法(整体二分)

    Link 整体二分的经典例题. 对于整体二分,我个人的理解是二分答案套分治. 具体来说就是对答案进行二分,然后对于询问进行类似于权值线段树求区间第 \(k\) 大的分治做法. 首先,我们暴力做法就是对 ...

  5. Python 疑难问题:[] 与 list() 哪个快?为什么快?快多少呢?

    本文出自"Python为什么"系列,请查看全部文章 在日常使用 Python 时,我们经常需要创建一个列表,相信大家都很熟练了吧? # 方法一:使用成对的方括号语法 list_a ...

  6. 多测师讲解接口 _需求文档(用户增删改查)_高级讲师肖sir

    首先连接Duoceshi_new网络 密码为Duoceshi_new,因为接口项目部署在Duoceshi_new网段中. 测试工具:postman域名:http://192.168.1.2:8081/ ...

  7. 【C++学习笔记】C++经典十二道笔试题!你能做出几道?

    1. 运行下面的C++代码,得到的结果是什么? #include "stdafx.h" #include<iostream> using namespace std; ...

  8. docker的常用操作之三:网络配置

    一, docker安装后容器使用哪些网络类型? 在宿主机执行如下命令: [root@localhost liuhongdi]# docker network ls NETWORK ID NAME DR ...

  9. centos8平台使用journalctl管理systemd-journald日志

    一,systemd-journald的作用 1,什么是systemd-journald? systemd-journald 是 systemd 自带的日志系统,是一个收集并存储各类日志数据的系统服务. ...

  10. ansible使用script模块在受控机上执行脚本(ansible2.9.5)

    一,ansible的script模块的用途 script 模块用来在远程主机上执行 ansible 管理主机上的脚本, 即:脚本一直存在于 ansible 管理主机本地, 不需要手动拷贝到远程主机后再 ...