一、概述

Mysql数据库在单机工作时候存在单点故障,并且数据也存在损坏的可能,此时就需要做双机实时冗余,那就会用到常用的架构主从和主主。本次实践使用mariadb来实现冗余。

二、内容实践

1、主从复制的实现(本次实现主从均是新建系统)

在主节点和从节点上都要安装同一版本的mariadb数据库

 yum install -y mariadb-server

当前仓库中的版本是mariadb 10.3.28。

进入/etc/my.cnf.d目录,修改mariadb-server.cnf

image.png

设置开启自启动和立即启动服务

systemctl enable --now mariadb.service

查看当前数据库列表

image.png 查看当前日志位置 image.png

配置远程服务账号和密码

grant replication slave on *.* to 'repuser'@'192.168.22.%' identified by 'test';

image.png

#查看主从复制的帮助内容
help change master to;
****
CHANGE MASTER TO
  MASTER_HOST='master2.mycompany.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10;
****

将日志信息填写的change master to模板中

CHANGE MASTER TO
  MASTER_HOST='192.168.22.28',
  MASTER_USER='repuser',
  MASTER_PASSWORD='test',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='testbin.000002',
  MASTER_LOG_POS=540,

在从节点上配置server-id、log-bin和read-only(建议)选项

image.png 启动服务 image.png 配置主从模板到从服务器上 image.png 启动slave线程 image.png

验证,在主服务器创建数据库db1,在从服务器查看结果

主: image.pngimage.png 到此主从已经可以正常同步和使用。

2、主主模式的实现

主主模式如果在同时写入时,会存在主键冲突的问题,为了解决这个可以修改自动步进和初始值,同时要确定两台服务器均开启了二进制日志

主服务器: image.png 第二主服务器: image.png

配置第二主服务器,并开启slave进程。

CHANGE MASTER TO
  MASTER_HOST='192.168.22.28',
  MASTER_USER='repuser',
  MASTER_PASSWORD='test',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='testbin.000002',
  MASTER_LOG_POS=540,

配置主服务器访问第二主服务器

CHANGE MASTER TO
  MASTER_HOST='192.168.22.38',
  MASTER_USER='repuser',
  MASTER_PASSWORD='test',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mariadb-bin.000003',
  MASTER_LOG_POS=344

image.png image.png

验证测试

在主节点创建表插入3行数据

create table test(id int auto_increment primary key,user char(10));
insert test(user) values('user11'),('user12'),('user13');

image.png 在第二主节点向表中插入数据

insert test (user) values('user21'),('user22'),('user23');

image.png 可以看出已经避开了冲突的键值

三、总结

主主复制是通过互为从节点来实现同步,通过增值的规避解决主键冲突,但是如果两个节点同时写入时,仍然会有两个节点同时修改数据的情况,所以此种主主模式一般仅用于快速切换主备,不用来直接同时提供双写入。