温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Mysql半同步复制定义及安装教程简析

发布时间:2020-04-28 14:36:42 来源:亿速云 阅读:288 作者:三月 栏目:MySQL数据库

下文内容主要给大家带来Mysql半同步复制定义及安装教程简析,这里所讲到的知识,与书籍略有不同,都是亿速云专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。

1  概述

半同步复制指一部分主机同步复制,另一部分主机异步复制

同步的逻辑是用户写操作到主云服务器,主服务记录到二进制文件后,主服务会同步发送给从服务器,从服务器响应数据同步后,主服务器才会把响应发给用户。这种方式对IO有强依赖。

mysql是高度插件化的,半同步复制插件是google共献给mysql的插件。装有该插件的服务器才能实现同步复制。半同步复制的插件在主节点和从节点是不一样的,各自分别使用专有插件,当插件配置启用后,从节点将同步的方式来同步主服务器数据,其他没有配置的插件的机器为异步同步机制复制。这里的同步复制可以设定时间,在一定的时间范围内,如果配有插件的从服务器没有复制主服务器的数据,该从服务器将会被降级为异步复制。

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.%' identified by 'Pass123456';

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 = 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 class(id int,major char(20));

查看相关参数状态, 就会发生变化,命令如下

MariaDB [test2]> show status like '%rpl%';

半同步复制到这里配置完成,注意,半同步是一把双刃剑,因为为了等待事务同步复制事务的完成,需要耗费一定的时间,速度相对较慢。

生成环境,建议用keepalive工具将proxysql配置为高可用,防止单点故障

对于以上关于Mysql半同步复制定义及安装教程简析,如果大家还有更多需要了解的可以持续关注我们亿速云的行业推新,如需获取专业解答,可在官网联系售前售后的,希望该文章可给大家带来一定的知识更新。

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI