设为首页 收藏本站
查看: 641|回复: 0

[经验分享] 数据库 之 Mysql半同步复制

[复制链接]

尚未签到

发表于 2018-10-6 12:06:31 | 显示全部楼层 |阅读模式
  1  概述
  半同步复制指一部分主机同步复制,另一部分主机异步复制
  同步的逻辑是用户写操作到主服务器,主服务记录到二进制文件后,主服务会同步发送给从服务器,从服务器响应数据同步后,主服务器才会把响应发给用户。这种方式对IO有强依赖。
  mysql是高度插件化的,半同步复制插件是google共献给mysql的插件。装有该插件的服务器才能实现同步复制。半同步复制的插件在主节点和从节点是不一样的,各自分别使用专有插件,当插件配置启用后,从节点将同步的方式来同步主服务器数据,其他没有配置的插件的机器为异步同步机制复制。这里的同步复制可以设定时间,在一定的时间范围内,如果配有插件的从服务器没有复制主服务器的数据,该从服务器将会被降级为异步复制。
  PXC:Percona XtraDB Cluster,percona的插件,是一种多主的高可用,可扩展的解决方案,可以在生产环境使用。实现了主从复制集群,和mysql的主从服务复制逻辑不一样,PXC实现了多主的集群复制,每一个节点都是可读可写。通过集群信道来同步信息,不依赖于二进制日志和中继日志,按位复制,不同步量少,实现几乎同步的复制。二进制级别做校验,可以发现数据的不一致,但是这个方案不是mysql官方的,这种方案可能会停止维护,当数据量大后,要重新转移数据库难度就很大。
  本文没有介绍PXC工具的使用,主要mysql自带的半同步复制安装插件才能实现半同步的功能
  2  插件安装
  查看当前数据库安装的插件
  MariaDB [sunny]> show plugins;
  mysql支持多种插件,其中,在路径/usr/lib64/mysql/plugin/下的semisync_master.so和semisync_slave.so这两个插件实现半同步复制,需要安装才能使用同步复制功能
  在mysql下执行help  install查看install的使用方法
  安装语法如下:
  mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name';
  其中,
  plugin_name为插件名,与文件名不一致
  shared_library_name为共享库名称,即/usr/lib64/mysql/plugin/下不需要加.so后缀的插件名。
  通过文档得知插件对应的插件名称和文件名,没有规律可寻
  半同步复制:
  semisync_master.so  主节点的插件
  semisync_slave.so  从节点的插件
  主节点:
  INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
  MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
  +------------------------------------+-------+
  | Variable_name                      | Value |
  +------------------------------------+-------+
  | rpl_semi_sync_master_enabled       | OFF   |
  | rpl_semi_sync_master_timeout       | 10000 |
  | rpl_semi_sync_master_trace_level   | 32    |
  | rpl_semi_sync_master_wait_no_slave | ON    |
  +------------------------------------+-------+
  MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;
  从节点:
  INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
  +---------------------------------+-------+
  | Variable_name                   | Value |
  +---------------------------------+-------+
  | rpl_semi_sync_slave_enabled     | OFF   |
  | rpl_semi_sync_slave_trace_level | 32    |
  +---------------------------------+-------+
  MariaDB [mydb]> STOP SLAVE IO_THREAD;
  MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
  MariaDB [mydb]> START SLAVE IO_THREAD;
  判断方法:
  主节点:
  MariaDB [mydb]> SELECT @@global.rpl_semi_sync_master_clients;
  3  例子 实现半同步复制
  步骤一,主从复制模型配置
  主服务器71配置
  [root@CentOS7A ~]#vim /etc/my.cnf.d/server.cnf
  [server]
  skip_name_resolve = ON
  innodb_file_per_table = ON
  max_connections = 20000
  log_bin = master-log
  server_id = 1
  重启mysql
  [root@CentOS7A ~]#systemctl restart mariadb
  授权拥有复制权限的账号

  MariaDB [sunny]> grant replication client,replication slave on *.* to 'sunnycopy'@'192.168.1.%'>  MariaDB [sunny]> flush privileges;
  从节点73配置
  [root@CentOS7C ~]#vim /etc/my.cnf.d/server.cnf
  [server]
  skip_name_resolve = ON
  innodb_file_per_table = ON
  innodb_buffer_pool_size = 256M
  max_connections = 2000

  relay_log =>  server_id = 2
  重启mysql
  [root@CentOS7C ~]#systemctl restart mariadb
  连接入从服务器,启动从服务器的复制
  MariaDB [(none)]> change master to master_host='192.168.1.71',master_user='sunnycopy',master_password='Pass1234',master_log_file='master-log.000004',master_log_pos=245;
  其中,master_log_file和master_log_pos可以到主服务器上用如下命令
  MariaDB [sunny]> show binlog events in 'master-log.000004';
  或者
  MariaDB [sunny]> show mastert status;
  查看从哪个二进制文件的位置开始复制
  启动复制线程
  MariaDB [(none)]> start slave;
  查看状态
  MariaDB [(none)]> show slave status\G;
  到这里,主从复制集群设置完成。
  步骤二,配置为半同步模式
  主节点73上安装模块
  MariaDB [sunny]> install plugin rpl_semi_sync_master soname 'semisync_master';
  安装完成后,在主节点上会生成相关服务器半同步参数
  查看如下
  MariaDB [sunny]> show global variables like '%rpl%';
  +------------------------------------+-------+
  | Variable_name                      | Value |
  +------------------------------------+-------+
  | rpl_recovery_rank                  | 0     |
  | rpl_semi_sync_master_enabled       | OFF   |
  | rpl_semi_sync_master_timeout       | 10000 |
  | rpl_semi_sync_master_trace_level   | 32    |
  | rpl_semi_sync_master_wait_no_slave | ON    |
  +------------------------------------+-------+
  5 rows in set (0.00 sec)
  查看半同步复制状态的相关参数,命令如下
  MariaDB [sunny]> show status like '%rpl%';
  从节点73安装插件
  MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave';
  查看参数
  MariaDB [sunny]> show global variables like '%rpl%';
  MariaDB [sunny]> show status like '%rpl%';
  步骤三,设置参数为启用
  注意,插件安装完成后,master和slave节点上的rpl_semi_sync_master_enabled 和rpl_semi_sync_slave_enabled都是禁用的,需要启用
  主节点71上启用
  MariaDB [sunny]> set @@global.rpl_semi_sync_master_enabled=on;
  从节点73上启用
  MariaDB [(none)]> set @@global.rpl_semi_sync_slave_enabled=on;
  步骤四,从节点重启复制线程
  注意,这里是从原来的主从复制转为半同步复制,已经设置了同步主机,即执行过change master to的命令,如果没有需要设置相关参数,然后启用复制线程
  73上设置
  MariaDB [(none)]> stop slave io_thread;
  MariaDB [(none)]> start slave io_thread;
  确认,从服务器的Rpl_semi_sync_slave_status状态为on才是正常启用,查看命令如下
  MariaDB [(none)]> show status like '%rpl%';
  主服务器上查看Rpl_semi_sync_master_clients 参数,value是1,表示已经有1台从服务器启用半同步复制方式连接到该主服务器上
  MariaDB [sunny]> show status like '%rpl%';
  检查,在主节点,插入数据后,状态会变化
  如73上执行如下操作
  MariaDB [sunny]> create database test2;
  MariaDB [sunny]> use test2

  MariaDB [test2]> create table>  查看相关参数状态, 就会发生变化,命令如下
  MariaDB [test2]> show status like '%rpl%';
  半同步复制到这里配置完成,注意,半同步是一把双刃剑,因为为了等待事务同步复制事务的完成,需要耗费一定的时间,速度相对较慢。
  生成环境,建议用keepalive工具将proxysql配置为高可用,防止单点故障


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-613750-1-1.html 上篇帖子: MySQL--6 分组 下篇帖子: 数据库 之 Mysql的表分区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表