高可用

云上RDS架构

淺唱寂寞╮ 提交于 2019-11-27 17:53:37
概述 越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而是直接向云厂商购买虚拟主机服务ECS(Elastic Compute Service),按时按量付费。对于数据库而言,将数据库能力集成进来,就是DaaS(Database as a Service)服务,我这里主要讨论RDS(Relational Database Service)。因为目前主流云厂商在数据库领域,除了基础的RDS服务,还有新型分布式数据库服务,比如Amazon的Aurora,阿里云的PolarDB等。 所以对于用户而言,他们选择在云上使用数据有两种方式,一种是自己买ECS,自己搭建数据库服务;另外一种方式是,直接购买RDS服务。本文主要讨论RDS的链路,RDS链路中的核心组件SLB转发模式,以及RDS中proxy的作用,最后还会提到RDS的高可用解决方案。 RDS链路 1. app+ECS(DB)自建 2. app+lvs+DB 简单说明下,云上并不提供单独买一个RDS的服务,因为这种场景无法提供高可用能力,所以一般购买数据库服务时,会同时带上SLB作为一套整体解决方案。 SLB本质就是基于LVS的改进,LVS工作在IOS七层网络模型的TCP/IP层,属于4层负载均衡。利用IP

Ubuntu10.04.4 Server下基于LVS DR模式+Keepalived的负载均衡高可用

南楼画角 提交于 2019-11-27 13:18:23
Ubuntu10.04.4 Server下基于LVS DR模式+Keepalived的负载均衡高可用集群 LVS+Keepalived 介绍 2 LVS 2 Keepalvied 2 ubuntu系统环境准备工作 2 更换Ubuntu软件源 2 架构拓扑图 2 服务安装 3 安装LVS 3 安装Keepalived 3 服务配置 4 配置LVS实现负载均衡 4 LVS Server 4 Real Server 4 测试LVS 5 配置keepalived实现高可用 5 LVS Server 5 测试keepalived 6 附录A lvs参数简介 6 LVS+Keepalived 介绍 申明:这只是我照着网络上的相关技术文档做实验后的整理 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR); 十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。 Keepalvied Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现

MySQL DNS(Consul) 高可用演示

[亡魂溺海] 提交于 2019-11-27 13:13:28
MySQL 高可用 Replication / 半同步 (5.7+) MGR PXC (不太建议) 其他都是异端 基于VIP的高可用   需要额外的资源     keepalived (VRRP)     MHA 一个实际的IP (基于TCP方式的)   限制     VIP 必须在一个局域网中     比较难跨IDC实现 DNS   把记录存储到数据库中 (MySQL)   连接串信息    host: xxx.xxx.net    port: 3306    user: xxxx    password: xxxxxxxx    dbname: xxx   原始一点:     Bind-DLZ       可控制度更好 (查询DNS记录SQL可定制)       据说性能非常差     PowerDNS       SQL schema设置规范       性能比Bind-DLZ 好   New DNS     coredns (和k8s结合笔记多)   集大成者     nacos (阿里开源,含DNS和服务发现) consul   服务发现类     早期:zookeeper     现在:etcd (k8s结合比较紧), consul     综合性的: nacos (阿里开源)   consul的优势:     支持多数据中心,内外网的服务采用不同的端口进行监听。   

如何提高阿里云上应用的可用性(二)

一曲冷凌霜 提交于 2019-11-27 13:00:08
这是如何提高阿里云上应用的可用性系列文章的第二篇, 第一篇传送门 。 在单体应用时代,最大的问题是如何解决数据库瓶颈,而微服务之下,一个大应用被拆分成了几十个甚至上百个微服务,数据访问的压力被传导到了服务之间的网络,服务强弱依赖,服务雪崩等各种问题随之而来,那么如何保障服务的可用性以及整个应用的健壮性呢?常见的做法包括: 超时 程序员和女朋友约会在楼下等她的时候一般都会约定 “等你30分钟啊”, 这就是一种超时约定,如果等了半小时女朋友还没有下来,该怎么办?一般有服务治理意识的程序员都会选择超时退出及时止损(不知道这是不是程序员没有女朋友的原因之一) 在应用设计中,为避免集群雪崩或资源耗尽,一切调用都应该设置超时时间,包括RPC/DB/缓存,服务端超时是必选配置。在实际的电商实际场景中,一般服务级别的超时时间通常会设置在100ms~300ms之间。 超时的设定需要注意一个问题就是超时的传递问题, 假设服务A调用服务B,A的超时设定为100ms,B为300ms,那么这个设定就是有问题,因为一旦B的调用时间超过了100ms,A无论如何都会超时,而B的继续调用就会成为一种资源浪费,而在特别复杂的服务依赖关系中,超时的设定一定要考虑传递的问题 重试 当程序员给喜欢的女孩子表白被拒绝了怎么办,一般可以做出万分痛苦状接一句“要不要再考虑一下”,这就是一种重试,在服务调用中

实录|互联网架构“高可用”在线技术交流

只谈情不闲聊 提交于 2019-11-27 12:40:24
原创 2016-12-06 58沈剑+GitChat 架构师之路 架构师之路 架构师之路 微信号 功能介绍 架构师之路,坚持撰写接地气的架构文章 前段时间,受@谢工 邀请,在GitChat平台首发《 究竟啥才是互联网架构“高可用” 》。 12月01日周四晚8点30分,在微信群进行了针对该文章的的主题交流。以下是主持人 @赫阳 整理的问题精华,记录下了我和读者之间关于高可用架构的问答精彩片段。 问答中所有文章都是可以直接点击跳转的哟。 问:在缓存层rehash过程中必然会有脏数据。一致性hash实际上只能减少rehash的成本,不能消灭脏数据,这种脏数据有没有办法避免? 答:如文章《 究竟啥才是互联网架构“高可用” 》所述,如果没有高可用需求,一台 cache 挂了,不宜做rehash,会产生脏数据。此时对挂掉cache的key可以直接返回 cache miss。 问:从您后面的回答来看,这其实也是“降级”的一种,这样以后是直接把请求打到后端的数据库上么?还是直接抛弃请求?如果发生雪崩效应,miss的请求越来越多,如果miss的都打库的话,库马上就会挂了。 这一块老师能再展开讲一讲么? 答:打到数据库上,cache集群的份数和数据库能抗多少读有关。理论上1-2份挂掉,数据库能抗住。58的做法,有一个 backup mc集群,有挂了可以顶上,不建议rehash。高可用的代价是冗余

阿里秋招面试真题解析:如何保证消息队列是高可用的?

点点圈 提交于 2019-11-27 12:27:43
面试题分析:引入消息队列后,系统的可用性下降。在生产中,没人使用单机模式的消息队列。 因此,作为一个合格的程序员,应该对消息队列的高可用有很深刻的了解。 如果面试的时候,面试官问,你们的消息中间件如何保证高可用的? 如果你的回答只是表明自己只会订阅和发布消息,面试官就会怀疑你是不是只是自己搭着玩,压根没在生产用过。 因此,请做一个爱思考,会思考,懂思考的程序员。 回答:这问题,其实要对消息队列的集群模式要有深刻了解,才好回答。 以rcoketMQ为例,他的集群就有多master 模式、多master多slave异步复制模式、多 master多slave同步双写模式。 多master多slave模式部署架构图(网上找的,偷个懒,懒得画): 其实博主第一眼看到这个图,就觉得和kafka好像,只是NameServer集群,在kafka中是用zookeeper代替,都是用来保存和发现master和slave用的。 通信过程如下: Producer 与 NameServer集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Broker Master 建立长连接,且定时向 Broker 发送心跳。 Producer 只能将消息发送到 Broker master,但是 Consumer 则不一样,它同时和提供

MySQL高可用架构-MHA环境部署记录

穿精又带淫゛_ 提交于 2019-11-27 11:32:14
一、MHA介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是日本的一位 MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQLReplication(二层)环境,目的在于维持Master主库的高可用性。是一套优秀的作为MySQL高可用性 环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上 保证数据的一致性,以达到真正意义上的高可用。 MHA是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。 1)MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Manager会定时探测集群中的node节点,当发现master 出现故障的时候,它可以自动将具有最新数据的slave提升为新的master

MySQL高可用架构-MHA环境部署记录

微笑、不失礼 提交于 2019-11-27 11:29:47
一、MHA介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是日本的一位 MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQLReplication(二层)环境,目的在于维持Master主库的高可用性。是一套优秀的作为MySQL高可用性 环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上 保证数据的一致性,以达到真正意义上的高可用。 MHA是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。 1)MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Manager会定时探测集群中的node节点,当发现master 出现故障的时候,它可以自动将具有最新数据的slave提升为新的master,然后将所有其它的slave导向新的master上.整个故障转移过程对应用程序是透明的。 2)MHA

MQ消息队列

纵然是瞬间 提交于 2019-11-27 09:52:40
大家平时也有用到一些消息中间件(MQ),但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。 对MQ更加深入的问题,可能很多人没怎么思考过。 比如,你跳槽面试时,如果面试官看到你简历上写了,熟练掌握消息中间件,那么很可能给你发起如下 4 个面试连环炮! 为什么要使用MQ? 使用了MQ之后有什么优缺点? 怎么保证MQ消息不丢失? 怎么保证MQ的高可用性? 本文将通过一些场景,配合着通俗易懂的语言和多张手绘彩图,讨论一下这些问题。 为什么要使用MQ? 相信大家也听过这样的一句话:好的架构不是设计出来的,是演进出来的。 这句话在引入MQ的场景同样适用,使用MQ必定有其道理,是用来解决实际问题的。而不是看见别人用了,我也用着玩儿一下。 其实使用MQ的场景有挺多的,但是比较核心的有3个: 异步、解耦、削峰填谷 异步 我们通过实际案例说明:假设A系统接收一个请求,需要在自己本地写库执行SQL,然后需要调用BCD三个系统的接口。 假设自己本地写库要3ms,调用BCD三个系统分别要300ms、450ms、200ms。 那么最终请求总延时是3 + 300 + 450 + 200 = 953ms,接近1s,可能用户会感觉太慢了。 此时整个系统大概是这样的: 但是一旦使用了MQ之后,系统A只需要发送3条消息到MQ中的3个消息队列,然后就返回给用户了。 假设发送消息到MQ中耗时20ms

服务器状态监测 Keepalived

雨燕双飞 提交于 2019-11-27 09:42:03
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器 发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。 Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动