MySQL高可架构设计方案(5)

2018-12-17 15:50

MySQL高可用架构设计方案

1、类图:

class DataSource Object?interface?DataSource+ getConnection() : Connection+ getConnection(String, String) : Connection?enumeration?DsState READWRITEREAD_WRITENA?interface?StateDataSource+ + + + + getConnection() : ConnectiongetState() : DsStateisAvailable() : booleanisReadable() : booleanAisWritable() : boolean?interface?NamedDataSource+ getConnection() : Connection+ getConnection(String, String) : Connection+ getName()ZkStateDataSourceGroupDataSource+ + + + + + ~ getConnection() : ConnectiongetState() : DsStateisAvailable() : booleanisReadable() : booleanisWritable() : booleanaddDsListener(DsListener) : voidnotifyDsListeners() : void+ getConnection() : Connection+ getName()+ addDsListener(DsListener) : void?interface?DsSelector+ select() : DataSourceConnectionPoolActiveDsSelector+ select() : DataSourceZkWatcher+ process() : void?interface?DsListener+ onChange(DsChangeEvent) : void?interface?DsChangeEvent+ getOldValue() : + getNewValue() : + getSource() : DataSourceDsStateChangeEvent+ getOldValue() : DsState+ getNewValue() : DsState+ getSource() : DataSource

MySQL高可用架构设计方案

2、获取连接时序图

sd Get Connection ConnectionPoolGroupDataSourceActiveDbSelectorZkStateDataSourcegetConnection()select()*isAvailable():true*isWritable():true:activeDatasourcegetConnection():connection:connection

MySQL高可用架构设计方案

3、应用监听到Active库发生切换时序图:

sd Active Switch ZkWatcherGroupDataSourceZkStateDataSourceDsListener4PoolConnectionPoolZooKeeper[Master is non avaliable(NA)]:process()getChangedDs(dbName):zkStateDataSourcenotifyDsListeners()changeDsStateToNA()onChange(dsStateChangeEvent)notifyCheck()closeNaConnections()[Master has switched]:process()getChangedDs(dsName):zkStateDataSourcenotifyDsListeners()changeDsStateToWritable()onChange(dsStateChangeEvent)initPool()sd Active Switch ZkWatcherZkStateDataSourceDsListener4PoolConnectionPoolZooKeeper[Master is non avaliable(NA)]:process()notifyDsListeners()changeDsStateToNA()onChange(dsStateChangeEvent)notifyCheck()closeNaConnections()[Master has switched]:process()notifyDsListeners()changeDsStateToWritable()onChange(dsStateChangeEvent)initPool()

MySQL高可用架构设计方案

6.2.4.切换步骤

以下具体切换步骤是按7.2.1中的架构方式为基准进行的

主库(Master)宕机Agent1(如果网络通信,将状况汇报给zkZookeeper感知)Zookeeper的Agent1节点消失 Agent2 异常,创建异常节点得知Watch事件,记录 Agent2创建lock,获得序列中最小ID Agent2 Master,记录在创建lockZookeeper成功,成为一个新的 主备库切换:推送动态数据源配置, read-only将新主库置为可写(即将新主库的置为false)主库切换完成

1. 宕机分类 2. Master维护切换,如换机器、内存维护等异常直接挂掉 MySQL高可用架构设计方案

6.2.5.切换的触发条件

1、Agent异常

No a1 异常表现 异常退出 触发动作 要求在recv_timeout的时间内可重启,否则会进行切换 说明 需要记住client端的session,否则进行自动recover。无法设置read-only,需要第三方 若MySQL正常,通信问题可以忽略(同一台机器) 由于session的绑定无法恢复,需进行切换 a2 与MySQL的通信异常 与MySQL进行读写测试,重试机制、重试次数、间隔可控制 通过超时来控制,大于recv_timeount则切换 与zk之间的通信中断,在大于recv_timeout之后进行自动切换 a3 与zk之间的网络异常(设置read-only) 机器死机 (设置read-only) a4

2、MySQL异常

No 异常表现 触发动作 定期进行读写(设置 read-only) 主库:插入时间戳(可重试,重试间隔可设置) 从库:读取时间戳(同上) 若MySQL连接被kill掉,重新创建连接 若异常,认为MySQL挂掉,进行切换 同a4 同a3 说明 m1 访问异常 m2 机器死机 m3 机器的网络异常 m4 所在的整个机房down发起自动切换 掉(Zookeeper也挂掉, 被踢出集群)


MySQL高可架构设计方案(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:信用证常用条款中英文对照

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: