ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

TDengine Enterprise 多副本存储实战:多级存储、负载均衡与共享存储(S3)完整配置指南

TDengine Enterprise 多副本存储实战:多级存储、负载均衡与共享存储(S3)完整配置指南 TDengine Enterprise 多副本存储实战多级存储、负载均衡与共享存储S3完整配置指南【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址: https://gitcode.com/taosdata/tdengine本文聚焦 TDengine Enterprise 的两大进阶存储能力——多级存储Multi-Tier Storage与共享存储Shared Storage基于官方文档docs/en/12-operations-and-tooling/02-operations/07-multi.md展开。读完本文你将掌握dataDir三级存储挂载点的完整配置方法、minDiskFreeSize等空间均衡参数的原理以及ssEnabled、ssAccessString等共享存储配置项与ss_keeplocal、ssmigrate等数据库级参数的用法并能估算对象存储的读写请求成本完成冷数据下线的生产级部署方案。多级存储与共享存储解决什么问题TDengine Enterprise 的多级存储功能将“近期、高频访问”的数据放在高速介质上将“老旧、低频访问”的数据放到低成本介质上目标有四个降低存储成本——分层后海量极冷数据放在廉价介质上经济收益显著提升写入性能——每一层都支持多挂载点且 WAL 预写日志在 Level 0 层支持多挂载点并行写入。官方实测支持每秒持续写入 3 亿 数据点并在机械硬盘上实现最高约 2 GB/s 的磁盘 IO 吞吐运维简单——各层挂载点配置好后数据迁移等任务无需人工干预扩容更灵活对 SQL 透明——查询无论是否跨层单条 SQL 即可返回全部数据。多级存储涉及的介质全部是本地存储设备。除了本地设备TDengine 还支持对象存储作为存储设备但由于大多数对象存储系统自身已有多副本再叠加 TDengine 的多副本会造成空间浪费。为此TDengine 进一步将对象存储升级为共享存储Shared Storage存储设备在逻辑上只保留一份数据供整个集群的所有节点共享既大幅降低存储空间和成本查询时依旧透明。版本注意共享存储自 3.3.7.0 版本首次发布是对 3.3.0.0 版本对象存储S3能力的增强。3.3.7.0 与之前的版本不兼容——如果此前已启用对象存储S3功能升级到 3.3.7.0 及以上版本需要手动处理存量数据。多级存储dataDir 三级挂载配置多级存储支持3 个层级Level 0/1/2每层最多128 个挂载点。配置入口是/etc/taos/taos.cfg中的dataDir指令dataDir [path] level primary参数说明参数说明path挂载点目录路径level存储介质层级取值 0/1/2。Level 0 存最新数据Level 1 存次新数据Level 2 存最旧数据省略默认为 0。数据在层级间流向为 Level 0 → Level 1 → Level 2。同一层可挂多块盘该层数据文件在这些盘之间分布。跨层的数据搬迁由系统自动完成无需用户干预primary是否为主挂载点0否或 1是省略默认为 1。配置中只允许存在一个主挂载点level0, primary1官方推荐的典型配置方案Level 0 配置多个挂载点每个挂载点对应一块 SAS 盘Level 1 配置多个挂载点每个挂载点对应一块或多块 SATA 盘。一个完整的三层配置示例dataDir /mnt/data1 0 1 dataDir /mnt/data2 0 0 dataDir /mnt/data3 1 0 dataDir /mnt/data4 1 0 dataDir /mnt/data5 2 0 dataDir /mnt/data6 2 0配置约束官方明确说明多级存储不允许跨层配置。合法方案只有三种仅 Level 0Level 0 Level 1Level 0 Level 1 Level 2。不允许只配置 level0 和 level2 而跳过 level1禁止手动移除正在使用的挂载盘当前挂载盘不支持非本地网络盘。从源码结构看层级上限由 include/util/tdef.h 中的TFS_MAX_LEVELTFS_MAX_TIERS - 1约束source/libs/tfs/src/tfs.c 中按for (int32_t level 0; level TFS_MAX_LEVEL; level)逐层组织挂载点与文档描述的三层模型一致。负载均衡主挂载点与 Level 0 多盘写放大多级存储中只有一个主挂载点它承担系统最重要的元数据存储并且当前 dnode 上各 vnode 的主目录也落在该 dnode 的主挂载点上这会把该 dnode 的写入性能限制在单盘 IO 吞吐水平。自 TDengine 3.1.0.0 起如果某 dnode 配置了多个 Level 0 挂载点系统会将该 dnode 上所有 vnode 的主目录均匀分布到所有 Level 0 挂载点上让多个挂载点分摊写入负载。在网卡 IO 等处理资源不构成瓶颈时通过优化集群配置官方测试结果表明整个系统的写入能力与 Level 0 挂载点数量呈线性关系——Level 0 挂载点越多系统整体写入能力线性上升。这也是“每层多挂载点”设计的核心收益所在。同层挂载点选择策略minDiskFreeSize 与 disable_create_new_file一般情况下TDengine 为新建数据文件选择同层挂载点时采用轮询round-robin策略。但现实中各盘容量不同或同容量下已写入数据量不同各盘剩余空间容易失衡轮询可能选中剩余空间极小的盘。为此引入两个控制参数1. minDiskFreeSize3.1.1.0 起当某块盘可用空间小于等于该阈值时该盘不再被选中新建数据文件。单位为字节。例如设为 2GB则剩余空间不足 2GB 的挂载点会被跳过。在 source/common/src/tglobal.c 中可以看到该参数注册为int64类型默认值TFS_MIN_DISK_FREE_SIZE为50MB50 * 1024 * 1024最大值为TFS_MIN_DISK_FREE_SIZE_MAX即2TB见 include/util/tdef.h。配置生效范围是服务器CFG_SCOPE_SERVER且支持动态生效CFG_DYN_ENT_SERVER即修改后无需重启。2. disable_create_new_file3.3.2.0 起用于禁止在某个挂载点上新建文件默认值false即默认允许在每个挂载点生成新文件。典型用途是在下线某块盘前先禁止该挂载点写入新文件等待存量文件自然迁走。共享存储配置项全解共享存储可将 MinIO、腾讯云 COS、Amazon S3 等任意 S3 兼容对象存储或本地挂载的 NAS、SAN 作为共享存储设备。注意与多级存储联用时各层介质上的数据可能按规则迁移到共享存储并删除本地数据文件。相关配置项均位于/etc/taos/taos.cfg完整参数表如下参数名说明ssEnabled是否启用共享存储取值0/1/2。0默认为禁用1仅启用手动迁移2同时启用自动迁移ssAccessString访问共享存储的选项字符串格式device-type:option-nameoption-value;...可用选项随设备类型不同而不同见下文ssUploadDelaySec数据文件保持多久不变后才上传到共享存储单位秒。最小 1最大 259200030 天默认 60 秒ssPageCacheSize共享存储页缓存页数单位页。最小 4最大 1024×1024×1024默认 4096ssAutoMigrateIntervalSec本地数据文件自动上传到共享存储的触发周期单位秒。最小 600最大 100000默认 3600这些参数的注册与取值边界可在 source/common/src/tglobal.c 中得到印证ssEnabled范围 0~2ssAutoMigrateIntervalSec范围 600~100000ssPageCacheSize范围 4~1024×1024×1024ssUploadDelaySec范围 1~60×60×24×30与文档表格一致。另外从 source/util/src/tconfig.c 的源码可以看到ssAccessString因包含敏感凭据信息在配置导出dump时会被显式跳过运维导出配置时需注意凭据不会出现在 dump 结果中。ssAccessStringS3 兼容对象存储使用 S3 兼容对象存储时device-type必须为s3可用选项如下选项说明endpoint对象存储服务的主机名/IP可带端口bucket桶名protocolhttps或http默认httpsuriStylevirtualHost或path默认virtualHost。注意部分对象存储厂商只支持其中一种region对象存储服务的区域可选accessKeyId访问密钥 IDsecretAccessKey私有访问密钥chunkSize分块大小MB超过该大小的文件走分片上传默认 64maxChunks分片上传允许的最大分片数默认 10000maxRetry遇到可重试错误时的最大重试次数默认 3负值表示无限重试verifyPeer是否校验对端服务端证书仅在protocolhttps时有效默认 false完整配置示例ssAccessString s3:endpoints3.amazonaws.com;bucketmybucket;uriStylepath;protocolhttps;accessKeyIdAKMYACCESSKEY;secretAccessKeyMYSECRETACCESSKEY;regionus-east-2;chunkSize64;maxChunks10000;maxRetry3;verifyPeerfalsessAccessString本地挂载的存储设备对 TDengine 而言本地挂载的网络存储设备与本地磁盘等价。将其用作共享存储时device-type必须为fs只有一个选项选项说明baseDir目录路径TDengine 将其作为共享存储使用示例ssAccessString fs:baseDir/var/taos/ss验证共享存储可用性taosd --checkss在taos.cfg中配置好共享存储后可用taosd命令的--checkss参数检查配置的服务是否可用taosd --checkss如果配置的共享存储服务不可访问该命令运行时会输出对应的错误信息。从源码看--checkss选项的解析位于 source/dnode/mgmt/exe/dmMain.c仅在USE_SHARED_STORAGE编译宏下生效这是企业版特性。其执行流程由dmCheckSs()完成先检查ssEnabled是否为 0为 0 则提示shared storage is disabled并返回TSDB_CODE_OPS_NOT_SUPPORT随后依次调用tssInit()初始化共享存储、tssCreateDefaultInstance()创建默认实例任一步失败都会打印错误码。这解释了为什么ssEnabled必须先于--checkss检查被正确配置。创建使用共享存储的数据库配置完成后可启动 TDengine 集群然后创建使用共享存储的数据库create database demo_db duration 1d ss_keeplocal 3d;向demo_db写入时序数据后超过 3 天的数据会自动被切分并迁移到共享存储。若ssEnabled为2mnode 每小时下发一次共享存储迁移检查命令存在需要上传的时序数据时自动切分并迁移。该过程也可以用 SQL 手动触发ssmigrate database db_name;如果ssEnabled为1mnode 永远不会自动触发迁移必须手动触发。手动迁移入口ssmigrate在服务端对应 source/dnode/mnode/impl/src/mndSsMigrate.c 中的 mnode 处理逻辑vnode 侧的执行位于 source/dnode/vnode/src/vnd/vnodeSvr.c。数据库级共享存储参数建库/改库时指定如下#参数默认值最小值最大值说明1ss_keeplocal3651365000数据在本地保留的天数即数据文件在本地磁盘上保留多久后才可迁移到共享存储。默认单位天支持 m分钟、h小时、d天2ss_chunkpages1310721310721048576迁移对象的尺寸阈值与tsdb_pagesize参数相同不可修改单位 TSDB 页3ss_compact101TSDB 文件首次迁移前是否自动执行 compact 操作这些参数在源码中有明确的边界校验解析层在 source/libs/parser/src/parTranslater.c 对ss_chunkpages、ss_compact做范围检查并对ss_keeplocal的单位后缀做合法性校验仅允许 m/h/d还要求ss_keeplocal 3 * durationmnode 落库前在 source/dnode/mnode/impl/src/mndDb.c 会再次校验ssChunkSize是否落在TSDB_MIN_SS_CHUNK_SIZE~TSDB_MAX_SS_CHUNK_SIZE之间、ssCompact是否在 0~1 之间宏定义见 include/util/tdef.h。这三个参数同时也是系统表列见 source/common/src/systable.c。对象存储读写请求量估算对象存储的使用成本与存储数据量及请求次数相关分上传与下载两个过程估算。数据迁移上传当 TSDB 时序数据超出ss_keeplocal指定的时间后leader vnode 会把相关数据文件切分成多个文件块file block每块默认512MBss_chunkpages * tsdb_pagesize最后一块除外全部文件块上传到共享存储除最后一块外的所有文件块从本地磁盘删除。建库时可通过ss_chunkpages调整块大小从而控制每个数据文件的上传次数。head、stt、sma 等其他类型文件同样上传到共享存储但会在本地文件系统中保留以加速预计算相关查询。迁移成功结束后leader vnode 会在共享存储中创建/更新一个 manifests 文件保存迁移信息follower vnode 随后从共享存储下载该数据文件的最后一块以及其他所有文件到本地从而完成整体迁移——它们依赖 manifests 文件决定具体需要下载哪些文件。因此数据迁移期间的读写请求次数约为Read/Write Count Number of Data Blocks (Number of Other Files 2) x Number of vnodes数据下载查询查询过程中如需访问对象存储中的数据TSDB不会下载整个数据文件而是计算所需数据在文件中的位置只把相关数据下载到 TSDB 页缓存再返回给查询执行引擎。后续查询先检查页缓存中是否已有该数据命中则直接使用从而有效减少对对象存储的下载次数。多个相邻数据页会作为单个数据块从对象存储下载进一步减少下载次数。每个数据页大小由建库时的tsdb_pagesize参数指定默认 4KBDownload Count Number of Data Blocks Needed for Query - Number of Cached Data Blocks页缓存是内存缓存节点重启后数据需要重新下载。缓存采用LRU最近最少使用策略空间不足时淘汰最久未使用的数据。缓存大小可通过ssPageCacheSize调整——通常缓存越大下载次数越少。Azure Blob Storage 支持现状文档明确说明Azure Blob 对象存储的支持当前临时禁用。如果你此前TDengine 3.3.7.0 发布前正在使用 Azure Blob 服务请等待后续新版本。原 Azure 章节内容含 Flexify S3 网关、s3EndPoint/s3AccessKey/s3BucketName多服务配置等已在文档中以注释形式保留。适用前提与限制小结多级存储的挂载点必须是本地存储设备不支持非本地网络盘在用挂载盘禁止手动移除合法的多级配置只有仅 0 层、01 层、012 层三种不能跨层跳过 Level 1全集群只允许一个主挂载点且必须在 Level 0共享存储是企业版能力--checkss检查与ssAccessString等配置均依赖企业版编译开关USE_SHARED_STORAGE3.3.7.0 引入共享存储后与 3.3.0.0~3.3.6.x 的对象存储S3功能不兼容升级前需按官方说明做手动迁移处理对象存储成本模型取决于块数与请求数建库时通过ss_chunkpages与tsdb_pagesize权衡迁移请求量通过ssPageCacheSize权衡查询下载量。原文档可参考docs/en/12-operations-and-tooling/02-operations/07-multi.md。【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址: https://gitcode.com/taosdata/tdengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表