企业架构MySQL读写分离

学习目标和内容
1 、能够理解读写分离的目的
2 、能够描述读写分离的常见实现方式
3 、能够通过项目框架配置文件实现读写分离
4 、能够通过中间件实现读写分离
一、背景描述及其方案设
1 、业务背景描述
时间: 2014.6.-2015.9
发布产品类型:互联网动态站点 商城
用户数量: 10000-12000 (用户量猛增)
PV 100000-500000 24 小时访问次数总和)
QPS 50-100* (每秒访问次数)
DAU 2000 (每日活跃⽤户数) 之前业务中是单台 MySQL 提供服务,使用多台MySQL数据库务器,降低单台压力,实现集群架构的稳定性和高可用性 数据的一致性 完整性 replication通过业务比对和分析发现,随着活跃用户数增多,读取数据的请求变多,故着重解决读取数据的压力
2 、模拟运维设计方案
根据以上业务需求,在之前业务架构的基础上实现数据的读写分离
二、 MySQL 读写分离介
1 、读写分离的目的
数据库负载均衡
当数据库请求增多时,单例数据库不能够满足业务需求。需要进行数据库实例的扩容。多台数据库同时相应请求。也就是说需要对数据库的请求,进行 负载均衡 但是由于数据库服务特殊原因,数据库扩容基本要求为: 数据的一致性和完整性 。所以要 保证多台数据库实例的数据一致性和完整性 ,以 MySQL 为例来说,官方提供了 主从复制机制
读写分离:
数据库的负载均衡不同于其他服务的负载均衡,数据要求一致性。 基于主从复制的基础上,常见的数据库负载均衡使用的是读写分离方式。写入主数据库,读取到从数据库 。可以认为 数据库读写分离,是一种特殊的负载均衡实现。
实际业务中,读写分离存在的一个问题,不够实时性。
对于要求实时性高的业务
①缓存 写主库 写缓存 读缓存
②可以读主
③添加完数据之后,有一个跳转等待的时间( 5s ),数据正在审核中
2 、读写分离常见的实现方式
①业务代码的读写分离
需要在业务代码中,判断数据操作是读还是写,读连接从数据服务器操作,写连接主数据库服务器操作以当前LNMP 为例,需要通过 PHP 代码实现读写分离
②中间件代理方式的读写分离
在业务代码中,数据库的操作,不直接连接数据库,而是先请求到中间件服务器(代理)由代理服务器,判断是读操作去从数据服务器,写操作去主数据服务器
也就是如下图示架构
问:如何选择?
①业务实现读写分离,操作方便,成本低,当前的开发框架基本支持读写分离
②中间件代理服务器,除了能够实现读写分离,还可以作为数据库集群的管理平台
三、 MySQL 读写分离案 列实现
0 、搭建 M-S 复制
主从复制的原理 :主服务器开启 bin-log (记录了写操作) 从服务器获取到主服务器的bin-log 记录到 relay-log中。从服务器在通过异步的线程方式,对于 relay-log进行重放操作。
1 master 配置
①在 master 服务器授权, slave 服务器 replication slave 权限
slave 是通过 MySQL 连接登录到 master 上来读取二进制日志的,因此需要在master上给 slave 配置权限
mysql > grant replication slave on * . * to
'slave' @'192.168.17.%'identified by
'123456' ;
master 服务器打开 bin-log 日志,并标识 server-id
shell > vim /etc/my.cnf
配置文件内容
注意重启 mysql 使配置生效
③制作一个完整的备份
如果确认主从的数据库,默认开始数据是一致的,可以不做备份
④查看 master 上的 bin-log 及其 position 位置
查看并记录 File 的值, Position 的值。之后需要在从服务 器上,指向这些信息
2 slave 配置
①恢复备份文件
如果 slave master 的数据本身就是相同的,可以不选择备份和导入
②配置 server-id ,标识服务器
shell > vim /etc/my.cnf
配置文件内容
[mysqld]
server-id = 2
由于是克隆获取的 MySQL 实例,所以 auto.conf 里记录的UUID一样,需要 删除 /usr/local/mysql/data/auto.conf文件 ,否则主从无法识别互相身份,重启自动生成新的
即可。
③配置 slave replication
mysql > stop slave ;
mysql > change master to
master_host = '192.168.17.101' ,master_user = 'slave1' ,master_password = '123456' ,master_log_fi
le = 'mysql-bin.000002' ,master_log_pos = 333 ; mysql > start slave ;
参数说明
master_host master IP
master_user master 允许登录,拥有 replication slave权限
master_password 用户的密码
需要通过 mysql > show master status; master 执行
master_log_file master 记录的 bi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值