失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql集群保证数据一致性

mysql集群保证数据一致性

时间:2023-09-02 15:15:47

相关推荐

mysql集群保证数据一致性

mysql集群配置在网站负载均衡中是必不可少的;

首先说下我个人准备的负载均衡方式;

1、通过nginx方向代理来将服务器压力分散到各个服务器上;

2、每个服务器中代码逻辑一样;

3、通过使用redis缓存来保存内存中数据,使用redis同步功能来同步不同服务器内存中的数据;

4、在通过mysql的集群配置来实现数据库数据同步;

这里我整理了几种数据同步方式;

一:主从服务器同步;

顾名思义:主服务器负责数据的增删改查,从服务器负责同步数据;

主服务器建立二进制文件;每产生语句变化或磁盘变化写入日至;

从服务器读主服务二进制日至;将读到的日至转成从服务的relaylog,从服务读取relaylog同步主主服务器;

主服务器建立授权复制账号;

从服务器利用账号来监听主服务器;

和大多数关系型数据库一样,InnoDB采用WAL技术,即InnoDB Redo Log记录了对数据文件的物理更改,并保证总是日志先行,在持久化数据文件前,保证之前的redo日志已经写到磁盘。Binlog和InnoDB Redo Log是否落盘将直接影响实例在异常宕机后数据能恢复到什么程度。InnoDB提供了相应的参数来控制事务提交时,写日志的方式和策略

MySQL的复制分为:异步复制、半同步复制、全同步复制

异步复制

主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上,如果此时,强行将从提升为主,可能导致“数据不一致”。早期MySQL仅仅支持异步复制。

半同步复制

MySQL在5.5中引入了半同步复制,主库在应答客户端提交的事务前需要保证至少一个从库接收并写到relay log中,半同步复制通过rpl_semi_sync_master_wait_point参数来控制master在哪个环节接收 slave ack,master 接收到 ack 后返回状态给客户端,此参数一共有两个选项 AFTER_SYNC & AFTER_COMMIT。

如何实现数据一致性校验?一种思路就是逐行逐字段比较主库和备库的表;另外一种思路是,不逐行逐字段比较,取而代之的是分别对主库和备库计算校验和,通过判断校验和是否相同,确定主备库数据是否一致

为了保证中心和单元的数据一致性,我们早期搭建了数据校验和订正平台。主要包括:TCP(terminal compare platform)全量数据校验订正平台(支持表级,库级,实例级,集群级别的数据校验)和AMG(Alibaba Magic Glass)实时的增量数据校验订正平台。

TCP和AMG早已成为阿里巴巴数据库生态中的核心组件,被广泛用于众多场景中保障数据一致性,如:主从复制、单元化同步、逻辑迁移、数据库拆分、字符集升级等。

ADHA(Alibaba Database High Availability)是阿里巴巴集团数据库高可用体系。ADHA的回滚回补功能帮助我们在发生切换过程中尽量保证数据质量,将老主库还没传到老备库的数据回滚掉rollback,将回滚掉的数据回补到新主库中replay。

主从一致性保障措施

从库复制开启SMART模式,可以修复主从复制中断错误,但不能严格保证主备一致,因此当使用smart模式修复复制问题后,需要尽快对主从库做一个全量数据校验(这里包括TCP全量校验+AMG增量校验),以识别有差异的数据。

如果觉得《mysql集群保证数据一致性》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。