已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可架构设计方案 高可用( 两种不同的含义,在广义环境中,是指整个系统的高可用特性,在狭义方面,一般指主机的冗余接管,如主机 们目前的产品及相关系统平台主要都倾向于广义上的高可用。一个良好的高可用环境,不仅仅能避免系统本身的问题,还能防止天灾人祸,并且有一个简单可靠的系统维护方法,同时能在最小的成本资源下产生最大的效益。 高可用的计算方法一般以年在线率来计算,例如规定整个系统一年之中的可用环境要达到 那么 24*365*( = 时(包括计划内维护时间)。另外,子系统的可用性一定会高于整个系统的可用性,如整个系统的可用性为 则对于子系统,可用性可能就是要求达到 可用性级别 = 计划外与计划内停机可用性级别99 . 999 %每年停机时间99 . 99 %99 . 9 %99 . 0 %95 . 0 %5 分钟53 分钟8 . 8 小时87 . 6 小时438 小时图 2可用级别对照表 在实际产品开发中,很难达到 100%的在线能力,即使真的达到,代价会非常大。 一般能达到 上的可用性的环境,都可以认为是比较高的可用环境 。 成 本在 线 率业 务 中 断 损 失高 可 用 环 境 成 本9 9 . 0 % 9 9 . 9 % 9 9 . 9 5 % 9 9 . 9 9 % 9 9 . 9 9 9 %图 2益与成本 在 公司收益与投入成本计算方面取得一个平衡,则是最终所希望的在线效率,但是收益与成本的计算方法则是决策者与实施者需要着重考虑的问题,适合自己的高可用环境即是最好的,不能盲目地追逐过高的可用性。 在一个高可用的环境中,会遇到各种风险,主要的风险如下 系统失败或崩溃 ( 应用层或中间层错误 ( 网络失败 ( 介质失效,一般指存放数据的媒体介质故障 ( 人为失误 ( 分级与容灾 ( 计划宕机与维护 ( 使用 C 服务器来构建高可用的 群会遇到一些主要的问题,这些问题如果忽略了或者没有去解决好,是会对高可用造成影响的,设置直接影响到整个产品及系统的稳定运行。 丢数据吗 身的稳定性怎么样 性能怎么样 何快速自动切换 何进行可靠的容灾 备库数据的一致性校验 库同步延迟,备库跟不上主库 线 表(阻塞写)怎么解决 相比商业软件成熟的解决方案, C 架构其高可用性如何保证 3. 据可靠性 例 会不会丢数据 务器 (比如断电、 存损坏等)会不会丢数据 硬盘坏掉会不会丢数据 说明: 数据更多地是指, 用 务器, 务器存在硬件损坏的可能性(比如 存、硬盘坏掉),从而导致丢数据。 1、传统思路 共享存储 2、非共享存储思路 可以分开对 应用两个方面进行一定的设置和处理,相当于是双保险的方式,使数据不丢失。 对于 设置 1 设置为 1:每个事务日志都 磁盘 设置为 2:每个事务刷到 ,每秒 磁盘 设置 1 设置为 0:事务提交后, 做 类的磁盘同步命令刷新 的数据到磁盘,而让文件系统自行决定什么时候同步,或 了 后才同步到磁盘。 设置为 1:事务提交后, 将 的数据强制写入磁盘,是最安 全的设置。 设置 设置为 1:是否支持分布式事务(默认是打开) 设置为 0:不支持分布式事务 如果确认应用中不需要使用分布式事务,可关闭该参数 程 过 保证数据不丢失, 时传送到远程 果主备库之间的网络较好的话,一般的(依赖于 备库的时间基本上在毫秒之内。 半同步复制( 半同步复制总体上可以保证数据的零丢失,但是可能对性能会有少许影响,会造成约 20%的 降。 说明: 1、 个参数的设置在保证数据安全性和可靠性的同时,对性能是有一定的牺牲的。 为 0 时,性能比其中一个设置为 1 高出约几百倍; 为 1 时,性能比其中一个设置为 1 相差约几倍; 0 和 1 时的系统写入性能差距 可能会达到 5 倍或更多 对于应用 应用双写(写两份) 应用将同一记录写两份到不同的库中 应用通过记录 实现 可以通过应用程序( C+)自己写独立的日志来记录数据,也可以通过开源的消息中间件来实现日志记录。 4. 据一致性 库异常 ,会导致主备库之间的数据不一致 备切换后,备库成为主库,数据存在不一致 逻辑复制理论上是有风险的,极端情况下可能存在主备数据不一致 设置 1 设置 1 设置 半同步复制( 主备库尽量采用 式复制,不要采用 式复制 主备库定期数据一致性校验 数据生命周期内的 量保存下来 机后,有三个选择 即提供服务,存在数据不一致风险 提供服务,等待 复,保证数据一致 供部分服务(比如只能新建,不允许修改),等待 复后,保持数据一致 对于我们的 可用环境,我们采用的处理策略 1、 即提供服务 2、 ) ) 3、 ) 、 ) ) 5、 ) a s t e rR o l l b a c kS l a v eR e p l a y 滚,保持与 致 重新恢复主备复制关系 放,减少数据丢失 冲突检测机制 5. 灾 互联网应用以普通的 务器为主 通过业务功能的写入主库通常只有一个,造成单点 意外操作 导致数据丢失 会遇到不可抗力因素或异常导致 宕机 应用写入数据时,记录应用日志,日志可以用来恢复丢失的数据 制模式是 换时只需修改 布式数据中间层 志 从采用半同步复制( 为备库, 是备库,作为容灾库 6. 动切换 互联网应用以普通的 务器为主 主库 后,需要保持提供高可用的服务 人工调整切换时间太长 多个 主库 后,需要及时切换 1、整体架构 说明: 页面化操作管理切换,目前暂时不实现,采用 态数据源直接与 行通信。 2、详细架构 态数据源 A P PM a s t e r S l a v eZ o o K e e p e r m a s t e 性能损失 20 % , 用的比较多A g e n tA g e n a s t e r 状态 , 定期更新Z o o k e e p e r 上的锁的时间 , 声明自己可用 。定期检查 Z o o k e e p e r 上的锁更新时间 , 如果 M a s t e r 更新超时 , 那么把 S l a v e 状态变成m a s t e r , r e a d o n l y 属性关闭同时更新 z o o k e e p e r 上的 M a s t e 为原来 S l a v e 的地址/ 0 . 10 . 10 . 1 : 5000 10 . 10 . 10 . 1 : 5000 0 . 10 . 10 . 1 : 50000 . 10 . 10 . 2 : 500110 . 10 . 10 . 210 . 10 . 10 . 1连接管理器 , 连接不可用 , 或者监控到的主备地址变化时 ( 通过事件的方式可以获得 , 无需定时检查 ), 从取新的数据库 址 , 建立新的连接管理工具1 . 监控主从状态2 . 主动主从切换 ( 当主恢复的时候 , 需要此功能 )3、整体思路 主备库构成分布式环境,但是有状态 确保 以重启,可以任意次重启,但是有超时限制 主库切换逻辑可以通过 现 锁的升级实现 切换时, 设置很重要 切换时,需要将异常的故障节点 +据源一起切换 1、首先在 始化,创建 对应的节点,写入模块信息、数据库源名称、数据库 据库端口信息等 ,然后写入下面的数据库子节点 中,并添加 加监视事件。 2、创建 节点,不需要设置 果当前 当前最小的节点,则获得了 出。否则继续等待,如果 存在,则创建子节点 3、当发生异常 机后,则 件触发,然后从当前 列中得到最小的该节点置为新的 时将 为 证可以读写 流程 1: 动 流程 2:数据库监控正常 根据 传入的参数 在 注册 节点 启动数据库监视 器 检查 工作环境 是否满足 工作要求 满足 退出 注册成功 告警 ,等待手工处理 开始修改本地监控状态是否 Ma o : 数据库监控 数据库 始修改本地监控状态I f p r e _ s t a t = a c t i v e t h e n n o w _ s t a t = a c t i v e 2 d o w nI f p r e _ s t a t = r u n n i n g t h e n n o w _ s t a t = r u n n i n g 2 d o w nE l s e n o w _ s t a t = d o w c t i v e 2 d o w l o c k 节点是否结束流程 4: 正常停止 开始删除 应用启动,初始化 数据库 连接池 流程 六: 应用 监听到 据库 宕机 d f d D a t a F l o o k e e p e K 读取数据源信息建立 Z K L O C K 节点的监听构建数据源组结束读取数据源组信息否是 目前我们连接池重建连接的过程是当在连接上执行 作时发生特定异常时触发连接池关闭不可用连接,重新向数据源获取连接。在使用 置特性时, 不可用则尝试从另外一个数据源获取连接, 复制机制(非共享存储)决定了其驱动层不能支持当主库出问题时自动连接到从库上,因此我们考虑使用实现类似 动做的事情,即数据源组中的首选数据源不可用时,我们尝试同组中的其他数据源来获取连接,对于连接池来说这个过程是透明的。连接池还是保持之前当连接异常时,触发执行关闭不可用连接并重新获取连接即可。 主备切换和按权重选择、按优先级选择数据源的选择策略是不一样的,因此设计描述数据源的选择策略,不同的选择策略在同一数据源组中会同时存在,一个 括写数据源选择策略、读数据源选择策略和运行时切换策略,使用何种具体策略取决于组数据源的配置。待选择的数据源要求是对等的,即读数据源选择策略只针对标识为读的数据源,不能把读写数据源混在一起选择。 引入了 后,我们可以通过 知到主数据库的状态。 用程序收到通知后,需要关闭连接池中之前已建立的主数据库连接,重新创建新的主库连接。基于 通知机制,我们在 接收数据源配置变化的信息 ,收到变化通知后更新数据源本身的状态,同时建立 制,把数据源状态变化发布给连接池等对象进行相应的处理。 1、类图: 2、获取连接时序图 c l a s s D a t a S o u r c eG r o u p D a t a S o u r c e+ g e t C o n n e ct i o n ( ) : C o n n e ct i o n+ g e t N a m e ( )+ a d d D s L i s t e n e r ( D s L i s t e n e r ) : vo i d i n t e r f a N a m e d D a t a S o u r c e+ g e t C o n n e ct i o n ( ) : C o n n e ct i o n+ g e t C o n n e ct i o n ( S t r i n g , S t r i n g ) : C o n n e ct i o n+ g e t N a m e ( )Z k W a t c h e r+ p r o ce s s ( ) : vo i d i n t e r f a S t a t e D a t a S o u r c e+ g e t C o n n e ct i o n ( ) : C o n n e ct i o n+ g e t S t a t e ( ) : D s S t a t e+ i s A va i l a b l e ( ) : b o o l e a n+ i s R e a d a b l e ( ) : b o o l e a n+ i s W r i t a b l e ( ) : b o o l e a b je i n t e r f a D a t a S o u r c e+ g e t C o n n e ct i o n ( ) : C o n n e ct i o n+ g e t C o n n e ct i o n ( S t r i n g , S t r i n g ) : C o n n e ct i o n e n u m e r a t i o n D s S t a t A I T A D _ W R I T i n t e r f a D s S e l e c t o r+ s e l e ) : D a t a S o u r k S t a t e D a t a S o u r c e+ g e t C o n n e ct i o n ( ) : C o n n e ct i o n+ g e t S t a t e ( ) : D s S t a t e+ i s A va i l a b l e ( ) : b o o l e a n+ i s R e a d a b l e ( ) : b o o l e a n+ i s W r i t a b l e ( ) : b o o l e a n+ a d d D s L i s t e n e r ( D s L i s t e n e r ) : vo i d n o t i f yD s L i s t e n e r s ( ) : vo i d i n t e r f a D s L i s t e n e r+ o n C h a n g e ( D s C h a n g e E ve n t ) : vo i dC o n n e c t i o n P o o lA c t i v e D s S e l e c t o r+ s e l e ) : D a t a S o u r i n t e r f a D s C h a n g e E v e n t+ g e t O l d V a l u e ( ) : + g e t N e w V a l u e ( ) : + g e t S o u r ) : D a t a S o u r s S t a t e C h a n g e E v e n t + g e t O l d V a l u e ( ) : D s S t a t e+ g e t N e w V a l u e ( ) : D s S t a t e+ g e t S o u r ) : D a t a S o u r 、应用监听到 发生切换时序图: s d G e t C o n n e c t i o nC o n n e ct i o n P o o l G r o u p D a t a S o u r ct i b S e l e ct o r Z k S t a t e D a t a S o u r e t C o n n e ct i o n ( )s e l e )* i s A va i l a b l e ( ): t r u e* i s W r i t a b l e ( ): t r u e:a ct i a t a s o u r e t C o n n e ct i o n ( ): co n n e ct i o n: co n n e ct i o n s d A c t i v e S w i t c hZ k S t a t e D a t a S o u r o o K e e p e rZ k W a t ch e r C o n n e ct i o n P o o lD s L i s t e n e r 4 P o o lG r o u p D a t a S o u r M a s t e r i s n o n a va l i a b l e ( N A ) :p r o ce s s ( )g e t C h a n g e d D s ( d b N a m e ): t a t e D a t a S o u r o t i f yD s L i s t e n e r s ( )ch a n g e D s S t a t e T o N A ( )o n C h a n g e ( d s S t a t e C h a n g e E ve n t )n o t i f yC h e )cl o s e N a C o n n e ct i o n s ( ) M a s t e r h a s s w i t ch e d :p r o ce s s ( )g e t C h a n g e d D s ( d s N a m e ): t a t e D a t a S o u r o t i f yD s L i s t e n e r s ( )ch a n g e D s S t a t e T o W r i t a b l e ( )o n C h a n g e ( d s S t a t e C h a n g e E ve n t )i n i t P o o l ( )s d A c t i v e S w i t c hZ k S t a t e D a t a S o u r o o K e e p e rZ k W a t ch e r C o n n e ct i o n P o o lD s L i s t e n e r 4 P o o l M a s t e r i s n o n a va l i a b l e ( N A ) :p r o ce s s ( )n o t i f yD s L i s t e n e r s ( )ch a n g e D s S t a t e T o N A ( )o n C h a n g e ( d s S t a t e C h a n g e E ve n t )n o t i f yC h e )cl o s e N a C o n n e ct i o n s ( ) M a s t e r h a s s w i t ch e d :p r o ce s s ( )n o t i f yD s L i s t e n e r s ( )ch a n g e D s S t a t e T o W r i t a b l e ( )o n C h a n g e ( d s S t a t e C h a n g e E ve n t )i n i t P o o l ( ) 以下具体切换步骤是按 的架构方式为基准进行的 主 库 ( M a s t e r ) 宕 机宕 机 分 类 1 . 维 护 切 换 , 如 换 机 器 、 内 存 维 护 等2 . M a s t e r 异 常 直 接 挂 掉A g e n t 2 创 建 l o c k , 获 得 序 列 中 最 小 I DA g e n t 1 将 状 况 汇 报 给 Z o o k e e p e r( 如 果 网 络 通 信 , z k 感 知 )A g e n t 2 得 知 W a t c h 事 件 , 记 录异 常 , 创 建 异 常 节 点A g e n t 2 创 建 l o c k 成 功 , 成 为 一 个 新 的M a s t e r , 记 录 在 Z o o k e e p e 库 切 换 : 推 送 动 态 数 据 源 配 置 , 将 新 主 库 置 为 可 写 ( 即 将 新 主 库 的r e a d - o n l y 置 为 f a l s e )Z o o k e e p e r 的 A g e n t 1 节 点 消 失主 库 切 换 完 成 1、 常 常表现 触发动作 说明 常退出 要求在 时间内可重启,否则会进行切换 需要记住 的 则进行自动 法设置 要第三方 通信异常 与 行读写测试,重试机制、重试次数、间隔可控制 若 常,通信问题可以忽略(同一台机器) 间的网络异常(设置 通 过 超 时 来 控 制 , 大 于切换 由于 绑定无法恢复,需进行切换 器死机 (设置 与 间的通信中断,在大于 后进行自动切换 2、 常 常表现 触发动作 说明 问异常 定 期 进 行 读 写 ( 设 置 主库:插入时间戳(可重试,重试间隔可设置) 从库:读取时间戳(同上) 若 接被 ,重新创建连接 若异常,认为 掉,进行切换 器死机 同 器的网络异常 同 在的整个机房 挂掉,被踢出集群) 发起自动切换 点设计 / r u n t i m eZ o o k e e p e r 运 行 节 点 设 计d a t a b a s e固 定 节 点 , 存 放 R u n T i m e 状 态存 放 数 据 库 状 态m y s q M y S Q L 数 据 库 状 态b a s e d 源 名 称b a s e d bm a s t e rm a s t e r 信 息l o c kA c t i v e 锁 节 点s e r v i c 库 实 例 目 录1 0 . 1 0 . 1 2 . 1 0 : 5 0 0 0实 例 节 点1 0 . 1 0 . 1 2 . 1 0 : 5 0 0 1m a s t e rl o c ks e r v i c . 1 0 . 1 2 . 1 0 : 5 0 0 2说明: 1、 一级的节点,当进行分库扩展的时候,就在后面加上数值进行区分,比如 对 行水平切分,拆分成很多套数据库, 主备库可以部署在不同机房 复制模式采用 数据库中间层(动态数据源包括在内)部署在程序端,配置推送 采用 方式 采用可靠的 群保障, 以部署在三个机房 优势 多机房部署可实现 灾 不受限于 可以进行全页面操作的方式 在人工情况下可以将主库切换到任意备库 群中机器的可靠性可以保障,只要半数以上的机器存活即可,是稳定的第三方。 群为了保证其自身的稳定性,机器的最少数量为 3,因此对应的 一个集群节点中的最少部署数量也为 3 个库,两个 分别为只读和读写,一个 1、场景 1:单机房部署 主 库 ( r e a d - o n l y )主 库 ( r w ) 从 库 ( 容 灾 r e a d - o n l y )A g e n t 1 A g e n t 2 A g e n t 3I D C 1 机 房Z o o k e e p e r 1 Z o o k e e p e r 2Z o o k e e p e r 3Z o o k e e p e r 集 群 2、场景 2:多机房部署 主 库 ( r e a d - o n l y )主 库 ( r w ) 从 库 ( 容 灾 r e a d - o n l y )A g e n t 1 A g e n t 2 A g e n t 3I D C 1 机 房 I D C 2 机 房I D C 3 机 房Z o o k e e p e r 1 Z o o k e e p e r 2Z o o k e e p e r 3Z o o k e e p e r 集 群 目前暂时不实现 控 供一些简单但是功能强大的 4 字命令,通过对这些 4 字命令的返回内容进行解析,可以获取不少关于 行时的信息。 用 能获取一些运行的信息 开源的浏览器查看 件 测试环境 硬件环境 1台 2个实例 1台 2个实例 1台 1个实例) 操作系统 24位 软件环境 1进制分发版 用例编号 试场景 接中断 场景描述 间的连接中断 测试目的 自动重连机制及连接失败后的切换处理 前提条件 1、 间的通信正常 2、 间的通信正常 3、 常运行 4、 常运行 5、 常运行 测试方法 在 务器上杀掉 连接进程 输入 /动作 在 连接进程 期望的输出 1、 设置的间隔时间内进行自动重连,连续尝试 5 次,如果没有连接成功,则发起自动切换,重连的间隔和时间是可以设置的 2、 果自动重连成功,则返回成功的消息 3、 连接如果是被 了,则需要创建连接 用例编号 试场景 接超时 场景描述 一次连接超过设置的连接超时时间 测试目的 自动重连机制及处理策略 前提条件 1、 间的通信正常 2、 间的通信正常 3、 常运行 4、 常运行 5、 常运行 测试方法 将 连接超时时间设置的足够小 输入 /动作 设置 数 期望的输出 1、 设置的间隔时间内进行自动重连,连续尝试 5 次,如果没有连接成功,则发起自动切换,重连的间隔和时间是可以设置的 2、 果自动重连成功,则返回成功的消息 用例编号 试场景 库的单个实例挂掉 场景描述 库上的 1 个实例直接挂掉了 测试目的 库上的实例挂掉后能否及时切换并提供正常的服务 前提条件 1、 间的通信正常 2、 间的通信正常 3、 常运行 4、 常运行 5、 常运行 测试方法 人为停掉 库上的 1 个实例 输入 /动作 通过 闭 例 通过 9 杀掉 库的实例 期望的输出 1、 起
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川安全员-B证考试题库附答案
- 市场监督管理合同示范文本
- 2025年广西事业单位招聘考试真题及答案解析
- 实习学生自我鉴定
- 知识改变命运的课件
- 应急普法知识竞赛试题及答案
- 度江西省招聘村居后备干部考试参考试题及答案
- 开学第一课主题班会(3篇)
- 执业医师考核公共卫生模拟试题1
- 幼儿园中班安全课件下载
- 急性阑尾炎伴有弥漫性腹膜炎的护理查房
- 环境礼仪培训课件
- +2.2+更好发挥政府作用高中政治统编版必修二经济与社会+
- 十五五林业草原发展规划纲要
- 农户生计韧性的新挑战与应对策略
- GB/T 12406-2022表示货币的代码
- WPS图文并茂技巧2025年考试要点试题及答案
- 拆旧建屋合同协议书
- 2025年春江苏开放大学维修电工实训第3次形考作业答案
- 2025年CSCO胰腺癌诊疗指南解读
- 蜜雪冰城加盟合同(2025年版)
评论
0/150
提交评论