Mysql InnerDB Cluster高可用集群

前言

mysql作为底层存储介质在互联网企业中应用非常广泛,可用性、数据一致性是绕不过的坎,各家大企业都有自己方案,mysql8.0提供了官方解决方案,通过动手搭建InnerDB Cluster、阅读文档进行粗略了解,记录加深印象

产品架构

MYSQL InnerDB Cluster提供了一套完整的高可用方案,主要部件有:MysqlShell、Mysql Router、Mysql Servers。Mysql Shell提供了集群管理API,通过这些API可以快速完成集群配置;Mysql Router提供集群连接管理,屏蔽底层数据节点变化,以轮询方式实现读操作的负载均衡,还有关键一点:基于集群配置可自动生成路由配置,若集群发生变化路由将自动重置;Mysql Servers基于group replication构建数据节点集群,具有数据强一致性、master自动选举特点,只要(N/2+1)节点可用整个集群就可提供服务。整体产品结构如下:

来源官方网站

group replication

group replication是mysql提供的集群插件,采用新的协议来实现组内节点数据一致性,节点可弹性扩充,组内自治(隔离故障节点、主从自动切换)。整体架构如下:


来源官方网站
  • APIs:同mysql服务交互接口,将mysql服务同插件隔离开来,主要通过hook方式织入事务处理管道;一方面:接收服务事件(如:服务启动、服务恢复、服务即将提交事务等)并响应;另一方面:主动干预服务执行(如:提交\取消执行中事务)
  • Capture\Applier\Recovery:插件核心功能组件;capture_跟踪运行中事务的执行上下文,applier_远端事务在本地数据库回放执行,recovery_管理组内节点数据恢复,如:新增节点需将其状态同其他节点恢复成一致才可提供服务
  • Replication Protocol Logics:复制协议的逻辑处理,包括:冲突裁决、接收\广播组内事务信息
  • Group Communication System API:组通信系统API,是对构建复制状态机所应具备能力的高度抽象
  • Group Communication Engine:基于Paxos协议的组通信API具体实现

Mysql Router

  • 建议同应用部署在一台机子,减少网络通信开销
  • 其他待补充
组复制协议

组复制协议不同于异步复制、半同步复制,采用分布式一致性协议(Paxos协议变体)实现分布式下数据的最终一致性。过程如下:


来源官方文档

https://blog.csdn.net/d6619309/article/details/53691352

典型场景分析
  • 新增节点

    节点增加分为两阶段
    第一阶段:通知组内节点在binlog中增加VC标识,连接已有节点(donor),从binlog中同步信息至relay log在本地数据库执行,当执行至VC标识时说明同步结束,完成第一阶段

    第二阶段:在第一阶段执行期间,所有新增事务都在内存中缓存,将这些事务同步写入数据库,调整节点状态为online,通知组内服务上线

    https://dev.mysql.com/doc/refman/8.0/en/group-replication-view-changes.html

  • 故障隔离
    待补充

  • master选举
    待补充

相关产品

  • phxsql是腾讯开源的高可用数据库集群方案,感觉实现思路上差别不大:都是基于paxos协议保证一致性、master自动选举;基于代理机制屏蔽数据集群变化。另外,phxsql对mysql侵入很小,没有group replication那么多限制;增加了两个独立进程模块,集群部署管理复杂度有所增加;mysql router基于集群维度调度,建议同应用一起部署,而phxsqlproxy同mysql服务器绑定相对而言不利于保证客户端稳定性
    http://djt.qq.com/article/view/1489
    http://www.cnblogs.com/zengkefu/p/5835508.html
  • galera:暂未阅读
    http://galeracluster.com/products/

部署

系统环境
//一些用得上的mysql语句
查看系统变量:
show variables

持久化设置系统变量:
set persist {name}={value}

修改密码:
alter user 'root'@'localhost' identified by '1234’;

赋予权限:
grant all privileges on *.* to root@“%” with grant option;
flush privileges;
环境设置
  • 防火墙设置
//自己测试可以直接关闭,生产环境需要开放对应端口\IP
///关闭
systemctl stop firewalld.service
///禁止开机启动
systemctl disable firewalld.service 
集群设置
  • 核对节点配置
//clusterAdmin为集群管理员

dba.configureLocalInstance('root@localhost.localdomain:3306',{clusterAdmin: 'icadmin',clusterAdminPassword: 'password'});
  • 构建集群
//查看帮助信息
dba.help() 
//创建集群
var cluster=dba.createCluster("cluster")
cluster.addInstance("ic@ic-3:3306”)

//获取集群对象
var cluster=dba.getCluster("cluster")

//移除集群实例
cluster.removeInstance('root@localhost:3310’)

//移除集群配置
cluster.dissolve({force:true})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,008评论 2 89
  • Group Replication [TOC] 关于 Group Greplication 异步复制 半同步复制 ...
    saup007阅读 5,866评论 0 4
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,897评论 0 5
  • 今天是星期五,也是赶集的日子,我和妹妹一起去菜市场买菜。不一会儿,我们就到了菜市场。这儿的人可真多啊...
    杨朝睿阅读 209评论 0 1
  • 我的父亲 我的父亲慈祥.智慧,他带给我的永远是智慧和力量。从小到大,父亲给予了我很多温暖的...
    马克勤阅读 180评论 0 0