继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

PIPIONE
关注TA
已关注
手记 1094
粉丝 147
获赞 702


知识背景

 一.mariadb复制相关知识

1.mariadb的来源

  

  mysql数据库目前在数据库市场中所占份额仅仅次于oracle数据库,同时也是开源数据库的龙头老大。由于mysql数据库的开源性和高性能,同时还是免费的(不过被oracle收购后不容乐观),因此,mysql之父又开启了一个mysql的新分支mariadb,mariadb相对mysql而言版更新快,新特性实装速度迅速,mysql官方版本的优点mariadb也会很快的加以吸收。

  

2.mariadb复制的流程

  

  mariadb数据库支持同步复制,半同步复制和异步复制,在复制的过程中一个服务器充当主服务器,而一个或者多个服务器做为从服务器。主服务器在进行修改时,会将更新写入二进制日志文件,并且维护文件的一个索引来跟踪日志循环。日志的记录会发送到从服务器进行数据修改。当从服务器到主服务器上获取二进制日志时,它会通知主服务器从日志中读取最后一次成功的更新的位置,从服务器则会接收从该位置之后发生的全部操作。

  

3.同步复制,异步复制,半同步复制

  

  同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。 

  异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。 

  半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交。若到达超时时长仍未收到则转为异步复制。

  

4.复制的常用架构

  

  复制技术在实际应用中有多种实现架构,常见的有以下几种:

  1.一主一从,即一台主数据库,一台从数据库;

  2.一主多从,即一台主数据库,多台从数据库,主要用在写操作不频繁,但是有着大量读操作的环境中;

  3.主主互备,即两台mariadb数据库服务器互相将对方作为自己的主服务器,自己又同时作为对方的从服务器进行复制。主要用于对数据库写操作较多的环境中,防止出现数据库的单点故障。

  4.双主多从,在主主互备的基础上,在加上多个从服务器,主要用户对数据库写操作比较多,同时查操作也比较多的环境中。

  

  

复制的实现

  

主从复制(基于异步)

  

节点  系统  mariadb ip

主节点 CentOS7.4   10.3.7  192.168.99.130

从节点 CentOS7.4   10.3.7  192.168.99.131

  

图示

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

2.1.安装mariadb,这里为了省事直接yum安装了,其他安装方式不会影响后续操作;清理iptalbes和selinux,防止干扰实验

    iptables -F

    iptables -X

    setenforce 0

    yum install mariadb-server -y

2.修改主数据库的配置文件

    # mariadb 10.2以前的版本

    vim /etc/my.cnf

    #10.3之后的版本已经放到/etc/my.cnf.d/下

    vim /etc/my.cnf.d/server.cnf 

在[mysqld]下添入一下字段

#唯一标示的id段,不可重复

server-id=1 

#开启二进制日志,可以自定义路径和文件名

log-bin=mysql-bin

#开启二进制中继日志并定义命名格式

relay-log=mysq-relay-bin

#复制的过滤项,负责过滤掉不需要复制的库和表

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

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

3.修改从数据的配置文件

# mariadb 10.2以前的版本

    vim /etc/my.cnf

    #10.3之后的版本已经放到/etc/my.cnf.d/下

    vim /etc/my.cnf.d/server.cnf 

    #唯一标示的id段,不可重复

    server-id=2

    #开启二进制日志,可以自定义路径和文件名

    log-bin=mysql-bin

    #开启二进制中继日志并定义命名格式

    relay-log=mysq-relay-bin

    #复制的过滤项,负责过滤掉不需要复制的库和表

    replicate-wild-ignore-table=mysql.%

    replicate-wild-ignore-table=test.%

    replicate-wild-ignore-table=information_schema.%

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

4.启动mariadb

#主从都执行

    systemctl start mariadb

5.同步数据库(如果都是新数据库不必做这步操作)

如果主数据库上已经有了数据,那么在执行复制之前要先行将两个数据库的数据同步。

#创建读锁,禁止写入数据

flush tables with read lock;

#同步完成后记得释放

6.创建复制用户,一般建议创建一个专门用来复制数据的账号,以免影响的数据的安全性。

#grant replication slave on *.* to '用户名'@'允许登陆的ip' identified by '密码';

grant replication slave on *.* to 'slave'@'192.168.99.131' identified by 'slave';

#使得授权生效

flush privileges;

#查看当前主库的二进制日志信息

show master status;

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

7.配置从数据库,将192.168.99.130作为主库

                #mariadb> change master to \

                                #-> master_host='192.168.99.130', 指定主库ip

                                #-> master_user='slave', 指定备份账号名

                                #-> master_password='slave', 指定备份账号的密码

                            #-> master_log_file='mysql-bin.000001', 主服务器的二进制日志名

                                #-> master_log_pos=851; 二进制文件的位置

mariadb> change master to \

                                -> master_host='192.168.99.130',

                                -> master_user='slave',

                                -> master_password='slave',

                                -> master_log_file='mysql-bin.000001',

                                -> master_log_pos=851;

8.从数据库开启slave

start slave;

9.检查运行状态

show slave status\G;

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

slave_IO_running和slave_SQl_running 是运行在从服务器节点上的主从复制线程,正常情况下均为yes

replicate_wild_ignore_table 显示的是不复制的库和表

  

双主复制(基于异步)

  

双主复制是在主从复制的基础上,对主从双方做一次身份反转。

架构图

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

1.在主从基础上继续做以下

#上一次的从作为本次的主

#grant replication slave on *.* to '用户名'@'允许登陆的ip' identified by '密码';

grant replication slave on *.* to 'slave'@'192.168.99.130' identified by 'slave';

#使得授权生效

flush privileges;

#查看当前主库的二进制日志信息

show master status;

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

2.在从数据库(上次的主)执行以下操作

mariadb> change master to \

                                -> master_host='192.168.99.131',

                                -> master_user='slave',

                                -> master_password='slave',

                                -> master_log_file='mysql-bin.000001',

                                -> master_log_pos=650;

3.启动备份

    start slave;

#查看运行状态

show status slave;

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

ps:

如果两台服务器都做数据更新时候回出现自增长字段发生冲突。

在配置文件加入

auto_increment_offset=1 开始点

auto_increment_increment=2 增长幅度

另外一台加入

auto_increment_offset=2 开始点

auto_increment_increment=2 增长幅度

新配置文件

server-id=#(id数字) 

log-bin=mysql-bin

relay-log=mysq-relay-bin

# “#”内填写对应数字来避免冲突

auto_increment_offset=#(开始点)

auto_increment_increment=# (增长幅度)

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

总的来说不推荐使用主主复制,mysql主主模型很难保证数据的一致性,所以仅仅作为演示。

配置半同步复制

  

半同步复制需要启动对应的插件

#查看半同步复制协议是否开启

show global variables like '%semi%';

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

开启半同步协议(旧版本需要手动安装,新版本已经内置,直接开启修好)

#旧版本安装

#主节点

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

#开启主节点半同步

SET GLOBAL rpl_semi_sync_master_enabled=1;

#设置超时时间

SET GLOBAL rpl_semi_sync_master_timeout=2000;

#从节点

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

开启从节点半同步复制

SET GLOBAL rpl_semi_sync_slave_enabled=1;

#新版本

#开启主节点半同步

SET GLOBAL rpl_semi_sync_master_enabled=1;

#设置超时时间

SET GLOBAL rpl_semi_sync_master_timeout=2000;

#从节点

SET GLOBAL rpl_semi_sync_slave_enabled=1;

半同步复制的主从和主主,都是基本异步复制的基础上的,因此配置过程和上面的配置流程相同。

©著作权归作者所有:来自51CTO博客作者Doumadouble的原创作品,如需转载,请注明出处,否则将追究法律责任

mysqlmariadb主从应用服务


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP