暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

什么样的硬件才能支撑好数据库的稳定运行

668

     有关注公众号朋友私信我,问我能不能写一写关于数据库对存储的一些要求。我想这个也是一个比较有意思的话题,毕竟我们以前也经常帮助用户做一些硬件规划和咨询。这个话题比较大,首先数据库种类太多了,不同数据库对硬件的要求有所差异,这里我还是以主流的几种关系型数据库来展开这篇小作文吧!

    数据库对于硬件资源的需求,实际上无非就几大类,CPU、内存、IO、网络 4个大的方面。随着这些年硬件技术的快速发展,实际上很少有客户面临一些硬件资源瓶颈了;其次对于硬件的需求,我认为应该从业务角度进行评估,这样才能相对准确的知道,大概什么的资源是可以满足我们业务系统稳定运行的。

    这里我熟悉以自己最为熟悉的Oracle为例,假定某省级系统数数据量10T左右,连接数预计5000,每年业务增长(数据量20%增幅),那么我们来简单计算一下。如如果是Oracle RAC,我们在估算CPU、内存资源的时候,需要考虑到单点故障,当单节点存活的情况之下,同时为了确保性能,其CPU资源消耗不要超过90%,如果有可能更一点最好。如果从这样角度来看,正常运行的情况之下,两节点集群,每个节点cpu使用量不超过40%是相对合理的,注意要去看评估资源的消耗峰值。

    对于内存来讲,从Oracle 11g开始,但进程的内存消耗超过10M,如果你连接达到5000,那么就需要至少50GB的pga参数设置;同时根据业务模型,假定是OLTP系统,5000连接,并发500的话,QPS 假定5000,平均每个SQL都非常高效,平均访问10个block(比较理想的情况是一个sql控制在5个block的访问甚至更低),默认8k的block size;那么每秒就读取大概400MB左右,如果我们为了避免物理读,我们应该设置多大的Buffer cache算合适呢?我们来看一下某大型客户核心系统的实际数据:

     我们可以看到这个客户的核心Oracle RAC是4节点集群,单节点高峰SQL每秒执行量是16000左右,每秒逻辑读诗16G左右,此时buffer cache命中率在99%,算是一个比较不错的数据。同时物理读每秒大概是174MB.而该实例的buffer cache实际大小设置是200GB,也就是说每秒的逻辑读大小小于Buffer cache size的1/10;每秒物理读IO 大约是Buffer cache大小0.01%左右。当然这里客户的机器配置相对较高,所以配置相对略大一些,其次是考拉到了4节点集群,如果某些节点出现故障,那么压力会转移到存活节点,此时对硬件资源要求就高一些。

     所以就拿上面的case来讲,虽然目前单节点cpu使用率15%不到,然而如果4个节点的集群宕掉3个,那么一个节点可能就需要扛住接近8000个数据库连接,每秒SQL执行量在7万左右,这就是一个相对比较大的数据了。因此配置数百core cpu也就能理解了。

     同时做资源规划的时候,我们通常还要预留30%的资源富余,以定对突发情况吧,因为没有人能真正准确的评估出具体的资源需求,业务毕竟是动态变化的。

     说完内存,我们再来讲解存储IO和存储空间需求。对于存储IO的需求,我们通常是根据业务的查询量来判断,不过这个也非常笼统,差异太大;实际上之前我也讲过,这主要还要看应用,如果应用代码质量较差,那么可能对存储IO要求就要高很多。其次是存储空间,如果是Oracle ASM,那么首先在划分逻辑卷的时候,我们要考虑损耗。以我们前段时间实施的一套zData分布式集群为例;客户使用的是单块7.68T的NVME SSD,每个节点插了16块盘。我们在划分存储池的时候,最好发现单块盘实际上可用容量大概在6.99T,损耗在8%左右,然后再进行一次逻辑卷划分(还需要考虑到ASM 冗余方式,Failgroup等等),因此最好单个LUN大概计算下来是在1.7T左右是相对合理的。最终存储池划分完毕之后,整个磁盘使用量在95%左右。

   当然除了分布式存储,现在市面上大量的集中式存储性能也不错了,也有很多全闪阵列,性能也都很高,足以满足大部分业务系统。毕竟并非所有客户的系统对IO要求都很高(吞吐、延迟、IOPS等)。

  

  讲完Oracle数据库,我们再来说说其他的国产数据库,比如目前最火的分布式数据库OceanBase,先来看看OceanBase官方文档对于资源的需求说明:

以下数据来自OB官方文档:


    因为OB是分布式数据库,因此完全不需要存储阵列了,也不需要分布式存储了,只需要一堆X86服务器即可。那么对于x86服务要求来讲,如果要跑企业级业务,那么性能最低配置要求是32c/256G + 2TB SSD+万兆网卡。实际上之前看到某些客户的OBServer配置还是蛮高的,都是96core/512G内存,本地磁盘3T SSD+。

    我们再来看看TiDB的生产部署要求:

-以下数据来源于TiDB官方文档

组件CPU内存硬盘类型网络实例数量(最低要求)
TiDB16 核+48 GB+SSD万兆网卡(2 块最佳)2
PD8 核+16 GB+SSD万兆网卡(2 块最佳)3
TiKV16 核+64 GB+SSD万兆网卡(2 块最佳)3
TiFlash48 核+128 GB+1 or more SSDs万兆网卡(2 块最佳)2
TiCDC16 核+64 GB+SSD万兆网卡(2 块最佳)2
监控8 核+16 GB+SAS千兆网卡1


注意

  • 生产环境中的 TiDB 和 PD 可以部署和运行在同一台服务器上,如对性能和可靠性有更高的要求,应尽可能分开部署。

  • 强烈建议分别为生产环境中的 TiDB、TiKV 和 TiFlash 配置至少 8 核的 CPU。强烈推荐使用更高的配置,以获得更好的性能。

  • TiKV 硬盘大小配置建议 PCIe SSD 不超过 4 TB,普通 SSD 不超过 1.5 TB。

  • TiFlash 支持多盘部署。

  • TiFlash 数据目录的第一块磁盘推荐用高性能 SSD 来缓冲 TiKV 同步数据的实时写入,该盘性能应不低于 TiKV 所使用的磁盘,比如 PCIe SSD。并且该磁盘容量建议不小于总容量的 10%,否则它可能成为这个节点的能承载的数据量的瓶颈。而其他磁盘可以根据需求部署多块普通 SSD,当然更好的 PCIe SSD 硬盘会带来更好的性能。

  • TiFlash 推荐与 TiKV 部署在不同节点,如果条件所限必须将 TiFlash 与 TiKV 部署在相同节点,则需要适当增加 CPU 核数和内存,且尽量将 TiFlash 与 TiKV 部署在不同的磁盘,以免互相干扰。

  • TiFlash 硬盘总容量大致为:整个 TiKV 集群的需同步数据容量 TiKV 副本数 * TiFlash 副本数
    。例如整体 TiKV 的规划容量为 1 TB、TiKV 副本数为 3、TiFlash 副本数为 2,则 TiFlash 的推荐总容量为 1024 GB 3 * 2
    。用户可以选择同步部分表数据而非全部,具体容量可以根据需要同步的表的数据量具体分析。

  • TiCDC 硬盘配置建议 500 GB+ PCIe SSD。


组件磁盘空间要求健康水位使用率
TiDB
  • 日志盘建议最少预留 30 GB。

  • v6.5.0 及以上版本默认启用了 Fast Online DDL 对添加索引等 DDL 操作进行加速(通过变量 tidb_ddl_enable_fast_reorg
     控制)。如果业务中可能存在针对大对象的 DDL 操作,或需要使用 IMPORT INTO
     SQL 语句导入数据,推荐为 TiDB 准备额外的 SSD 磁盘空间(建议 100 GB+)。配置方式详见设置 TiDB 节点的临时空间。

低于 90%
PD数据盘和日志盘建议最少各预留 20 GB低于 90%
TiKV数据盘和日志盘建议最少各预留 100 GB低于 80%
TiFlash数据盘建议最少预留 100 GB,日志盘建议最少预留 30 GB低于 80%
TiUP
  • 中控机:部署一个版本的 TiDB 集群占用不超过 1 GB 空间,部署多个版本集群所占用的空间会相应增加

  • 部署服务器(实际运行 TiDB 各组件的机器):TiFlash 占用约 700 MB 空间,其他组件(PD、TiDB、TiKV 等)各占用约 200 MB 空间。同时,部署过程会占用小于 1 MB 临时空间(/tmp)存放临时文件

不涉及
Ngmonitoring
  • Conprof:3 x 1 GB x 组件数量(表示每个组件每天占用约 1 GB,总共 3 天) + 20 GB 预留空间

  • Top SQL:30 x 50 MB x 组件数量(每个组件每天占用约 50 MB,总共 30 天)

  • Top SQL 和 Conprof 共享预留空间

不涉及

其他的我们先不管,单就看存储层面,会有这样一句话:

TiKV 硬盘大小配置建议 PCIe SSD 不超过 4 TB,普通 SSD 不超过 1.5 TB。

由此可见,tidb对存储性能也是有要求的,比如你使用大容量的SATA SSD,那性能估计也上不去;建议是使用PCIe或者 SAS ssd会好一点。

总之,对于share-nothing架构的分布式数据库来讲,我认为对于硬件尤其是存储磁层的要求差不了太多。

 

最后我们再来看看集中式国产数据库,比如达梦、金仓、MogDB等等对于硬件的要求。

如下是达梦的官方安装文档对于硬件的要求:


关注点结果查询方式
明确部署架构单机/集群。正式版参照软件授权许可证。
是否安装操作系统是/否。建议不要最小化安装。
tar 命令需要安装。tar -help

注意:缺失 tar
 命令会导致数据库无法安装。
CPU 信息CPU 架构、颗数、核心数。lscpu
存储划分及挂载原则建议分 3 块盘符,分别是 dmdata 实例盘、dmbak 备份盘和 dmarch 归档盘。
原则盘符分配建议:
例如数据总量约为 50G 情况下 dmdata=100G(涉及 temp 和 ROLL 的扩展),dmbak=200G(涉及两次全量 + 多次增量),dmarch=50G 数据库软件安装可以默认到系统盘符,建议空间不要低于200G,应考虑 core 文件、日志文件的使用情况。
若不具备条件,可以使用一块盘符。
1、fdisk -l
 查看所有盘符信息,明确盘符使用是否正确;
2、blkid dev/sda
 查看盘符 uuid;
3、cat etc/fstab
 查看盘符故障点,应通过盘符 uuid 进行挂载。
UPS 和 raid 卡电池情况衡量标准:机房有没有 UPS、存储 raid 卡是否有电池,是否可以保障服务器持续工作、关闭服务器前是否能正常关闭数据库服务。如果满足的话,建议磁盘缓存开启,因为开启可以提高硬盘的读写速度;如果不满足要求,为保障数据的完整性和安全性,建议关闭。建议尽量能够满足服务器持续服务的要求。1、Windows 环境:打开“设备管理器”窗口,然后双击“磁盘驱动器”设备,展开驱动程序,在展开的设备中,单击右键。选择“属性”命令。在弹出的硬盘属性对话框中,切换到“策略”选项卡,然后选中“启用设备上的写入缓存”复选框,然后单击“确定”按钮。
2、Linux 环境:hdparm -W 1 dev/sda
,参数 1:开启,参数 0:关闭。
端口确定确定是否可用。Telnet 用法:telnet ip port
网络环境是否具备网卡个数及带宽集群环境原则要求提供不低于 1000M 的心跳网络。ifconfig
ethtool

 网卡设备。


    对于需要什么型号或者什么性能的存储或者是磁盘,我们看到没有任何建议。这可能是因为达梦的文档相对较老的原因。根据个人的实际经验;我认为如果是一个系统从Oracle平移到达梦数据库,那么你的硬件配置最起码不能比之前低,实际上存储层还要更高才行(之前我讲过达梦不支持多块写,因此对IOPS要求会更高);不过就现在市面上的SSD来讲,无论是SAS还是PCIe ,我想足以支持99%的业务系统了。当然容量大小又是另外一个话题。

   同样金仓数据库对于硬件的要求也类似:

  我们可以看到其实也不高,而且描述非常之简单。

  最后我们来看看MogDB的安装要求:


项目配置描述
内存功能调试32GB以上。
性能测试和商业部署时,单实例部署建议128GB以上。
复杂的查询对内存的需求量比较高,在高并发场景下,可能出现内存不足。此时建议使用大内存的机器,或使用负载管理限制系统的并发。
CPU功能调试最小1×8 核,2.0GHz。
性能测试和商业部署时,单实例部署建议1×16核,2.0GHz。
CPU超线程和非超线程两种模式都支持。但是,MogDB各节点的设置需保持一致。
硬盘用于安装MogDB的硬盘需最少满足如下要求:
- 至少1GB用于安装MogDB的应用程序。
- 每个主机需大约300MB用于元数据存储。
- 预留70%以上的磁盘剩余空间用于数据存储。
建议系统盘配置为RAID1,数据盘配置为RAID5,且规划4组RAID5数据盘用于安装MogDB。有关RAID的配置方法在本手册中不做介绍。请参考硬件厂家的手册或互联网上的方法进行配置,其中Disk Cache Policy一项需要设置为Disabled,否则机器异常掉电后有数据丢失的风险。
MogDB支持使用SSD盘作为数据库的主存储设备,支持SAS接口和NVME协议的SSD盘,以RAID的方式部署使用。
网络要求300兆以上以太网。
建议网卡设置为双网卡冗余bond。有关网卡冗余bond的配置方法在本手册中不做介绍。请参考硬件厂商的手册或互联网上的方法进行配置。
MogDB网络如果配置bond,请保证bond模式一致,不一致的bond配置可能导致MogDB工作异常。

 

   上述文档很大一部分是从openGauss转移而来,实际上根据我们的各行各大客户的实际部署生产的经验来看,存储层我们建议都是SSD,最起码要配置SATA SSD,机械盘通常是不建议使用的,除非你是测试环境或者非常小型的业务系统。


   最后我们来简单总结一下:

   1、 分布式数据库对于硬件环境的要求,尤其是存储层,可参考厂商的建议配置;其次各家分布式数据库的要求差不多并不大,毕竟都是share-nothing架构;无非就是一堆x86服务器+磁盘而言。

   2、对于集中式数据库来讲,如果要进行评估,那么计算能力方面,我认为最起码不能比之前Oracle/MySQL环境低,其次对于存储层,都建议使用SSD。毕竟大部分数据库的写能力是比Oracle之类的要差很多的。

   3、就现在SSD的价格来说,其实我认为都不是什么大问题了,至于说数据库使用存储阵列,那么同样的道理,根据IO能力去测算就知道了。

   4、无论是分布式数据库还是集中式数据库,我们在进行硬件规划时,都需要考虑一定的冗余能力,扩展能力。

文章转载自Roger的数据库专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论