您的位置:首页 > 数据库 > MariaDB

MariaDB semi-sync半同步主从复制

2019-05-26 02:06 1666 查看

一、半同步主从复制和异步主从复制的区别:

MariaDB主从复制,默认为异步复制。异步复制,即master执行完事物并提交后,二进制日志记录这些更新操作完成后,就开始下一批事务,并不关心这些更新是否被复制到slave上,而半同步复制则需要等待至少1台slave接收到master的二进制日志后,才开始执行下一批事务。在这个等待过程中,如果网络故障或slave宕机,master在事务提交后等待10秒(变量rpl_semi_sync_master_timeout的默认值)后,就会继续,这时master就会变回原来默认的异步状态。当配置为半同步复制时,每一个事务需等待slave接收日志后才返回给客户端。半同步模式下如果在指定时间内没有完成,将自动降级为异步模式。


二、配置半同步主从复制:

1、演示环境:

IP

操作系统

数据库版本

安装方式

角色

192.168.1.145

CentOS   7.6 x86_64

MariaDB-10.3.15

yum

master

192.168.1.146

CentOS   7.6 x86_64

MariaDB-10.3.15

yum

slave

2、master修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

log_error=/var/log/mariadb.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mariadb-slow.log

rpl_semi_sync_master_enabled=1

log_bin=master-bin

log_bin_index=master-bin.index

binlog_format=mixed

server_id=1

sync_binlog=1

innodb_flush_log_at_trx_commit=1

备注:/usr/lib64/mysql/plugin目录中,已没有semisync_master.sosemisync_slave.so这两个插件,因为从MariaDB 10.3.3版本开始已经把半同步插件整合至Server中,因此在配置半同步复制时,无需在masterslave中再使用如下命令安装上述两个插件:

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

MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

3、master创建具有复制权限的用户:

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

MariaDB [(none)]> flush privileges;

4、master查看正在使用的二进制日志文件名称及事件位置:

MariaDB [(none)]> show master status;

5、master查看与半同步复制相关的变量和状态值:

MariaDB [(none)]> show global variables like 'rpl_semi_sync%';

备注:rpl_semi_sync_master_enabled的值为ON

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

备注:Rpl_semi_sync_master_clients的值为0;Rpl_semi_sync_master_status的值为OFF

6、slave修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

log_error=/var/log/mariadb.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mariadb-slow.log

rpl_semi_sync_slave_enabled=1

relay_log=relay-log

relay_log_index=relay-log.index

server_id=2

read_only=1

备注:

(1)slave只能读不能写

(2)如果slave不作为其它slave的master,则无需开启其二进制日志

(3)中继日志默认不存在,只有当复制启动时才会自动生成

7、slave使用具有复制权限的用户连接至master:

MariaDB [(none)]> change master to master_host='192.168.1.145',master_user='repluser',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=2275;

MariaDB [(none)]> show slave status\G

备注:

(1)Slave_IO_Running和Slave_SQL_Running的值,默认为No

(2)自动在数据目录/var/lib/mysql中创建relay-log.000001、relay-log.index和relay-log.info文件

(3)Master_Log_File的值为master的二进制日志文件名称

(4)Read_Master_Log_Pos的值为master二进制日志事件的位置

8、slave启动复制线程:

MariaDB [(none)]> start slave;

备注:

(1)start slave等同于分别执行start slave io_thread和start slave sql_thread

(2)stop slave表示停止主从复制线程

(3)重启slave所在的服务器,复制线程也会自动启动

MariaDB [(none)]> show slave status\G

备注:

(1)只有当Slave_IO_Running和Slave_SQL_Running的值都为Yes时,复制线程才算启动成功

(2)Seconds_Behind_Master的值为0,说明slave没有落后于master

(3)复制时的详细信息记录在slave的错误日志/var/log/mariadb.log中

9、master查看与半同步复制相关的状态值:

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

备注:Rpl_semi_sync_master_clients的值变为1;Rpl_semi_sync_master_status的值变为ON,说明半同步主从复制启动成功

10、slave查看与半同步复制相关的变量和状态值:

MariaDB [(none)]> show global variables like 'rpl_semi_sync%';

备注:rpl_semi_sync_slave_enabled的值为ON

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

备注:Rpl_semi_sync_slave_status的值为ON

11、master查看slave相关信息:

MariaDB [(none)]> show slave hosts;


三、测试半同步主从复制:

1、master创建测试数据:

MariaDB [(none)]> create database db1;

MariaDB [(none)]> use db1;

MariaDB [db1]> create table tb1(id int unsigned auto_increment primary key not null,name char(20) not null);

MariaDB [db1]> desc tb1;

MariaDB [db1]> insert into tb1(name) values('zhangsan'),('lisi');

MariaDB [db1]> select * from tb1;

MariaDB [db1]> show master status;

2、slave查看测试数据:

MariaDB [(none)]> show databases;

MariaDB [(none)]> use db1;

MariaDB [db1]> show tables;

MariaDB [db1]> desc tb1;

MariaDB [db1]> select * from tb1;

MariaDB [db1]> show slave status\G


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: