由于数据库数据越来越多,之前采用的主从复制的方式来完成读写分离,但是渐渐的主服务器已经不能很好的完成写操作的功能了。现在就只能采取分库分表来解决写操作负载。
把一个实例中的多个数据库拆分到不同的实例
把一个库中的表分离到不同的数据库中
以上两种方式如果还没有解决那就只能对数据库进行分片处理
数据库分片前的准备
对一个库中的相关表进行水平拆分到不同实例的数据库中
如何选择分区键
分区键要能尽量避免跨分片查询的发送
分区键要能尽量使各个分片中的数据平均
如何存储无需分片的表
每个分片中存储一份相同的数据
使用额外的节点统一存储
如何在节点上部署分片
每个分片使用单一数据库,并且数据库名也相同
将多个分片表存储在一个数据库中,并在表名上加入分片号后缀
在一个节点中部署多个数据库,每个数据库包含一个分片
如何分配分片中的数据
按分区键的Hash值取模来分配分片数据
按分区键的范围来分配分片数据
利用分区键和分片的映射表来分配分片数据
如何生成全局唯一ID
数据库分片演示
以下是我们要演示的业务场景
分片工具:
oneProxyp 安装和配置(因为是未开源的,所以只需要解压之后直接安装即可)
数据库操作:
服务器192.168.3.102
下载好安装包
解压
查看oneproxy的启动脚本
修改为当前目录
我们可以看到查看demo.sh里面只是存放了一个参数
进入到conf文件夹下修改proxy.conf
修改MySQL版本号 、ip、以及 控制的其他数据库节点
保留proxy-user-list,删掉proxy-user-group
服务器192.168.3.100
创建用户
创建数据库orders并授权
服务器192.168.3.101
服务器192.168.3.102
修改数据库名
现在运行一下oneproxy
ps -ef 是用标准的格式显示进程的
通过oneproxy加密password
将上面生成的加密密码copy过来
根据自身情况进行配置
查看默认配置的分区表
打开我们自己定义的分区表
分区表表名 订单表
分区键
分区键类型
分区方式
分片组
另外一张表 订单商品表
分类表
服务器192.168.3.100
创建三张上面配置的表
服务器192.168.3.101
服务器192.168.3.102
重启oneproxy
进入到oneproxy,查看配置情况
查看启动情况
写一个测试脚本进行测试
起始order_id
每insert操作order_id默认+1
完成表的插入
运行脚本
“Ctrl+C” 停止,
在三个服务器中进行汇总,看汇总数据是否 一致