mysql主从~半同步复制
原理:
Master每次commit有一个事务,要确保slave接受完主服务器发送的binlog日志文件,并写入到自己的realylog中,然后会给master发送信 号,告诉对方已经接收完毕,这样master才能进行下
原理: Master每次commit有一个事务,要确保slave接受完主服务器发送的binlog日志文件,并写入到自己的realylog中,然后会给master发送信 号,告诉对方已经接收完毕,这样master才能进行下一个事务。保证了master和salve的绝对一致性 半同步复制配置步骤 1)安装插件:插件存放目录$basedir/lib/plugin/ 1)给master安装插件: mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so’; Query OK, 0 rows affected (0.13 sec) 2)查看是否安装成功 mysql> show global variables like ‘rpl_semi_sync%’; rpl_semi_sync_master_enabled 是否启用master的半同步复制 rpl_semi_sync_master_timeout:默认主等待从返回信息的超时间时间,10秒。动态可调 rpl_semi_sync_master_trace_level:用于开启半同步复制模式时的调试级别mssql复制,默认是32 rpl_semi_sync_master_wait_no_slave:是否允许每个事物的提交都要等待slave的信号.on为每一个事物都等待,off则表示slave追赶上后,也不会开启半同步模式,需要手动开启 3)slave上安装插件 mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’; Query OK, 0 rows affected (0.00 sec mysql> show global variables like ‘rpl_semi_sync%’; rpl_semi_sync_slave_enabled:slave是否启用半同步复制 激活半同步 1)在master上执行 mysql> set global rpl_semi_sync_master_enabled =on; mysql> show global status like ‘rpl_semi_sync%’; Rpl_semi_sync_master_clients: 没有一个从服务器启用半同步复制 Rpl_semi_sync_master_net_avg_wait_time: master等待slave回复的平均等待时间。单位毫秒 Rpl_semi_sync_master_net_wait_time: master总的等待时间。单位毫秒 Rpl_semi_sync_master_net_waits: master等待slave回复的总的等待次数 Rpl_semi_sync_master_no_times: master关闭半同步复制的次 Rpl_semi_sync_master_no_tx: 表示从服务器确认的不成功提交的数量. Rpl_semi_sync_master_status: 标记 master现在是否是半同步复制状态 Rpl_semi_sync_master_timefunc_failures: master调用时间(如gettimeofday())失败的次数 Rpl_semi_sync_master_tx_avg_wait_time: master花在每个事务上的平均等待时间 Rpl_semi_sync_master_tx_wait_time: master花在事物上总的等待时间 Rpl_semi_sync_master_tx_waits: master事物等待次数 Rpl_semi_sync_master_wait_pos_backtraverse:后来的先到了,而先来的还没有到的次数 Rpl_semi_sync_master_wait_sessions: 当前有多少个session因为slave回复而造成等待 Rpl_semi_sync_master_yes_tx: 表示从服务器确认的成功提交数量 2)slave执行 mysql> set global rpl_semi_sync_slave_enabled=on; mysql> show global status like ‘rpl_semi_sync%’; 3)重启io线程 mysql> stop slave IO_THREAD; Query OK, 0 rows affected (0.00 sec) mysql> start slave IO_THREAD; Query OK, 0 rows affected (0.01 sec) mysql> show global status like ‘rpl_semi_sync%’; * 测试验证 原理: 当slave从库的IO_Thread 线程将binlog日志接受完毕后,要给master一个确认,如果超过10s未收到slave的接收确认信号,那么就会自动转换为传统的异步复制模式。 1) master插入一条记录,查看slave是否有成功返回 mysql> insert into a values (3); Query OK, 1 row affected (0.00 sec) mysql> show global status like ‘rpl_semi_sync%_yes_tx’; Rpl_semi_sync_master_yes_tx:表示这次事物成功从slave返回一次确认信号 2)slave上模拟故障查看返回时间 当slave挂掉后,master这边更改操作 mysql> stop slave io_thread; Query OK, 0 rows affected (0.00 sec) mysql> insert into a values (4); Query OK, 1 row affected (10.00 sec) 这次插入一个值需要等待10秒(默认的等待时间) mysql> insert into a values (5); Query OK, 1 row affected (0.01 sec) 现在自动转成了原来的异步模式 2) 再次启动slave,查看同步模式 如需要再次半同步复制,则按照以上步骤重新开启就可以 mysql> set global rpl_semi_sync_slave_enabled=on; mysql> stop slave IO_THREAD; mysql> start slave IO_THREAD; 或者可以将该参数写入到配置文件中: master:rpl_semi_sync_master_enabled=1 slave:rpl_semi_sync_slave_enabled=1 4、测试结果 5、master需要等到slave确认后才能提交,如果等不到确认消息,master等待10s种后自动变成异步同步;slave启起来后,master上改变的数据还是会自动复制过来,数据又回到一致。 6、等待时间可以在master上动态调整,如下 mysql> set global rpl_semi_sync_master_timeout=3600000; Query OK, 0 rows affected (0.00 sec) mysql> show global variables like ‘rpl_semi_sync%’; 卸载插件 mysql> select plugin_name,load_option from information_schema.plugins; mysql> uninstall plugin plugin_name; 扩展补充: 跟复制相关的文件 master.info:用于保存slave连接至master的相关信息,包括服务器地址,用户名,密码等 relay-log.info:保存在当前的slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系 复制的监控和维护 purge 命令 mysql> purge binary logs to ‘mysql-bin.000008’; 指明这个二进制文件之前的所有的文件都会被清理
监控操作 mysql> show master status; 显示主节点正在写哪个二进制日志文件 mysql> show binlog events; 显示在二进制文件中记录了哪些信息 mysql> show binary logs ; 显示记录了哪些二进制日志文件 mysql> show slave status; 显示从服务器的状态 mysql> show processlist; 显示当前启用的线程 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |