第18章_主从复制(下)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 第18章_主从复制

3.5 从机:配置需要复制的主机

**步骤1:**从机上复制主机的命令

CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

举例:

CHANGE MASTER TO
MASTER_HOST='192.168.1.150',MASTER_USER='slave1',MASTER_PASSWORD='123456',MASTER_LOG_F
ILE='atguigu-bin.000007',MASTER_LOG_POS=154;

84ec8c13ee42838720a6137088273a3a.png

#启动slave同步
START SLAVE;

84ec8c13ee42838720a6137088273a3a.png49da39ce800b60942b5d9276b8385031.png

网络异常,图片无法展示
|
如果报错:

ebeb99c90ecbb636a49c68cd8f9a552b.png

可以执行如下操作,删除之前的relay_log信息。然后重新执行 CHANGE MASTER TO …语句即可。

mysql> reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件

网络异常,图片无法展示
|
接着,查看同步状态:

SHOW SLAVE STATUS\G;

网络异常,图片无法展示
|
eebef91cac4e0df17f389d265d76de61.png

网络异常,图片无法展示
|
上面两个参数都是Yes,则说明主从配置成功!

显式如下的情况,就是不正确的。可能错误的原因有:

1. 网络不通
2. 账户密码错误
3. 防火墙
4. mysql配置文件问题
5. 连接服务器时语法
6. 主服务器mysql权限


image-20220718142045114.png

3.6 测试

主机新建库、新建表、insert记录,从机复制:

CREATE DATABASE atguigu_master_slave;
CREATE TABLE mytbl(id INT,NAME VARCHAR(16));
INSERT INTO mytbl VALUES(1, 'zhang3');
INSERT INTO mytbl VALUES(2,@@hostname);


3.7 停止主从同步

  • 停止主从同步命令:
stop slave;
  • 如何重新配置主从
    如果停止从服务器复制功能,再a983839f25f9f50b2c603ef2c0a64024.png使用需要重新配置主从。否则会报错如下:

重新配置主从,需要在从机上执行:

stop slave;
reset master; #删除Master中所有的binglog文件,并将日志索引文件清空,重新开始所有新的日志文件(慎用)

3.8 后续

搭建主从复制:双主双从

一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有它的从机s2负责所有读请求。当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。结构图如下:

abc5ca79cd90e57bd4e0680ddec2ba13.png


67204e764b8a7561e0f7c8ae61eed8d9.png

4. 同步数据一致性问题

主从同步的要求:

  • 读库和写库的数据一致(最终一致);
  • 写数据必须写到写库;
  • 读数据必须到读库(不一定);


4.1 理解主从延迟问题

进行主从同步的内容是二进制日志,它是一个文件,在进行 网络传输 的过程中就一定会 存在主从延迟 (比如 500ms),这样就可能造成用户在从库上读取的数据不是最新的数据,也就是主从同步中的 数据不一致性 问题。

image-20220718144051094.png


4.2主从延迟问题原因


在网络正常的时候,日志从主库传给从库所需的时间是很短的,即T2-T1的值是非常小的。即,网络正常情况下,主备延迟的主要来源是备库接收完binlog和执行完这个事务之间的时间差。


**主备延迟最直接的表现是,从库消费中继日志(relay log)的速度,比主库生产binlog的速度要慢。**造成原因:


1、从库的机器性能比主库要差


2、从库的压力大


3、大事务的执行


**举例1:**一次性用delete语句删除太多数据


结论:后续再删除数据的时候,要控制每个事务删除的数据量,分成多次删除。


**举例2:**一次性用insert…select插入太多数据


**举例3:**大表DDL


比如在主库对一张500W的表添加一个字段耗费了10分钟,那么从节点上也会耗费10分钟。


4.3 如何减少主从延迟


若想要减少主从延迟的时间,可以采取下面的办法:


降低多线程大事务并发的概率,优化业务逻辑

优化SQL,避免慢SQL, 减少批量操作 ,建议写脚本以update-sleep这样的形式完成。

提高从库机器的配置 ,减少主库写binlog和从库读binlog的效率差。

尽量采用 短的链路 ,也就是主库和从库服务器的距离尽量要短,提升端口带宽,减少binlog传输的网络延时。

实时性要求的业务读强制走主库,从库只做灾备,备份。

4.4 如何解决一致性问题

如果操作的数据存储在同一个数据库中,那么对数据进行更新的时候,可以对记录加写锁,这样在读取的时候就不会发生数据不一致的情况。但这时从库的作用就是 备份 ,并没有起到 读写分离 ,分担主库 读压力 的作用。


5ef3a1910efb1bc565c1e699954008c4.png


读写分离情况下,解决主从同步中数据不一致的问题, 就是解决主从之间 数据复制方式 的问题,如果按照数据一致性 从弱到强 来进行划分,有以下 3 种复制方式。


方法 1:异步复制

异步模式就是客户端提交 COMMIT 之后不需要等从库返回任何结果,而是直接将结果返回给客户端,这样做的好处是不会影响主库写的效率,但可能会存在主库宕机,而Binlog还没有同步到从库的情况,也就是此时的主库和从库数据不一致。这时候从从库中选择一个作为新主,那么新主则可能缺少原来主服务器中已提交的事务。所以,这种复制模式下的数据一致性是最弱的。


a852a7a9f2dc53fbc4736709920be817.png


方法 2:半同步复制


image-20220718144926758.png


方法 3:组复制

异步复制和半同步复制都无法最终保证数据的一致性问题,半同步复制是通过判断从库响应的个数来决定是否返回给客户端,虽然数据一致性相比于异步复制有提升,但仍然无法满足对数据一致性要求高的场景,比如金融领域。MGR 很好地弥补了这两种复制模式的不足。


组复制技术,简称 MGR(MySQL Group Replication)。是 MySQL 在 5.7.17 版本中推出的一种新的数据复制技术,这种复制技术是基于 Paxos 协议的状态机复制。


MGR 是如何工作的


首先我们将多个节点共同组成一个复制组,在 执行读写(RW)事务 的时候,需要通过一致性协议层 (Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里“大多数人”(对应 Node 节 点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起方一个说了算。而针对 只读(RO)事务 则不需要经过组内同意,直接 COMMIT 即可。


在一个复制组内有多个节点组成,它们各自维护了自己的数据副本,并且在一致性协议层实现了原子消 息和全局有序消息,从而保证组内数据的一致性。


cfc105f9bf0e452c41136677bf0c3f5c.png


MGR 将 MySQL 带入了数据强一致性的时代,是一个划时代的创新,其中一个重要的原因就是MGR 是基 于 Paxos 协议的。Paxos 算法是由 2013 年的图灵奖获得者 Leslie Lamport 于 1990 年提出的,有关这个算法的决策机制可以搜一下。事实上,Paxos 算法提出来之后就作为 分布式一致性算法 被广泛应用,比如 Apache 的 ZooKeeper 也是基于 Paxos 实现的。


5. 知识延伸


在主从架构的配置中,如果想要采取读写分离的策略,我们可以 自己编写程序 ,也可以通过 第三方的中间件 来实现。


自己编写程序的好处就在于比较自主,我们可以自己判断哪些查询在从库上来执行,针对实时性要 求高的需求,我们还可以考虑哪些查询可以在主库上执行。同时,程序直接连接数据库,减少了中间件层,相当于减少了性能损耗。

采用中间件的方法有很明显的优势, 功能强大 , 使用简单 。但因为在客户端和数据库之间增加了 中间件层会有一些 性能损耗 ,同时商业中间件也是有使用成本的。我们也可以考虑采取一些优秀的开源工具。

172a82acf7691033048e315504f607d9.png


① Cobar 属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的 schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。


② Mycat 是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许 多新的功能在其中。青出于蓝而胜于蓝。


③ OneProxy 基于MySQL官方的proxy思想利用c语言进行开发的,OneProxy是一款商业 收费 的中 间件。舍弃了一些功能,专注在 性能和稳定性上 。


④ kingshard 由小团队用go语言开发,还需要发展,需要不断完善。


⑤ Vitess 是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用 需要大量改造成 本 。


⑥ Atlas 是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。


⑦ MaxScale 是mariadb(MySQL原作者维护的一个版本) 研发的中间件


⑧ MySQLRoute 是MySQL官方Oracle公司发布的中间件


5e5d262670438bb796d15e782e294ecc.png


2c5e0661d81374e51eba1b3cba1c9078.png


主备切换:

44f3b39d68a2766c82e5120e52793ebb.png



主动切换

被动切换

如何判断主库出问题了?如何解决过程中的数据不一致性问题 ?


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Java
http访问springboot接口出现401 、403、 Forbidden 错误解决方法
http访问springboot接口出现401 、403、 Forbidden 错误解决方法
3681 0
|
5月前
|
安全 开发工具 git
git添加远程仓库报错To add an exception for this directory解决方案-优雅草卓伊凡
git添加远程仓库报错To add an exception for this directory解决方案-优雅草卓伊凡
636 5
git添加远程仓库报错To add an exception for this directory解决方案-优雅草卓伊凡
|
Ubuntu Linux iOS开发
问题./configure: error: the HTTP gzip module requires the zlib library.处理
问题./configure: error: the HTTP gzip module requires the zlib library.处理
2453 6
|
存储 NoSQL MongoDB
【赵渝强老师】部署MongoDB复制集
本文介绍了如何在单个节点上搭建MongoDB复制集环境,通过监听不同端口实现多节点配置。详细步骤包括创建数据目录、编辑配置文件、启动节点、初始化复制集、查看状态以及测试主从库的读写操作。文中还提供了视频讲解和代码示例,帮助读者更好地理解和操作。
399 0
|
Ubuntu 开发工具 git
ubuntu 14.04的git 错误: gnutls_handshake() failed: Handshake failed
本文提供了一个解决Ubuntu 14.04系统上使用Git时遇到的"gnutls_handshake() failed: Handshake failed"错误的脚本,通过替换git的默认加密传输库gnutls为更稳定的openssl,并指导如何编译安装新版本的git来解决问题。
875 0
|
机器学习/深度学习 文字识别 C#
C#使用PaddleOCR进行图片文字识别✨
C#使用PaddleOCR进行图片文字识别✨
1173 0
|
SQL 关系型数据库 MySQL
Maxwell - 增量数据同步工具(1)
Maxwell - 增量数据同步工具
|
JSON 关系型数据库 MySQL
Mysql时区差8个小时问题解决
Mysql时区差8个小时问题解决
816 1
|
存储 缓存 NoSQL
CentOS7 下源码安装Redis并配置服务开机启动
CentOS7 下源码安装Redis并配置服务开机启动
937 1
|
消息中间件 存储 负载均衡
RocketMQ基本概念
RocketMQ基本概念
209 0

热门文章

最新文章