L11 MariaDB主从复制(异步,半同步)

   MariaDB主从复制(异步,半同步)  

复制简单架构:

复制原理图:

异步与半同步说明:

1.半同步复制
       在说明半同步复制之前我们先来了解一下,什么是同步复制?同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的“两阶段提交”做到的。虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降。使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DRBD),可以在下层的文件系统提供同步复制,允许第二个MySQL服务器在主服务器丢失的情况下接管(使用第二服务器的复本)。了解了同步复制我们正下面来说一下,什么是半同步复制?

MYSQL 5.5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。Semisynchronous Replication(半同步复制)则一定程度上保证提交的事务已经传给了至少一个备库。Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。

此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。

MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。
2.异步与半同步异同

默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
       MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。

配置示例(异步方式)

MASTER :node1 192.168.0.20

SLAVE  :node2 192.168.0.21

步骤:

一,安装mariadb

二,配置MASTER和SLAVEre

三,启动从服务器复制功能

一,安装mariadb,主从一致安装

mariadb-10.0.10-linux-x86_64.tar.gz

[[email protected] /]# mkdir /mydata/data -pv
mkdir: 已创建目录 "/mydata"
mkdir: 已创建目录 "/mydata/data"
[[email protected] /]# groupadd -r -g 306 mysql
[[email protected] /]# useradd -r -g 306 -u 306 mysql
[[email protected] /]# id mysql
uid=306(mysql) gid=306(mysql) 组=306(mysql)
[[email protected] /]# chown -R mysql.mysql /mydata/
[[email protected] /]# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/
[[email protected] /]# cd /usr/local/
[[email protected] local]# ln -sv mariadb-10.0.10-linux-x86_64 mysql
"mysql" -> "mariadb-10.0.10-linux-x86_64"
[[email protected] local]# cd mysql/
[[email protected] mysql]# chown -R root.mysql ./*
[[email protected] mysql]# ll
总用量 204
drwxr-xr-x  2 root mysql  4096 10月 28 15:06 bin
-rw-r--r--  1 root mysql 17987 3月  31 2014 COPYING
-rw-r--r--  1 root mysql 26545 3月  31 2014 COPYING.LESSER
......

[[email protected] mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

[[email protected]1 mysql]# mkdir /etc/mysql

[[email protected] mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
[[email protected] mysql]# vim /etc/mysql/my.cnf

添加如下最基本的三行:

datadir = /mydata/data        #数据目录路径

innodb_file_per_table = on     #innodb独立表空间

skip_name_resolve = on         #跳过域名解析

[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysqld    #复制启动脚本文件
[[email protected] mysql]# chkconfig --add mysqld                                            #添加开机管理mysqld服务

[[email protected] data]# ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql    #登录时候直接mysql可以登录
[[email protected] mysql]# service mysqld start                            
Starting MySQL..                [确定]

二,配置MASTER和SLAVE

配置过程:

1、master

(1) 启用二进制日志;

(2) 设置一个在当前集群中惟一的server-id;

(3) 创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号;

2、slave

(1) 启用中继日志;

(2) 设置一个在当前集群中惟一的server-id;

(3) 使用有复制权限用户账号连接至主服务器,并启动复制线程;

master配置:

创建授权用户:

MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘repluser‘@‘172.16.%.%‘ IDENTIFIED BY ‘replpass‘;

Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

slave配置:

分别重启master和slave

三,启动从服务器复制功能

在master上查看二进制日志的名称和position:

在slave开始执行同步:

MariaDB [(none)]>CHANGE MASTER TO MASTER_HOST=‘192.168.0.20‘, MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,MASTER_LOG_FILE=‘master-bin.000001‘,MASTER_LOG_POS=640,MASTER_CONNECT_RETRY=5,MASTER_HEARTBEAT_PERIOD=2;

查看:

启动线程:

start slave;

show slave status\G

完成。

配置示例(半同步方式)

半同步主从配置:

半同步复制:主服务器只要收到从服务器中的一台的返回信息,就会提交,否则需等待直至达到超时时间然后切换成异步再提交。可以使主从服务器的数据库数据的延迟较小,可以在损失很小的性能的前提下提高数据的安全性。

注意:至少有一台从服务器返回信息,主服务器才工作在同步状态,没有从服务器返回信息将切换到异步模式。

需要分别在master和slave端安装插件(谷歌提供)

(在以上配置的基础上)

主节点:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;

Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE ‘%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    |

+------------------------------------+-------+

4 rows in set (0.00 sec)

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;  #开启同步

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout=2000;  #等待从服务器超时2000毫秒转换为异步模式

Query OK, 0 rows affected (0.00 sec)

从节点:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;

Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE ‘%semi%‘;

+---------------------------------+-------+

| Variable_name                   | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled     | OFF   |

| rpl_semi_sync_slave_trace_level | 32    |

+---------------------------------+-------+

2 rows in set (0.00 sec)

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;

Query OK, 0 rows affected (0.00 sec)

如果从服务器已经启动,还需要重启IO_THREAD;

master查看:

SHOW GLOBAL STATUS LIKE ‘%semi%‘;

完成。

补充内容:

1,复制过滤器

让slave仅复制有限的几个数据库,而非所有;

有两种实现思路:

(1) 主服务器仅向二进制日志中记录有特定数据库相关的写操作;

问题:即时点还原将无法全面实现;

binlog_do_db=                  # 数据库白名单

binlog_ignore_db=           # 数据库黑名单

(2)从服务器的SQL_THREAD仅在中断日志中读取特定数据相关的语句并应用在本地;

问题:会造成网络带宽和磁盘IO的浪费;

Replicate_Do_DB=

Replicate_Ignore_DB=

Replicate_Do_Table=

Replicate_Ignore_Table=

Replicate_Wild_Do_Table=

Replicate_Wild_Ignore_Table=

2,基于SSL的复制

前提:支持SSL

(1) 主服务器端配置证书和私钥,并创建一个要求必须使用SSL连接的复制账号(REQUIRE SSL);

(2) SLAV端连接master时,使用MASTER_SSL相关的选项来配置证书等信息;

3,跟复制功能相关的文件:

master.info:用于保存slave连接至master时的相关信息;

relay-log.info:保存了当前slave节点上已经复制的当前二进制日志和本地relay log日志对应关系;

4,复制的监控和维护

(1) 清理日志:PURGE

(2) 复制监控

SHOW MASTER STATUS

SHOW BINLOG EVENTS

SHOW BINARY LOGS

SHOW SLAVE STATUS

(3) 如何判断slave是否落后于master

Seconds_Behind_Master: 0

(4) 如何确定主从节点数据是否一致?

通过表自身的CHECKSUM检查

使用percona-tools中pt-table-checksum

(5) 数据不一致的修复方法:

重复复制;

时间: 2024-08-08 07:10:30

L11 MariaDB主从复制(异步,半同步)的相关文章

Mariadb主从复制,半同步复制,主主复制

文章内容概览 主从复制介绍 主从复制的作用 复制工作流程 复制时应该注意的问题 主从复制配置 半同步复制配置 复制过滤器方法说明和配置 双主(主主复制)配置 文章环境说明 操作系统: [[email protected] ~]# cat/etc/redhat-release CentOS release 6.6 (Final) [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 [[email protected] ~]# uname -m

mysql主从复制异步半同步实例

建立mysql的复制 node1: mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+-----

MySQL主从复制:半同步、异步

MySQL主从复制:半同步.异步 大纲 前言 如何对MySQL进行扩展? MySQL Replication WorkFlow MySQL主从复制模式 实战演练 MySQL异步复制实现 MySQL半同步复制实现 实验中的思考 总结 前言 本篇我们介绍MySQL Replication的相关内容, 我们首先介绍MySQL CLuster的实现原理和如何一步步构建一个MySQL Replication Cluster 看懂本文需要了解: MySQL基本操作,MySQL日志类型及其作用 如何对MySQ

MariaDB(MySQL):半同步复制+ssl+复制过滤

一.半同步复制   1.mysql的复制 通过记录主服务器的二进制日志,并在从服务器上进行重放(replay)完成复制,默认都是异步进行的. 2.半同步复制 半同步复制是google贡献给MySQL的一个补丁,在MySQL 5.5之后就支持了,MariaDB都是支持的. MySQL的插件,一般在MySQL安装目录下; 半同步复制插件默认没有启用,需要自己安装,/usr/local/mysql/lib/plugin可以看到semisync_master.so和semisync_slave.so和其

第四阶段 (七)MySQL REPLICATION(主从复制、半同步复制、复制过滤)

Linux运维 第四阶段 (七)MySQL REPLICATION(主从复制.半同步复制.复制过滤) 一.MySQL Replication相关概念: 1.复制的作用:辅助实现备份:高可用HA:异地容灾:分摊负载(scaleout):rw-spliting(mysql proxy工作在应用层). 2.master有多个CPU允许事务并行执行,但往二进制日志文件只能一条条写:slave比master要慢:master-slave默认异步方式传送. 3.半同步:仅负责最近一台slave同步成功,其它

mysql数据库备份,主从复制及半同步复制

1.使用mysqldump备份数据库并通过备份及二进制日志还原数据(备份完后再写入数据,然后再删库) mysqldump -A --single-transaction -F --master-data=2 > /data/backup/mysql.sql -A备份所有数据库,--single-stransaction开启事务备份 -F 刷新日志 --master-data=2记录二进制日志位置 备份前数据库 在表里插入新记录,不在完全备份当中 删库 mysql -e 'drop databas

MySQL数据的主从复制、半同步复制和主主复制详解

一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制.单向.异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环

MySQL基于SSL的主从复制、半同步复制

(一)主从复制的架构图 1.在主数据库上,每执行一个有可能引起数据库发生改变的的语句,都会记录到二进制日志文件中,并把它们保存为事件. 2.每保存一个事件,我们就通过mysql的服务器3306端口发送给另外一台服务器 3.另外一台服务器把这个事件接收下来,接收的时候先保存到本地的中继日志里面 4.然后,mysql从中继日志文件里读一个事件,然后保存到数据文件 (二)一主多从 半同步架构图 1.Master和Slave-1在同一个机房 2.Slave-2和Slave-3在其它机房 3.半同步指的是

mysql主从复制、半同步复制、主主复制、及从库升级为主库讲解

一.主从复制结构 binlog dump --- io thread  ---  relay log ---- sql thread 1.总体讲解 主从复制时是异步的 半同步是在主从架构下安装插件来达到半同步的 半同步的优点:保证至少一个节点的数据和主节点的数据一致,缺点影响性能 导致主从不同步的原因是 现在的服务器都是单核多线程或者多核多线程,导致主节点可以同时执行多条读写操作,而记录二进制日志则必须按顺序有先后的记录,从节点在一条一条复制过去,生成中继日志,再执行语句. 多个库复制的话,可以