用vs2010做免费网站模板下载地址,苏州专业高端网站建设公司,好的策划方案网站,山西项目网上一节我们成功搭建了主从复制、读写分离#xff0c;实际上并发量和数据量不大的情况下#xff0c;使用起来也是非常的流畅#xff0c;无任何问题#xff0c;可以正常运行了。但是#xff0c;要保证高可用#xff0c;高并发的情况#xff0c;可以写数据库master就有累了…上一节我们成功搭建了主从复制、读写分离实际上并发量和数据量不大的情况下使用起来也是非常的流畅无任何问题可以正常运行了。但是要保证高可用高并发的情况可以写数据库master就有累了从服务器slave读取数据也很累在复制的过程中就产生了数据同步延迟问题导致主服务器上有数据从服务器没有数据情况最终导致读写分离失效访问数据失败。有的网友就说我们可以升级主服务器的配置来解决我说可以解决暂时的一台服务器再怎么升级也有极限如果使用多台服务器并且可以扩容的话我们不是很好处理这个问题吗好了我们这一节正要讲解同步延迟问题解决掉数据同步延迟问题。一、主从优势其中Master主服务器负责写操作的负载也就是说一切写的操作都在Master上而读的操作则分摊到Slave从服务器上这样一来的可以大大提高读取的效率。为什么要分离读和写呢写操作涉及到锁的问题不管是行锁还是表锁还是块锁都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上而读操作其他的N个节点上进行有效的提高了读的效率保证了系统的高可用性。二、复制过程1)、Mysql的主从同步就是当master(主库)发生数据变化的时候会实时同步到slave(从库)。2)、主从复制可以水平扩展数据库的负载能力容错高可用数据备份。3)、不管是delete、update、insert都是在master上当master有操作的时候slave会快速的接受到这些操作从而做同步。三、主从同步的延迟的原因(1)、主库延迟问题当主库的TPS并发较高时产生的DDL数量超过slave一个sql线程所能承受的范围那么延时就产生了当然还有就是可能与slave的大型query语句产生了锁等待。首要原因数据库在业务上读写压力太大CPU计算负荷大网卡负荷大硬盘随机IO太高。次要原因读写binlog带来的性能影响网络传输延迟。(2)、从库同步延迟问题1)、相关同步参数:首先在服务器上执行show slave satus; Master_Log_FileSLAVE中的I/O线程当前正在读取的主服务器二进制日志文件的名称Read_Master_Log_Pos在当前的主服务器二进制日志中SLAVE中的I/O线程已经读取的位置Relay_Log_FileSQL线程当前正在读取和执行的中继日志文件的名称Relay_Log_Pos在当前的中继日志中SQL线程已读取和执行的位置Relay_Master_Log_File由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称Slave_IO_RunningI/O线程是否被启动并成功地连接到主服务器上Slave_SQL_RunningSQL线程是否被启动Seconds_Behind_Master从属服务器SQL线程和从属服务器I/O线程之间的时间差距单位以秒计。● show slave status显示参数Seconds_Behind_Master不为0这个数值可能会很大● show slave status显示参数Relay_Master_Log_File和Master_Log_File显示bin-log的编号相差很大说明bin-log在从库上没有及时同步所以近期执行的bin-log和当前IO线程所读的bin-log相差很大● mysql从库数据目录下存在大量mysql-relay-log日志该日志同步完成之后就会被系统自动删除存在大量日志说明主从同步延迟很厉害。2)、DDL的IO问题DML和DDL的IO操作是随机的,不是顺序的成本高很多还可能slave上的其他查询产生lock争用由于Slave_SQL_Running也是单线程的所以一个DDL卡主了需要执行10分钟那么所有之后的DDL会等待这个DDL执行完才会继续执行这就导致了延迟比如:主库上那个相同的DDL也需要执行5分钟为什么slave会延时?,答案是master可以并发,Slave_SQL_Running线程却不可以。四、主从同步的延迟的解决方案(重点)1)、架构方面业务的持久化层的实现采用分库架构mysql服务可平行扩展分散压力。单个库读写分离一主多从主写从读分散压力。这样从库压力比主库高保护主库。服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。不同业务的mysql物理上放在不同机器分散压力。2)、硬件方面采用好服务器比如4u比2u性能明显好2u比1u性能明显好。存储用ssd或者盘阵或者san提升随机写的性能。主从间保证处在同一个交换机下面并且是万兆环境。总结硬件强劲延迟自然会变小。一句话缩小延迟的解决方案就是花钱和花时间。3)、mysql主从同步加速sync_binlog在slave端设置为0logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。直接禁用slave端的binlogslave端如果使用的存储引擎是innodb设置innodb_flush_log_at_trx_commit 24)、磁盘IO上操作从文件系统本身属性角度优化master端修改linux、Unix文件系统中文件的etime属性 由于每当读文件时OS都会将读取操作发生的时间回写到磁盘上对于读操作频繁的数据库文件来说这是没必要的只会增加磁盘系统的负担影响I/O性能。五、主从同步的延迟的解决数据一致性方案1)、主从复制存在的问题●主库宕机后数据可能丢失●从库只有一个sql Thread主库写压力大复制很可能延时2)、解决方法● 半同步复制---解决数据丢失的问题● 并行复制----解决从库复制延迟的问题3)、半同步复制mysql semi-sync(半同步复制)半同步复制● 确保事务提交后binlog至少传输到一个从库● 不保证从库应用完这个事务的binlog● 性能有一定的降低响应时间会更长● 网络异常或从库宕机卡主主库直到超时或从库恢复4)、主从复制--异步复制原理、半同步复制和并行复制原理比较a、异步复制原理(图片来源于网络)b、半同步复制原理(图片来源于网络)事务在主库写完binlog后需要从库返回一个已接受,才放回给客户端确保事务提交后binlog至少传输到一个从库不保证从库应用完成这个事务的binlog性能有一定的降低网络异常或从库宕机,卡主库,直到超时或从库恢复、mysql并行复制 。总 结以上写了那么多内容主要查找主服务器和从服务器之间的问题因为数据同步的过程就是服务器之间的数据传输所以我们需要把观察问题所在才好更好的解决问题把数据延迟问题解决掉。更多内容请关注公众号(Laravel技术社区)