mysql 【进阶】 读写分离架构

  1. 主从架构应用场景
  2. 主从架构原理
  3. 主从架构可能带来的问题
  4. 主从架构方案
  5. 动手搭建 一主多从
    1. 部署计划
    2. 搭建三个独立的 Mysql 服务
    3. 配置主从属性

主从架构应用场景

读写分离负载均衡

在生产环境下,有时候会遇见某个 sql 语句需要锁表,

导致暂时不能使用读的服务,这样就会影响现有业务,

这个时候可以使用主从复制架构,让主库负责写,从库负责读,

这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

其他应用场景

  • 灾备
  • 高可用(想多了,并没有)

主从架构原理

涉及到三个线程:

主节点 binary log dump 线程
当从节点连接主节点时,主节点会创建一个 log dump 线程,用于发送 bin-log 的内容。在读取 bin-log 中的操作时,此线程会对主节点上的 bin-log 加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。

从节点I/O线程
当从节点上执行 start slave 命令之后,从节点会创建一个 I/O 线程用来连接主节点,请求主库中更新的 bin-log。I/O 线程接收到主节点 binlog dump 进程发来的更新之后,保存在本地 relay-log 中。

从节点SQL线程
SQL 线程负责读取 relay log 中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。

主从架构可能带来的问题

数据不具备一至性(不像 集群架构

从库更新延迟的问题(量大的线上业务,因此不是所有的业务都适合读写分离架构

主从架构方案

动手搭建 一主多从

部署计划

服务器 数据库对象名称 部署路径 部署端口 集群中的 server-id
172.16.0.10 mysqlm /data/mysqlm 3321 0
172.16.0.11 mysqls1 /data/mysqls1 3322 1
172.16.0.12 mysqls2 /data/mysqls2 3323 2

搭建三个独立的 Mysql 服务

参考 基于 docker 搭建 mysql,修改里面部署的路径、容器名称等字段

在运行成功后,我们通过 Navicat 验证三个 Mysql 服务是否正常

此时,他们彼此是独立的

配置主从属性

编辑 mysqlmmy.cnf,在 [mysqld] 节点下追加

# 主从配置
# 要同步的数据库,逐一配置
binlog-do-db=shenyeshudian
# 不要同步的数据库,逐一配置
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
log-bin=mysql-master-bin 

编辑 mysqls1my.cnf,在 [mysqld] 节点下追加

# 主从架构
# 要同步的数据库,逐一配置
replicate-do-db=shenyeshudian
# 不要同步的数据库,逐一配置
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=personalsite
replicate-ignore-db=test
log-bin=mysql-bin
# mysql 服务id
server-id=1

编辑 mysqls2my.cnf,在 [mysqld] 节点下追加

# 主从架构
# 要同步的数据库,逐一配置
replicate-do-db=shenyeshudian
# 不要同步的数据库,逐一配置
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=personalsite
replicate-ignore-db=test
log-bin=mysql-bin
# mysql 服务id
server-id=2

编写完毕,重启这三个 mysql 。

启动主从

change master to master_host='192.168.2.175', master_port=3321, master_user='root', master_password='hexoadmincp2022' ;

start slave;

show slave status;

```
到这里已经搭建了一主多从架构,但是架构上并未实现读写分离

如何基于 Atlas 实现读写分离?


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:mysql 【进阶】 读写分离架构

字数:832

本文作者:夏来风

发布时间:2020-12-10, 21:06:40

原始链接:http://www.demo1024.com/blog/mysql-replication/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。