MariaDB常见架构(主从、主主、级联、半同步、多源)

一、最常见的当属主从架构,目的是为了缓解主服务器的读写压力,提高其可用性;从服务器对外开放,提高安全性

环境准备:准备两台主机,均部署MariaDB        

主机1:192.168.31.51        主机2:192.168.31.52

1.修改主机1配置文件为如下

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

[mysqld]
server_id = 1
log_bin = /var/lib/mysql/mysql-bin
binlog_format = row

日志记录格式分为

statement:记录每一条修改数据的sql语句

row:记录数据修改成什么样

mixedlevel:混合模式(混合statement和row)

2.重启主节点数据库

systemctl restart mariadb

3.修改从节点配置文件

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

[mysqld]
server_id = 2
binlog_format = row

注:此时从节点id一定不可和主节点id一致。

4.重启从节点数据库

systemctl restart mariadb

5. 主节点与从节点都初始化数据库

mysql_secure_installation

6.登录数据库

mysql -uxxx -pxxx

7.在主节点创建主从链接账号,并设置密码

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

8.在主几点查看二进制日志的信息

show master status;

9.在从节点数据库

change master to masetr_host='192.168.31.51',master_user='aaa',master_password='aaa',master_log_file='主节点二进制日志名',master_log_pos=主节点二进制日志值;

10.查看从节点状态

show slave status\G;

检查 Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

11.若有不是yes

stop slave;
start slave;

12.完成后可创建一个库,查看主从同步是否正常

create database ken character set utf8;

二、主主架构,可理解为互为主备模式,主要原因还是为了避免单点故障问题

但要考虑自增长id问题,此处设置两个不同的起始值,增长量一样便可避免自增长id冲突

思路:两台数据库均可读写,可外加keepalived做高可用

在使用keepalived要注意脑裂问题

双主架构后可再加从架构,用keepailved的vip去对外提供服务

环境准备:两台主机均部署MariaDB

主机1:192.168.31.51        主机2:192.168.31.52

由于上述已做主从复制架构,第一阶段的主从复制不再重复写入

1.修改主机1的配置文件

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

[mysqld]
server_id = 1
log_bin = /var/lib/mysql/mysql-bin
binlog_format = row
auto_increment_offset = 1 #增长起始值
auto_increment_increment = 2 #增长量

2.重启节点1数据库

systemctl restart mariadb

 3.修改节点2的配置文件

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

[mysqld]
server_id = 2
log_bin = /var/lib/mysql/mysql-bin
binlog_format = row
auto_increment_offset = 1 #增长起始值
auto_increment_increment = 2 #增长量

 4.重启节点2数据库

systemctl restart mariadb

5. 在节点2查看二进制日志状态信息

show master status;

6. 在节点2创建主从链接账号,并设置密码

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

7.在节点1建立链接

change master to master_host='192.168.31.52',master_user='bbb',master_password='bbb',master_log_file='节点2二进制日志名',master_log_pos=值;

8.在节点1查看主从链接状态

show slave status\G;

9.检查 Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

10.若有不是yes

stop slave;
start slave;

 三、级联复制

主从复制存在以下几点问题

(1)主库宕机后,从库可能丢失数据

(2)从库只有一个sql线程,复制可能存在延迟

产生这几点的原因为

(1)大量的并发语句产生的延迟

(2)查询语句可能造成了锁等待

(3)网络波动

解决办法:采用级联复制和半同步复制

级联复制解决主库的压力

半同步复制解决数据丢失问题

环境准备:

主机1:192.168.31.51(主节点)

主机2:192.168.31.52(从节点1)

主机3:192.168.31.53(从节点2)

1.修改主节点配置文件

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

[mysqld]
server_id = 1
log_bin = /var/lib/mysql/mysql-bin
binlog_format = row

2.重启主节点数据库

systemctl restart mariadb

3. 初始化数据库

mysql_secure_installation

4. 登录数据库

mysql -uxxx -pxxx

5.创建主从链接账号,并设置密码

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

6.查看主节点状态信息

show master status;

7.修改从节点1配置文件

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

[mysqld]
server_id = 2
log_bin = /var/lib/mysql/mysql-bin
binlog_format = row

8.重启从节点1数据库

systemctl restart mariadb

9.在从1节点建立主从链接

change master to master_host='192.168.31.51',master_user='ccc',master_password='ccc',master_log_file='mysql-bin.***',master_log_pos=值;

10.检查从节点状态

show slave status\G;

检查 Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

MariaDB常见架构(主从、主主、级联、半同步、多源)_第1张图片

11. 创建主从链接账号并设置密码

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

在从节点1查看状态信息(此时配置级联复制,从1变从2的主节点)

show master status;

12.在从2节点建立主从链接

change master to master_host='192.168.31.52',master_user='ddd',master_password='ddd',master_log_file='mysql-bin.***',master_log_pos=值;

13.在从2检查slave状态

MariaDB常见架构(主从、主主、级联、半同步、多源)_第2张图片

 14.验证:在主1创建一个库,在从1和从2是否都有这个库

由于从2节点数据库以从1节点数据库为主库,而从1节点数据库以主1节点数据库为主库;从2节点并没有直接和主节点数据库进行链接,而是中间跨越节点1

MariaDB常见架构(主从、主主、级联、半同步、多源)_第3张图片

 存在问题:从2节点没有主库1上创建的dog库

原因:从1节点的二进制日志在主和从1进行复制时,从库是sql线程生效,也就是中继日志生效,而从库的二进制日志并没有发生改变,所以在从1与从2进行复制时,没有同步过去!


四、半同步复制

基于主从架构

由于我的mariadb没有这个插件,所以从往上找的资源

MariaDB常见架构(主从、主主、级联、半同步、多源)_第4张图片

1. 主节点安装模块

 install plugin rpl_semi_sync_master soname "semisync_master.so";

2.将rpl_semi_sync_master_enabled启动

set global  rpl_semi_sync_master_enabled=1;

3.从节点安装模块

install plugin rpl_semi_sync_slave soname "semisync_slave.so";

4.从节点启动模块

 set global  rpl_semi_sync_slave_enabled=1;

5.从节点重新启动slave

stop slave;
start slave;

6.检查 Slave_IO_Running: Yes
        Slave_SQL_Running: Yes


五、多源复制

多主一从架构,其实就是把主库的数据都同步到一个从库上,做备份时直接在从库做备份即可。

环境准备:

主1:192.168.31.51

主2:192.168.31.52

从:192.168.31.53

1.确保三个节点的server_id不一致

 2.在两个主节点都创建主从链接账号,并设置密码

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

3.修改从节点配置文件

vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 3
log_bin = /var/lib/mysql/mysql-bin
binlog_format = row
master_info_repository = table
relay_log_info_repository = table

4.查看主1和主2的状态信息

show master status;

MariaDB常见架构(主从、主主、级联、半同步、多源)_第5张图片

MariaDB常见架构(主从、主主、级联、半同步、多源)_第6张图片

 5.从节点与主节点建立链接

change master to master_host='192.168.31.51',master_user='aaa',master_password='aaa';master_log_file='mysql-bin.000006',master_log_pos=385 for channel 'm1';

change master to master_host='192.168.31.52',master_user='aaa',master_password='aaa';master_log_file='mysql-bin.000006',master_log_pos=385 for channel 'm2';

6.检查

MariaDB常见架构(主从、主主、级联、半同步、多源)_第7张图片

 7.验证,在主库1上创建库first;在主库2上创建库second;在从库上检查

MariaDB常见架构(主从、主主、级联、半同步、多源)_第8张图片

存在问题:出库1上的first并没有同步到从库上!

 原因:在查看show slave status\G;时发现同步的主节点为主2节点,所以主1的库没有同步到从库上去。


补充:停止slave

stop slave;
reset slave all;
show slave status\G;

你可能感兴趣的:(MariaDB,mariadb,运维,数据库)