• 四十一、半同步复制


    上文提到过半同步复制,看《mysql入门与提高实践》发现有这个的介绍,所以学习一下。

    主从复制模式介绍

    异步复制:主库将binlog的更新发给从库后,并不关心从库是否写入relaylog中。故可能会造成数据不一致问题。默认使用该模式。

    全同步复制:主库将等待所有更新从库都写入relaylog后才将执行结果返回给用户。故受从库影响会造成一定的延时。需要借助第三方工具,如DRBD

    半同步复制:主库等待至少一个从库接收更新并写入relaylog后才将结果返回给用户。故提高了数据的安全性,但也会造成一定的延迟,需要在低延时的节点中使用。

    使用半同步复制是为了保证在主库出现故障时,至少有一台从库数据是完整的。

    半同步复制原理

    主从库会安装semisync插件实现半同步复制。
    1、主库执行完一个事务,semisync插件会向从库发送该事务。
    2、从库将收到的事务写入relaylog后,通过emisync插件告知主库。
    3、主库收到从库的semisync插件的回复信息后告诉用户更新完毕。

    注意:如果主从连接超时,默认为10s,这段时间过后仍收不到回复,就会自动转为异步复制状态。
    MySQL5.5版本以后都支持半同步复制模式。

    配置

    1、主库配置如下

    #安装semisync插件
    $ cd /usr/local/mysql5.7/lib/plugin/
    $ ls -l semi*
    -rwxr-xr-x. 1 mysql mysql 708906 Apr 13  2019 semisync_master.so
    -rwxr-xr-x. 1 mysql mysql 152309 Apr 13  2019 semisync_slave.so
    
    mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
    mysql> set global rpl_semi_sync_master_enabled = ON;
    mysql> set global rpl_semi_sync_master_timeout = 10000; #此处设置为超时时间10s,单位毫秒
    
    #写入配置文件永久生效
    $ vim /etc/my.cnf
    [mysqld]
    ...
    rpl_semi_sync_master_enabled = ON
    global rpl_semi_sync_master_timeout = 10000
    

    同时写入全局配置跟配置文件两种方式即可不重启数据库。
    注意:为了避免延时建议根据实际情况改小超时时间,建议1-2s

    2、从库配置如下

    $ cd /usr/local/mysql5.7/lib/plugin/
    $ install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
    $ set global rpl_semi_sync_slave_enabled = ON;
    
    $ vim /etc/my.cnf
    [mysqld]
    ...
    rpl_semi_sync_slave_enabled = ON
    
    #需要重启slave
    mysql> stop slave;
    mysql> start slave;
    mysql> show slave status G;
    

    3、在主库上查看开启半同步复制的从库个数

    #我这只开了1个,也可以作为配置成功与否的验证方式
    mysql> show global status like '%semi%';
    Rpl_semi_sync_master_clients               | 1  |
    

    4、查看配置是否生效

    mysql> show global variables like '%semi%';
    mysql> select * from mysql.plugin;
    mysql> show plugins;
    mysql> show global status like '%semi%';
    

    书中涉及到log_slave_updates参数,看了一下,是从库将日志写入到binlog中使用的参数,适用于级联同步,这里给个链接以后方便学习。
    参考资料:log_slave_updates参数使用

    参数说明



    学习来自:《MySQL入门与提高实践》 第17章

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    python学习Day21--内置函数、反射
    python学习Day20--属性、类方法和静态方法+类多继承算法补充
    python学习Day19--面向对象的三大特性
    python学习Day18--继承
    python学习Day17--名称空间
    python学习Day16--面向对象
    python学习Day15--递归与二分查找
    python学习Day14--内置函数
    c# 深克隆与浅克隆
    css test-align 和 margin 居中什么区别
  • 原文地址:https://www.cnblogs.com/tz90/p/14652275.html
Copyright © 2020-2023  润新知