高可用

软件架构杂谈(二) --- Cluster (HA)

心已入冬 提交于 2020-03-26 17:04:19
3 月,跳不动了?>>> 浅谈软件架构 ( 二 ) cnyinlinux 之前发布过的博文,已经对 C/S 和 B/S 作了讨论,本文将讨论的是集群— Cluster 。 1. C/S 2. B/S 3. Cluster (HA) 4. Cloud 5. Distributed 6. APNS-like 7. P2P 集群的技术是近年来计算机应用大规模普及,以及性能要求逐渐提高的形势下提出来的。简而言之,集群就是一批独立计算机联合运作处理某一高要求任务的技术。其建立在网络互连的基础上,核心是节点间任务分配——调度算法。 集群有几个显著特点: A .提高性能 B .降低成本 C .高扩展性 D .高可靠性 集群与分布式的功能还是有区别的,关于分布式架构在别文讨论。 从应用场景和特性分为以下几种,本文将分别介绍各自特点。 1 )双机热备(高可用 HA ) 2 )科学集群 3 )负载均衡 一,双机热备,也被叫做高可用集群 (HA) 。这种方式也称为集群。它指的是具备同样功能且数据共享的多台机器之间构成相互备份的物理结构,每一时刻对外提供业务的机器只有 1 台,其他多台构成它的备份,若业务机出现故障,其他备份机立马接管任务,对外而言丝毫感受不到业务主机的故障。这样维修人员可以立马修复故障机,修好后成为新的备份机。这样就构成了相互备份的小集团,极大提高了实时业务的可靠性。

Cloud DB for MySQL High Availability Overview

我的未来我决定 提交于 2020-03-26 01:48:26
云数据库 MySQL(Cloud DB for MySQL)是让用户可以轻松在云端部署、使用 MySQL 数据库。通过云数据库 MySQL,你不但可以在几分钟内即可部署MySQL 数据库实例,而且可以弹性调整硬件容量的大小而无需停机。另外云数据库 MySQL 提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,简化了IT 运维工作。 对于承载核心业务的数据库,大家最关心的是它的高可用性。业界用 N 个9 来量化可用性,目前云数据库MySQL高可用版实例,可用性能够达到99.95%. 云数据库 MySQL高可用版实例采用一主一备或一主两备的高可用模式,也是基于数据复制模式,无共享存储,通过数据复制协议达到主机和备机数据一致性,并且提供宕机自动检测和故障自动转移,主备切换和故障迁移过程对用户透明,数据节点部署在强大硬件之上,底层存储使用本地 PCI-e SSD 硬盘,提供强大的 IO 性能。 Cloud for MySQL 也提供了异步、半同步、强同步三种复制方式。强同步复制方式能最大限度的保障主从数据的一致性。云数据库 MySQL 高可用版本的强同步复制采用一主两备的架构,仅需其中一台 Slave 成功执行即可返回,避免了单台 Slave 不可用影响 Master 上操作的问题,也提高了强同步复制集群的可用性。 另外,高可用版支持企业级的高可用特性,比如只读实例

赶考状元:如何快速应对数据库QPS暴涨20倍?我们做了三次决策

女生的网名这么多〃 提交于 2020-03-26 01:42:29
受疫情影响,全国各学校的开学均被延期。为避免耽误学生的课业,教育部推出了“停课不停学”政策,鼓励师生积极开展线上教学模式。 赶考状元(上海亿山睦教育科技有限公司)为此积极响应政府号召,向湖北全省一年级到高三的学子免费开放教材的同步在线教学课程,后来进一步扩大至全国范围。这一公益活动获得了很大反响,网站用户注册量和浏览量超过平时数倍。 虽然活动从策划到上线总共只有4天时间,赶考网技术团队通过科学决策,及时精密的实施,完成了业务代码改造、架构评估、扩容升级、SQL优化等工作,期间也和UCloud UDB团队紧密合作,在其协助下实现了数据库的架构改造和扩容,很好地承接了QPS暴涨20倍的访问压力,圆满完成技术保障任务。 下面分享一些我们在此过程中的细节和思考,供有快速扩容需要的企业参考。 面临的业务痛点 公司自2005年成立一直专注于K12在线教育,此次疫情公益活动构想阶段,业务侧运用此前超过十年的互联网及线下教育经验,快速设计了有效可行的方案,在不少细节上下了功夫,例如加速审核通道,只需两步即可学习的易用性,面向家长推广的二维码等。 技术团队的任务则是提前预判后台流量的迅猛增长,未雨绸缪设计行之有效的预案,查漏补缺,切实保障活动顺利流畅运行。为此我们细致梳理了现有架构的薄弱点,并相应制定了精准有效的扩容方案。 由于我们原先的扩容是稳定慢节奏的,这次预见到了大量访问需求

Multi-thread Asynchronous Replication MAR强同步复制方案介绍

筅森魡賤 提交于 2020-03-26 01:41:10
MAR 强同步复制方案是基于 MySQL 协议的异步多线程强同步复制方案,只有当备机数据完全同步后,才由主机给予应用事务应答,保障数据不丢失。 数据库作为系统数据存储和服务的核心能力,其可用性要求非常高。在生产系统中,通常都需要用高可用方案来保证系统不间断运行,而数据同步技术是数据库高可用方案的基础。MySQL的数据复制默认是异步复制,但异步复制对于核心交易业务场景下,要求数据强一致性是不够的。 Google提供了一个半同步插件,确保必须收到一个备机的应答才让事务在主机中提交,但是当备机应答超时的情况下,半同步复制会由超时时间退化为异步,这在金融场景下风险是比较大的。按照CAP的原理,宁愿牺牲一定的可用性也不愿意把数据丢失,假设备机异常了,退化为异步了,主机继续交易。如果此时主机再发生故障,数据库层面很可能出现数据丢失,一旦数据库层面出现数据丢失,事后要去修复是非常困难的,所以这种时候我们是不让它退化,继续强同步(可能交易失败)。所以在复制这块,我们主要是去解决这两个问题。刚才讲的,而且半同步复制在跨IDC情况下性能也会有问题的。 基于MySQL协议的异步多线程强同步复制方案(Multi-thread Asynchronous Replication 简称MAR),一主两备的高可用,这两个备机是都做强同步复制的,只有当备机数据同步后,才由主机向应用返回事务应答,能够保证数据不丢不错

kafka的高可用和一致性探究

吃可爱长大的小学妹 提交于 2020-03-25 12:24:44
3 月,跳不动了?>>> 1 kafka基础 本篇文章讨论的kafka版本是目前最新版 0.10.1.0。 1.1 kafka种的KafkaController 所有broker会通过ZooKeeper选举出一个作为KafkaController,来负责: 监控所有broker的存活,以及向他们发送相关的执行命令。 分区的状态维护:负责分区的新增、下线等,分区副本的leader选举 副本的状态维护:负责副本的新增、下线等 1.2 kafka分区中的基本概念 每个分区可以有多个副本,分散在不同的broker上。 leader副本:被KafkaController选举出来的,作为该分区的leader 其他follower副本:其他副本都作为follower副本 isr列表:简单描述就是,"跟得上"leader的副本列表(包含leader),最开始是所有副本。这里的跟得上是指 replica.lag.time.max.ms:在0.9.0.0之前表示follower如果在此时间间隔内没有向leader发送fetch请求,则该follower就会被剔除isr列表,在0.9.0.0之后表示如果该follower在此时间间隔内一直没有追上过leader的所有消息,则该follower就会被剔除isr列表 replica.lag.max.messages(0.9.0.0版本中已被废除)

【巨杉数据库SequoiaDB】巨杉 Tech | SequoiaDB SQL实例高可用负载均衡实践

不羁岁月 提交于 2020-03-25 00:59:08
1 前言 在应用程序中,应用配置连接的数据库IP地址和端口号都是固定一个的,当所属IP地址的服务器宕机后,需要人为手工更改IP地址切换数据库服务器。同时当应用接收到成千上万的并发 http 请求时,会导致服务器消耗大量系统资源,轻则响应速度降低,严重的甚至会引发宕机。 为了充分合理的利用服务器资源,提高数据服务的性能和稳定性,在较低成本的前提下,保证在部分服务器宕机或发生故障的情况下不影响业务的正常运作。本文主要介绍 Nginx+Keepalived 连接 SequoiaDB -MySQL 实例的高可用方案与实践。 2 SequoiaDB 数据库介绍 SequoiaDB 巨杉数据库是一款完全自研的金融级分布式数据库产品,采用计算与存储分离架构,由数据库实例层和数据库存储引擎层组成。数据库实例层负责解析请求并转发至数据库存储引擎层处理,同时会将数据库存储引擎层的响应结果反馈给应用层,数据库实例层支持包括针对结构化数据的 MySQL 实例、PostgreSQL 实例、SparkSQL 实例,以及针对非结构化数据的 S3 和 PosixFS 文件系统的对象存储实例实例,而数据库存储引擎层是由 SequoiaDB 巨杉数据库的协调节点、编目节点和数据节点组成。该数据库集群架构能方便用户实现由传统数据库到巨杉数据库的无缝迁移,减少应用开发者的开发和学习成本。 2.1 SequoiaDB

初识Redis

五迷三道 提交于 2020-03-24 15:48:00
初识Redis NoSQL是什么? 数据库: 用来存储数据的仓库 NoSQL: 不仅仅是SQL,是许多非关系型数据库的统称,但本质上还是存储数据的仓库 为什么需要NoSQL? 解决了高并发的读写问题 解决了海量数据的高效率存储和访问问题 实现了高可用性及高可扩展性 Redis是什么? 是由C语言开发的一款开源的、高性能的键值对存储数据库。 它支持多种键值数据类型。包括字符串、列表、集合、散列、有序集合等。它内置复制、Lua脚本、LRU收回、事务及不同级别磁盘持久化功能,同时通过Redis Sentinel实现高可用,Redis Cluster提供自动分区等相关功能。 Redis的特性 支持多种语言。c、java、c++等 丰富的数据类型 多种数据结构,如哈希、集合、位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有12kb,因而有误差)、GEO(地理位置信息) 读写速度快,性能高。官方给出的数据是:Redis 能读的速度是 110 000 次/s,写的速度是 81 000 次/s。之所以有这么快的读/写速度,是因为这些数据都存储在内存中。 支持持久化。Redis 的持久化也就是备份数据,它每隔一段时间就将内存中的数据保存在磁盘中,在重启的时候会再次加载到内存中,从而实现数据持久化。Redis 的持久化方式是 RDB 和 AOF。 简单且功能强大

Spring该如何整合Redis集群

笑着哭i 提交于 2020-03-24 14:52:19
3 月,跳不动了?>>> 前言:在上一文中,我讲到了--- 如何搭建redis集群---让集群拥有分片的数据内存的扩容和哨兵的高可用 。今天给大家讲解一下Spring如何整合Redis集群 在这里首先给大家说一说 分片和哨兵的特点 : 1.分片的主要的作用 实现内存数据的扩容 2.哨兵主要的作用,可以实现redis的高可用. 3.如果redis分片中有一个redis节点宕机,则整个redis分片将不能正常运行. 4.Redis哨兵虽然可以实现Redis的高可用,但是哨兵本身没办法实现高可用,程序调用存在风险. 而集群确包含了分片和哨兵的两者的优点,既实现了内存数据的扩容,也实现了redis的高可用,而且集群确保了一个或一定数量的redis宕机,也能够让程序正常的运行,这也是为什么我们运用的集群,而不是分片或哨兵。 --------废话有点多啊,下面进入今天的主题 1.Spring整合Redis集群 1.1在linux系统上开启redis集群 --- sh start.sh 之后 ps -ef |grep redis 检测所有的redis服务器是否开启 1.2添加redis依赖(如若之前添加了,跳过此) <!--spring整合redis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis<

高可用网站多点部署架构实战经验总结

落花浮王杯 提交于 2020-03-24 06:27:42
本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记,一部分是个人经验总结。对大型分布式网站架构有很好的参考价值。 一、大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费服务,付费体验 二、大型网站架构目标 高性能:提供快速的访问体验。 高可用:网站服务一直可以正常访问。 可伸缩:通过硬件增加/减少,提高/降低处理能力。 安全性:提供网站安全访问和数据加密,安全存储等策略。 扩展性:方便的通过新增/移除方式,增加/减少新的功能/模块。 敏捷性:随需应变,快速响应; 三、大型网站架构模式 分层:一般可分为,应用层,服务层,数据层,管理层,分析层; 分割:一般按照业务/模块/功能特点进行划分,比如应用层分为首页,用户中心。 分布式:将应用分开部署(比如多台物理机),通过远程调用协同工作。 集群:一个应用/模块/功能部署多份(如:多台物理机),通过负载均衡共同提供对外访问。 缓存:将数据放在距离应用或用户最近的位置,加快访问速度。 异步:将同步的操作异步化。客户端发出请求,不等待服务端响应,等服务端处理完毕后,使用通知或轮询的方式告知请求方。一般指:请求——响应——通知 模式。 冗余

k8s高可用环境部署系统准备

巧了我就是萌 提交于 2020-03-23 18:24:04
说明 这里使用 VMware 创建三台master节点机器,一台node节点。虚拟机的创建过程由于不是本节的重点,所以不再叙述。三台机器具体信息如下: master节点1: 192.168.246.193 主机名:master01 master节点2: 192.168.246.194 主机名:master02 master节点3: 192.168.246.195 主机名:master03 Node节点1: 192.168.246.196 主机名:node01 固定虚拟机IP并能正常访问网络 四台机器均是如下操作步骤: 主机IP分别是:192.168.246.193/194/195/196 #虚拟机网络选择 网络适配器 --> NAT #更改虚拟机网络配置文件 cd /etc/sysconfig/network-scripts cat > ifcfg-ens33 << EOF TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy