rabbitmq系统学习(三)集群架构
RabbitMQ集群架构模式
主备模式
- 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单。主备模式也称为Warren模式
- HaProxy配置
listen rabbitmq_cluster
bind 0.0.0.0:5672 # 配置TCP模式
mode tcp #简单的轮询
balance roundrobin #主节点
server bhz76 192.168.11.76:5672 check inter 5000 rise 2 fall 3
server bhz77 192.168.11.77:5672 backup check inter 5000 rise 2 fall 3 # 备用节点
# 备注: rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查,2次正确证明服务器可用,3次失败证明服务器不可用,并且配置主备机制
远程模式
- 远程模式可以实现双活的一种模式,简称Shovel模式,所谓Shovel就是我们可以把消息进行不同数据中心的复制工作,我们可以跨地域的让两个mq集群互联
镜像模式(用的最多)
- 集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中用的最多。并且实现集群非常的简单
异地多活模式
- 实现异地数据复制的主流模式,需要依赖rabbitmq的federation插件
- 采用双中心模式,需要在两套或多套数据中心各部署一套RabbitMQ集群,各中心RabbitMQ服务除了需要为业务提供正常的消息服务外,中心之间还需要实现部分队列消息共享
安装
- /etc/hostname 取名
- 复制/var/lib/rabbitmq/.erlang.cookie 文件到每台服务器
- rabbitmq-server -detached
- rabbitmqctl stop_app
- rabbitmqctl join_cluster --ram rabbit@bhz76 #主机名,ram内存方式存储,模式磁盘方式
- rabbitmqctl start_app
- 移除节点 rabbitmqctl forget_cluster_node rabbit@bhz24
- 修改集群名称 rabbitmqctl set_cluster_name rabbitmq_cluster1
- 查看集群状态 rabbitmqctl cluster_status
Haproxy
- 高可用负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机。
- 单进程,时间驱动模型显著降低了上下文切换的开销以及内存占用
- 在任何可用的情况下,单缓冲机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存宽带
KeepAlived
- 通过VRRP协议实现高可用功能,VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,它的出现目的是为了解决静态路由单点故障问题,它能够保证党个别节点宕机时,整个网络可以不间断地运行,所以,Keepalived一方面具有配置管理LVS负载均衡的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能
延迟插件
消息的延迟推送、定时任务(消息)的执行。包括一些消息重试策略的配置使用,以及用于业务削峰限流、降级的异步延迟消息机制,都是延迟队列的实际应用场景
rabbitmq插件库地址
www.rabbitmq.com/community-plugins.html
- 下载插件rabbitmq_delayed_message_exchange
互联网大厂SET架构
BAT/TMD大厂单元化架构设计衍变
- 单个大型分布式体系的集群,通过加机器+集群内部拆分(kv/mq、Mysql等),虽然具备一定的可扩展性,但是随着业务量的进一步增长,整个集群规模逐渐变得巨大,从而会在某个点上达到瓶颈,无法满足扩展性需求,并且大集群内核心服务出现问题,会影响全网所有用户
- 如滴滴打车、美团外卖,订单量巨大,每天上2000w,会面临以下问题
- 容灾问题
- 资源扩展问题
- 大集群拆分问题
- 同城“双活”架构
- 两地三中心架构
- SET化方案目标
- 业务:解决业务遇到的扩展性和容灾等需求,支撑业务的高速发展
- 通用性:架构侧形成统一通用的解决方案,方便各业务接入使用
SET化架构策略
- SET化架构设计
- 流量路由
- 按照特殊的key(通常为userid)进行路由,判断某次请求该路由到中心集群还是单元化集群;
- 中心集群:
- 未进行单元化改造的服务(通常不在核心交易链路,比如供应链系统)称为中心集群,跟当前架构保持一致
- 单元化集群:
- 每个单元化集群只负责本单元内的流量处理,以实现流量拆分以及故障隔离
- 每个单元化集群,前期只储存本单元产生的交易数据,后续会做双向数据同步,实现容灾切换需求
- 中间件(RPC、KV、MQ等):
- RPC:对于SET服务,调用封闭在SET内;对于非SET服务,沿用现有路由逻辑
- KV:支持分SET的数据生产和查询
- MQ:支持分SET的消息生产和消费
- 数据同步:
- 全局数据(数据量小且变化不大,比如商家的菜品数据)部署在中心集群,其他单元化集群同步全局数据到本单元化内
- 未来演变为异地多活架构时,各单元化集群数据需要进行双向同步来实现容灾需要
- 集装箱式扩展
- SET的封装性支持更灵活的部署扩展性,比如SET一键创建/下线,SET一键发布等
- SET化架构图
未完待续...
rabbitmq系统学习(三)集群架构的更多相关文章
- RabbitMQ系列(六)你不知道的RabbitMQ集群架构全解
前言 本文将系统的介绍一下RabbitMQ集群架构的特点.异常处理.搭建和使用中要注意的一些细节. 知识点 一.为什么使用集群? 二.集群的特点 三.集群异常处理 四.集群节点类型 五.集群搭建方法 ...
- 关于RabbitMQ分布式集群架构
RabbitMQ分布式集群架构和高可用性(HA) (一) 功能和原理 设计集群的目的 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行 通过增加更多的节点来扩展消息通信的吞吐量 1 集群配 ...
- 【Kubernetes学习之三】Kubernetes分布式集群架构
环境 centos 7 一.Kubernetes分布式集群架构1.Kubernetes服务注册和服务发现问题怎么解决的?每个服务分配一个不变的虚拟IP+端口, 系统env环境变量里有每个服务的服务名称 ...
- RabbitMQ集群架构(HA)并结合.NET Core实操
一.前言 已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core.DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园 ...
- 集群架构和CentOS7安装RabbitMQ集群(单机版)
1. 集群架构 1.1 四种内部元数据 队列元数据.交换器元数据.绑定元数据.vhost元数据. 单一节点中:会将数据存储到内存,同时将持久化元数据保存到硬盘. 集群中: 存储到磁盘上.内存中. 集群 ...
- 搭建 RabbitMQ Server 高可用集群
阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...
- Galera Cluster——一种新型的高一致性MySQL集群架构
原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Clust ...
- 搭建 RabbitMQ Server 高可用集群【转】
阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...
- Memcached 集群架构方面的问题
* 集群架构方面的问题 o memcached是怎么工作的? o memcached最大的优势是什么? o memcached和MySQL的query cache相比,有什么优缺点? o memca ...
随机推荐
- excel上传下载
protected void Button1_Click(object sender, EventArgs e) { if (ViewState["unitname"] != nu ...
- ASP.NET Core 项目简单实现身份验证及鉴权
ASP.NET Core 身份验证及鉴权 目录 项目准备 身份验证 定义基本类型和接口 编写验证处理器 实现用户身份验证 权限鉴定 思路 编写过滤器类及相关接口 实现属性注入 实现用户权限鉴定 测试 ...
- 生信分析常用脚本(二)--SOAPdenovo
1.SOAPDenovo配置文件示例 软件下载安装和使用:http://soap.genomics.org.cn/soapdenovo.html asm.cfg #maximal read lengt ...
- C++ vector动态数组
#include<vector>头文件 vector类称作向量类 百度百科的解释:https://baike.baidu.com/item/vector/3330482 我喜欢把知识点拿出 ...
- AX_SysTableBrowser
sysTableBrowser sysTableBrowser = new sysTableBrowser(); ; sysTableBrowser.setAllowEdit(true); sy ...
- Quartz的自定义插件
quartz本身插件: LoggingJobHistoryPlugin,LoggingTriggerHistoryPlugin分别可以打印scheduler容器管理的所有triggers和jobDet ...
- PM学习梳理--建模型
- Chapter5_初始化与清理_成员初始化
在java中,成员初始化在使用之前应该都要保证已经完成初始化.对于在方法体中的局部变量,如果没有使用指定初始化的方法对成员变量进行初始化,编译器会提示一个错误.而对于类的数据成员,编译器会对这些成员赋 ...
- js 中 (function($){...})(jQuery) 含义
js中定义函数常用写法是 function name(arg){ //arg则是匿名函数的参数. //... } 调用函数时的写法是: name(arg); ===================== ...
- idea快捷键(后续更新)
自动补全当前行的标点符号 ctrl + shirt + 回车 跳到下一行 shirt +回车 复制一行 crtl + d 删除一行 ctrl + y 提示报错 alt + 回车 查看当前可以产什么参数 ...