目录
2、配置 amoeba 读写分离,之前两个 slave做读负载均衡
一、主从复制
MySQL 的主从复制和 MySQL 的读写分离两者有着紧密联系,首先要部署主从复制,只有主
从复制完成了,才能在此基础上进行数据的读写分离。
1、原理
主从复制的核心:2个日志、3个线程
master 线程:bin log 二进制日志、dump 线程
master 上的 dump 线程会监控 bin log 二进制日志的更新,若有更新会通知 slave的 I/O 线程
slave:relay log 中继日志、I/O 线程、SQL 线程
线程1:
slave上的 I/O 线程会向 master 申请同步 bin log 二进制日志的更新内容,slave的 I/O 线程把更新
内容写入自己的中继日志
线程2:
slave 的 SQL 线程把日志中的更新语句同步执行到内容,以达到和 master 数据库趋于一致
2、mysql支持的复制类型
基于语句的复制:在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句;MySQL
默认采用基于语句的复制,效率比较高。
基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
混合类型的复制:默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用
基于行的复制。
3、主从复制的工作过程
(1)Master节点将数据的改变记录成二进制日志(bin log),当Master上的数据发生改变时,则
将其改变写入二进制日志中。
(2)Slave节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改
变,则开始一个I/O线程请求 Master的二进制事件。
(3)同时Master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至
Slave节点本地的中继日志(Relay log)中,Slave节点将启动SQL线程从中继日志中读取二进制
日志,在本地重放,即解析成 sql 语句逐一执行,使得其数据和 Master节点的保持一致,最后I/O
线程和SQL线程将进入睡眠状态,等待下一次被唤醒。
注:
●中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
●复制过程②有一个很重要的限制,即复制在 Slave上是串行化的,也就是说 Master上的并行更新
操作不能在 Slave上并行操作。
4、MySQL主从复制延迟
①、master服务器高并发,形成大量事务
②、网络延迟
③、主从硬件设备导致:cpu主频、内存io、硬盘io
④、本来就不是同步复制、而是异步复制
从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,
减少磁盘操作。
从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样
提升了i/o方面性。
从库使用SSD磁盘
网络优化,避免跨机房实现同步
二、MySQL 主从复制架构搭建
1、前期准备
①、确认各主机名及IP地址,以下均在CentOS 7环境下配置。
主机名 |
IP地址 |
主要软件 |
Master(主) |
192.168.110.128 |
mysql-5.7 |
Slave1(从) |
192.168.110.129 |
mysql-5.7 |
Slave2(从) |
192.168.110.130 |
mysql-5.7 |
Amoeba(中继) |
192.168.110.131 |
jdk1.6、Amoeba |
client(客户端) |