1、读写分离的目的
数据库负载均衡:
当数据库请求增多时,单例数据库不能够满足业务
需求。需要进行数据库实例的扩容。多台数据库同时相
应请求。也就是说需要对数据库的请求,进行负载均衡 但是由于数据库服务特殊原因,数据库扩容基本要
求为:数据的一致性和完整性。所以要保证多台数据库
实例的数据一致性和完整性,以MySQL为例来说,官方
提供了主从复制机制。
读写分离:
数据库的负载均衡不同于其他服务的负载均衡,数
据要求一致性。基于主从复制的基础上,常见的数据库
负载均衡使用的是读写分离方式。写入主数据库,读取
到从数据库。可以认为数据库读写分离,是一种特殊的
负载均衡实现。
实际业务中,读写分离存在的一个问题,不够实时性。
对于要求实时性高的业务
①缓存 写主库 写缓存 读缓存
②可以读主
③添加完数据之后,有一个跳转等待的时间(5s),数
据正在审核中
2、读写分离常见的实现方式
①业务代码的读写分离
需要在业务代码中,判断数据操作是读还是写,读连接
从数据服务器操作,写连接主数据库服务器操作
以当前LNMP为例,需要通过PHP代码实现读写分离MySQL
②中间件代理方式的读写分离
在业务代码中,数据库的操作,不直接连接数据库,而
是先请求到中间件服务器(代理)
由代理服务器,判断是读操作去从数据服务器,写操作
去主数据服务器
MySQL读写分离案
列实现
0、搭建M-S复制
主从复制的原理 :主服务器开启bin-log(记录了写操
作) 从服务器获取到主服务器的bin-log 记录到relay
log中。从服务器在通过异步的线程方式,对于relay-log
进行重放操作。
server02 mysql master 192.168.17.100
server06 mysql slave 192.168.17.105
1、master配置
①在master服务器授权,slave服务器replication
slave权限
slave是通过MySQL连接登录到master上来读取二进制
日志的,因此需要在
master上给slave配置权限
②master服务器打开bin-log日志,并标识server-id
mysql > grant replication slave on *.* to
'slave'@'192.168.17.%'identified by
'123456';参数
作用
File
记录到的bin-log日志文件名称
Position
bin-log日志文件所记录的位置
配置文件内容
注意重启mysql使配置生效
③制作一个完整的备份
如果确认主从的数据库,默认开始数据是一致的,可以
不做备份
④查看master上的bin-log及其position位置
查看并记录File的值,Position的值。之后需要在从服务
器上,指向这些信息
shell > vim /etc/my.cnf
[mysqld]
log-bin = mysql-index
server-id = 1
shell > mysqldump -uroot -p'123456' --all
databases > /root/mysql.sql
mysql > show master status;2、slave配置
①恢复备份文件
如果slave和master的数据本身就是相同的,可以不选择
备份和导入
②配置server-id,标识服务器
配置文件内容
由于是克隆获取的MySQL实例,所以auto.conf里记录的
UUID一样,需要删除/usr/local/mysql/data/auto.conf
文件,否则主从无法识别互相身份,重启自动生成新的
即可。
③配置slave replication
参数说明
shell > vim /etc/my.cnf
[mysqld]
server-id=2
mysql > stop slave;
mysql> change master to
master_host='192.168.17.101' ,master_user='sl
ave1' ,master_password='123456' ,master_log_fi
le='mysql-bin.000002' ,mas