mysql、mariadb-半同步复制

#plugins 插件

插件存放目录

[ root@YGL /usr/lib64/mysql/plugin ]# ll
总用量 5016
-rwxr-xr-x. 1 root root   11632 1115 2016 adt_null.so
-rwxr-xr-x. 1 root root    7336 1115 2016 auth_0x0100.so
-rwxr-xr-x. 1 root root   11536 1115 2016 auth_pam.so
-rwxr-xr-x. 1 root root    7568 1115 2016 auth_socket.so
-rwxr-xr-x. 1 root root   11720 1115 2016 auth_test_plugin.so
-rw-r--r--. 1 root root     227 912 2016 daemon_example.ini
-rwxr-xr-x. 1 root root    7504 1115 2016 dialog_examples.so
-rwxr-xr-x. 1 root root   11288 1115 2016 dialog.so
-rwxr-xr-x. 1 root root 1644528 1115 2016 ha_innodb.so
-rwxr-xr-x. 1 root root  169576 1115 2016 handlersocket.so
-rwxr-xr-x. 1 root root  106248 1115 2016 ha_sphinx.so
-rwxr-xr-x. 1 root root   11720 1115 2016 libdaemon_example.so
-rwxr-xr-x. 1 root root   12208 1115 2016 mypluglib.so
-rwxr-xr-x. 1 root root    7184 1115 2016 mysql_clear_password.so
-rwxr-xr-x. 1 root root    7168 1115 2016 qa_auth_client.so
-rwxr-xr-x. 1 root root   11568 1115 2016 qa_auth_interface.so
-rwxr-xr-x. 1 root root    7336 1115 2016 qa_auth_server.so
-rwxr-xr-x. 1 root root   11736 1115 2016 query_cache_info.so
-rwxr-xr-x. 1 root root   41336 1115 2016 semisync_master.so#主插件
-rwxr-xr-x. 1 root root   15984 1115 2016 semisync_slave.so#从插件
-rwxr-xr-x. 1 root root   61184 1115 2016 server_audit.so
-rwxr-xr-x. 1 root root 2922944 1115 2016 sphinx.so
-rwxr-xr-x. 1 root root   12152 1115 2016 sql_errlog.so

查看插件

MariaDB [(none)]> show plugins;

安装插件
主节点的名称叫

rpl_semi_sync_master

从节点的名称叫

rpl_semi_sync_slave

配置半同步复制
要首先配置基础主从复制
然后半道在改成半同步复制

首先配置主从
同步时间

node1
[ root@YGL /usr/lib64/mysql/plugin ]# 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

授权可以进行复制的用户

MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'172.18.25.%' identified by 'replpass';

刷新权限

MariaDB [(none)]> flush privileges;
node2
[server]
[ root@YGL /usr/lib64/mysql/plugin ]# vim /etc/my.cnf.d/server.cnf 

skip_name_resolve = ON 
innodb_file_per_table = ON 
max_connections = 20000

#log_bin = master-log
server_id = 2
relay_log = relay-log #记得要配置中继日志

然后在指明复制谁的,从哪里开始复制

MariaDB [(none)]> change master to master_host='172.18.25.51',master_user='repluser',master_password='replpass',master_log_file='master-log.000001',master_log_pos=245;

到这里就是一个传统意义上的主从复制
接下来我们就要配置成半同步复制

node1
安装插件semisync_master

MariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master';

安装完成后,会里面激活两个参数或者说两个变量

MariaDB [(none)]> show global variables like '%rpl%' ;
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_recovery_rank                  | 0     |
| rpl_semi_sync_master_enabled       | OFF   |#虽然插件安装了,但是功能没启用
| rpl_semi_sync_master_timeout       | 10000 |#如果从节点一直连不上,也不响应,那么我们最多等他10S
| rpl_semi_sync_master_trace_level   | 32    |#追踪相应级别
| rpl_semi_sync_master_wait_no_slave | ON    |#如没有一个同步的复制节点,我们要不要等待。
+------------------------------------+-------+

服务器状态参数或者变量。

MariaDB [(none)]> show global status like '%rpl%';
+--------------------------------------------+-------------+
| Variable_name                              | Value       |
+--------------------------------------------+-------------+
| Rpl_semi_sync_master_clients               | 0           |#有几个半同步复制的从节点。
| Rpl_semi_sync_master_net_avg_wait_time     | 0           |#平均时长
| Rpl_semi_sync_master_net_wait_time         | 0           |#网络等待的总时长
| Rpl_semi_sync_master_net_waits             | 0           |#我们一共网络等待了多少次
| Rpl_semi_sync_master_no_times              | 0           |#等待超时
| Rpl_semi_sync_master_no_tx                 | 0           |#没有事物
| Rpl_semi_sync_master_status                | OFF         |#当前的状态,OFF表示我们没有启用
| Rpl_semi_sync_master_timefunc_failures     | 0           |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0           |#事物平均等待时长
| Rpl_semi_sync_master_tx_wait_time          | 0           |#事物的等待时间
| Rpl_semi_sync_master_tx_waits              | 0           |#事物的等待次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 0           |
| Rpl_semi_sync_master_wait_sessions         | 0           |
| Rpl_semi_sync_master_yes_tx                | 0           |
| Rpl_status                                 | AUTH_MASTER |
+--------------------------------------------+-------------+

现在我们开始配置从节点

node2
安装插件
MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave';

现在开始启用插件

node1
MariaDB [(none)]> set @@global.rpl_semi_sync_master_enabled=on;
MariaDB [(none)]> show global variables like '%rpl%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_recovery_rank                  | 0     |
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
node2
MariaDB [(none)]> set @@global.rpl_semi_sync_slave_enabled=on;
MariaDB [(none)]> show global variables like '%rpl%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_recovery_rank               | 0     |
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+

接下来我们要重启复制线程。

MariaDB [(none)]> stop slave io_thread;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)

那么半同步模型就建立完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值