MySQL运维篇(四)读写分离

一、介绍

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。

通过 MyCat 即可轻易实现上述功能,不仅可以支持 MySQL,也可以支持 Oracle和 SQL Server。
MySQL运维篇(四)读写分离_第1张图片

二、 一主一从

1. 原理

MySQL 的主从复制,是基于二进制日志(binlog)实现的。

2. 准备

MySQL运维篇(四)读写分离_第2张图片

三、 一主一从读写分离

MyCat 控制后台数据库的读写分离和负载均衡由 schema.xml 文件 datahost 标签的 balance 属性控制。
MySQL运维篇(四)读写分离_第3张图片
writeHost 代表的是写操作对应的数据库,readHost 代表的是读操作对应的数据库。 所以我们要想实现读写分离,就得配置 writeHost 关联的是主库,readHost 关联的是从库。

而仅仅配置好了 writeHost 以及 readHost 还不能完成读写分离,还需要配置一个非常重要的负责均衡的参数 balance,取值有4种,具体含义如下:
MySQL运维篇(四)读写分离_第4张图片
所以,在一主一从模式的读写分离中,balance 配置 1 或 3 都是可以完成读写分离的。

四、双主双从

1. 介绍

一个主机 Master1 用于处理所有写请求,它的从机 Slave1 和另一台主机 Master2 还有它的从机 Slave2 负责所有读请求。当 Master1 主机宕机后,Master2 主机负责写请求,Master1 、Master2 互为备机。架构图如下:
MySQL运维篇(四)读写分离_第5张图片

2. 准备

我们需要准备5台服务器,具体的服务器及软件安装情况如下:MySQL运维篇(四)读写分离_第6张图片

关闭以上所有服务器的防火墙:

systemctl stop firewalld

systemctl disable firewalld

3. 搭建

3.1 主库配置(Master1和Master2)

MySQL运维篇(四)读写分离_第7张图片

(1)修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:12^32-1,默认为1
server-id=1

#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03

# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

(2)重启MySQL服务器

systemctl restart mysqld

(3)创建账户并授权

#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

通过指令,查看两台主库的二进制日志坐标

show master status ;

3.2 从库配置

(1) 修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1232-1,默认为1
server-id=2

(2)重启MySQL服务器

systemctl restart mysqld

3.3 从库关联主库

3.3.1 两台从库配置关联的主库

需要注意 slave1 对应的是 master1,slave2 对应的是 master2。

(1)在 slave1(192.168.200.212)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.211', MASTER_USER='itcast', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002', MASTER_LOG_POS=663;

(2)在 slave2(192.168.200.214)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.213', MASTER_USER='itcast', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002', MASTER_LOG_POS=663;

(3)启动两台从库主从复制,查看从库状态

start slave;

show slave status \G;

MySQL运维篇(四)读写分离_第8张图片

3.3.2 两台主库相互复制

Master2 复制 Master1,Master1 复制 Master2。

(1)在 Master1(192.168.200.211)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.213', MASTER_USER='itcast', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002', MASTER_LOG_POS=663;

在 Master2(192.168.200.213)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.211', MASTER_USER='itcast', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002', MASTER_LOG_POS=663;

五、双主双从读写分离

1. 配置

MyCat 控制后台数据库的读写分离和负载均衡由 schema.xml 文件 datahost 标签的 balance 属性控制,通过 writeType 及 switchType 来完成失败自动切换的。

MySQL运维篇(四)读写分离_第9张图片

你可能感兴趣的:(【新】【黑马】【MySQL】,mysql,运维,数据库)