幸福城市平台:数据库选型与优化实践
作者: Fly-bird 原文来源:https://tidb.net/blog/ded641b5
一、背景介绍
二、从 Oracle 到 MySQL:成本考量
三、MySQL 扩展性问题
四、从 MySQL 到 TiDB:优化与升级
五、TiDB 的优势与挑战
六、部署与实施
| 服务 | 配置 | 数量 || ———– | ————————— | – || tidb-server | 16C48G SAS 磁盘 200G | 4 || pd-server | 8C16G SSD 磁盘 200G | 3 || tikv-server | 16C48G64G SSD1.7TB*5 动态增加 | 7 || 监控 | 8C16G SAS 磁盘 200G | 1 |
由于不涉及在线数据分析,所以不部署 tiflash
| 服务 | 配置 | 数量 || ———– | ————————- | – || tidb-server | 16C48G SAS 磁盘 200G | 4 || pd-server | 8C16G SSD 磁盘 200G | 3 || tikv-server | 16C48G64G SSD1.7TB*5 动态增加 | 7 || 监控 | 8C16G SAS 磁盘 200G | 1 || ticdc | 16C64G SSD 磁盘 3Tb | 1 || 从库 | 和主库配置相同 | 1 |
七、优化与改进:幸福城市平台的未来方向
性能测试:<br>执行命令<br>fio -group_reporting -thread -name=iops_test -rw=randwrite -direct=1 -size=8G -numjobs=8 -ioengine=psync -bs=4k -ramp_time=10 -randseed=0 -runtime=60 -time_based<br>说明:bs=4k:IOPS 测试将每次 IO 写入的单元量设置为 4k,因为 SSD 的 page 一般大于等于 4k,设置这个值尽可能地增加 IOPS 的结果<br>direct=1:绕过操作系统的 buffer cache,以获取真实的 IO 效果<br>numjobs=8:同时创建8个同样的任务进行测试,一般8个任务就能吃满 IO 资源<br>iodepth=1:默认使用 psync 引擎因此队列深度大于1没有意义
测试结果:<br>write: IOPS=103k, BW=403MiB/s (422MB/s)(23.6GiB/60001msec)
成本:<br>同样配置<br>16 vCPU 64 GiB内存 2T nvme磁盘 1870.8/月<br>如果全部换成该磁盘成本:<br>1870.8712=157,147.2元/年<br>每年节省成本510652.8-157147.2=353505.6元/年<br>每年节省成本69.2%
为什么性能优势那么大一般都不使用:<br>如下是阿里云原文写的缺点:<br>警告 使用本地盘存储数据有丢失数据的风险,例如ECS实例所在物理机发生硬件故障时。请勿在本地盘上存储需要长期保存的业务数据。<br>建议您在应用层做数据冗余,保证数据的可用性。您可以使用部署集将业务涉及到的几台ECS实例分散部署在不同的物理服务器上,保证业务的高可用性和底层容灾能力。具体操作,请参见创建部署集。<br>如果您的应用无数据可靠性架构设计,强烈建议您在ECS实例中同时使用云盘或者备份服务,提高数据可靠性。更多信息,请参见云盘概述或什么是混合云备份HBR。
我们使用的TIDB 是一个分布式事务型的键值数据库,提供了满足 ACID 约束的分布式事务接口,并且通过 Raft 协议保证了多副本数据一致性以及高可用。如果某台服务器出现故障可以凭借TIDB的三副本策略恢复损坏的副本。
替换磁盘技术方案:
TIDB提供了 tiup cluster scale-out 命令用于集群扩容,扩容的内部逻辑与部署类似,tiup-cluster 组件会先建立新节点的 SSH 连接,在目标节点上创建必要的目录,然后执行部署并且启动服务。其中 PD 节点的扩容会通过 join 方式加入到集群中,并且会更新与 PD 有关联的服务的配置;其他服务直接启动加入到集群中。<br>语法<br>tiup cluster scale-out <topology.yaml> [flags]<br> 为要操作的集群名字,如果忘记集群名字可通过集群列表查看 <topology.yaml> 为事先编写好的扩容拓扑文件,该文件应当仅包含扩容部分的拓扑
下线特殊处理<br>由于 TiKV,TiFlash 和 TiDB Binlog 组件的下线是异步的(需要先通过 API 执行移除操作)并且下线过程耗时较长(需要持续观察节点是否已经下线成功),所以对 TiKV,TiFlash 和 TiDB Binlog 组件做了特殊处理:<br>对 TiKV,TiFlash 及 TiDB Binlog 组件的操作:<br>tiup-cluster 通过 API 将其下线后直接退出而不等待下线完成<br>执行 tiup cluster display 查看下线节点的状态,等待其状态变为 Tombstone<br>执行 tiup cluster prune 命令清理 Tombstone 节点,该命令会执行以下操作:<br>停止已经下线掉的节点的服务<br>清理已经下线掉的节点的相关数据文件<br>更新集群的拓扑,移除已经下线掉的节点<br>对其他组件的操作<br>o下线 PD 组件时,会通过 API 将指定节点从集群中删除掉(这个过程很快),然后停掉指定 PD 的服务并且清除该节点的相关数据文件<br>o下线其他组件时,直接停止并且清除节点的相关数据文件
八、结论:数据库选型的重要性与优化策略
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/9d018ba066dbdaa6ecdca5742】。文章转载请联系作者。
评论