mysql半同步复制和异步复制的差别如上述架构图所示:在mysql异步复制的情况下,mysql master server将自己的binary log通过复制线
mysql半同步复制和异步复制的差别如下述架构图所示:在mysql异步复制的情况下,mysql master server将自己的binary log通过复制线程传输出去以后,mysql master sever就自动返回数据给客户端,而不管slave上是否接受到了这个二进制日志。在半同步复制的架构下,当master在将自己binlog发给slave上的时候,要确保slave已经接受到了这个二进制日志以后,才会返回数据给客户端。对比两种架构:异步复制对于用户来说,可以确保得到快速的响应结构,但是不能确保二进制日志确实到达了slave上;半同步复制对于客户的请求响应稍微慢点,但是他可以保证二进制日志的完整性。
说说mysql的半同步复制
mysql基于ssl的半同步复制
mysql主从,半同步,主主复制
mysql服务器复制的主从架构半同步的实现
mysql半同步复制(semi-synchronous replication)
mysql5.5配置安装半同步复制
下面来配置一个半同步复制实现的主从架构:
192.168.1.141为mysql的主服务器
192.168.1.142为mysql的从服务器
1.为mysql主服务器提供配置
编辑/etc/my.cnf,提供以下的配置
log_bin=index
server_id=1
在主服务器上授权
# mysql> grant replication slave,replication client on user@'192.168.1.142' identified by 123456;
# mysql> flush privileges;
2.为mysql从服务提供配置
编辑/etc/my.cnf,提供以下的配置
server_id=10
relay_log=relay
read_only=on
skip-slave-start=1
进入mysql命令行接口
# mysql > change master to master_host=192.168.1.141,master_user=user,master_password=123456,master_log_file=index.000004,master_log_pos=429;
# mysql > start slave;
如果能够看到slave_io_running: yes和slave_sql_running:yes两行信息的话,证明主从配置已经成功。
要使用mysql的半同步复制功能需要为mysql装插件,mysql默认支持的插件在/usr/local/mysql/lib/plugin/,里面有两个semisync_master.so和semisync_slave.so的共享库是我们实现mysql半同步复制的关键
3.设置半同步复制
在mysql主服务器的命令行接口下执行如下代码:
# mysql > install plugin rpl_semi_sync_master soname 'semisync_master.so';
# mysql > show variables like %semi%;(如果看到新增的semi变量的话证明安装模块成功)
| 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 | 没有slave的时候是否也需要等待,,默认为也需要等待
# mysql > set global rpl_semi_sync_master_enabled = 1;
# mysql > set global rpl_semi_sync_master_timeout = 1000;
在mysql从服务器的命令行接口下执行如下代码:
# mysql > install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
# mysql > show variables like %semi%;(如果看到新增的semi变量的话证明安装模块成功)
# mysql > set global rpl_semi_sync_slave_enabled = 1;
# stop slave;
# start slave;
最后把常用的配置参数写如配置文件中:
192.168.1.141:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
192.168.1.142:
[mysqld]
rpl_semi_sync_slave_enabled=1
4.查看半同步复制的状况信息
在192.168.1.141执行如下命令:
mysql> show status like %semi%;
+-------------------------------------------------------------------+----------+
| variable_name | value |
+-------------------------------------------------------------------+----------+
| rpl_semi_sync_master_clients | 1 | 半同步复制客户端的个数
| rpl_semi_sync_master_net_avg_wait_time | 555 | 平均等待时间(默认毫秒)
| rpl_semi_sync_master_net_wait_time | 1665 | 总共等待时间
| rpl_semi_sync_master_net_waits | 3 | 等待次数
| rpl_semi_sync_master_no_times | 0 | 关闭半同步复制的次数
| rpl_semi_sync_master_no_tx | 0 | 表示没有成功接收slave提交的次数
| rpl_semi_sync_master_status | on | 表示当前是异步模式还是半同步模式,on为半同步
| rpl_semi_sync_master_timefunc_failures | 0 | 调用时间函数失败的次数
| rpl_semi_sync_master_tx_avg_wait_time | 575 | 事物的平均传输时间
| rpl_semi_sync_master_tx_wait_time | 1725 | 事物的总共传输时间
| rpl_semi_sync_master_tx_waits | 3 | 事物等待次数
| rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| rpl_semi_sync_master_wait_sessions | 0 | 当前有多少个session因为slave的回复而造成等待
| rpl_semi_sync_master_yes_tx | 3 | 成功接受到slave事物回复的次数
+-------------------------------------------------------------------+---------+
5.取消半同步复制的插件
192.168.1.141上:
# mysql > uninstall plugin rpl_semi_sync_master;
# mysql > show status like %semi%
192.168.1.142上:
# mysql > uninstall plugin rpl_semi_sync_slave;
# mysql > show status like %semi%
本文永久更新链接地址: