迁移
Elasticsearch 6/7/8 到 Easysearch 2.x 迁移指南
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 5959 次浏览 • 2026-06-04 14:14

最近在协助客户进行 Elasticsearch 到 Easysearch 的迁移时,发现大家最关心的问题是"当前版本能否直接使用快照迁移"。这个问题看似简单,但不同版本的答案差异较大。本文将基于实际测试经验,梳理各版本的迁移路径和注意事项。
迁移路径速览
根据源 ES 版本,可以直接对照下表选择迁移方案:
| 源 ES 版本 | 能否直接快照恢复 | 推荐方案 | 实施复杂度 |
|---|---|---|---|
| ES 6.x | 否 | INFINI Gateway 迁移 或 ES 7.10.x 中转 | 较低 |
| ES 7.0 - 7.11 | 是 | 直接快照恢复 | 较低 |
| ES 7.12 - 7.17 | 否 | INFINI Gateway 迁移 | 较低 |
| ES 8.x | 否 | INFINI Gateway 迁移 | 较低 |
结论:ES 7.0-7.11 是迁移最顺畅的版本窗口,可直接快照恢复;其他版本也有成熟的迁移方案,只是路径不同。
版本差异的原因
迁移路径的差异主要源于两方面:Lucene 版本兼容性和快照元数据格式变化。
Lucene 兼容性:Easysearch 2.x 底层要求的最低 Lucene 版本对应 ES 7.0.0。ES 6.x 的索引文件使用老版本 Lucene,直接恢复会报错:
The index was created with version [6.8.23] but the minimum compatible version is [7.0.0].
快照元数据格式:ES 7.12 开始在快照中引入 uuid、cluster_id 字段,7.14 增加 writer_uuid,8.x 又引入 transport_version。这些字段与 Easysearch 2.x 的快照解析器不兼容。
因此,ES 7.0-7.11 成为迁移的"黄金窗口"——既满足 Lucene 兼容性要求,快照格式又足够简洁。
ES 7.0-7.11:直接快照恢复
这是测试最充分的迁移路径,已验证版本包括 ES 7.0.1、7.8.1、7.10.2 OSS、7.11.2。
已验证能力:
- 单索引 / 多索引 / 通配符批量恢复
- 常见字段类型与别名
- 自定义 settings、多分片索引
- ILM 托管索引、数据流后备索引、冻结索引
操作步骤:
# 1. 源 ES 创建快照
PUT /_snapshot/my_backup/snapshot_1
{
"indices": "索引列表",
"include_global_state": false
}
# 2. Easysearch 注册同一快照仓库
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/path/to/snapshot/repo",
"readonly": true
}
}
# 3. 恢复快照
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "索引列表",
"include_global_state": false
}
ES 6.x:Gateway 迁移或中转方案
ES 6.x 无法直接快照恢复到 Easysearch 2.x,有两种迁移方案可选:
方案一:INFINI Gateway 迁移(推荐)
直接使用 Gateway 从 ES 6.x 迁移数据到 Easysearch,无需中转集群。Gateway 已验证支持 ES 6.8.x 的数据迁移。
方案二:ES 7.10.x 中转
ES 6.8 -> 快照 -> ES 7.10.x -> 快照 -> Easysearch 2.x
ES 7.10.x 可以正常恢复 ES 6.x 的快照,恢复完成后再创建快照供 Easysearch 使用。该方案数据完整性有保障,但需要额外的中转存储和迁移窗口。
ES 6.x 特有字段:ES 6.x 的 string 类型在 Easysearch 中需映射为 text 或 keyword(根据实际使用场景选择)。
ES 7.12+ 和 8.x:INFINI Gateway 迁移
这两个版本段的快照格式与 Easysearch 2.x 不兼容,推荐使用 INFINI Gateway 进行迁移。Gateway 是 INFINI Labs 提供的数据迁移工具,专门针对 Elasticsearch 到 Easysearch 的迁移场景进行了优化。
架构示意
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Elasticsearch │ ──── │ INFINI Gateway │ ──── │ Easysearch │
│ (源集群) │ │ (迁移工具) │ │ (目标集群) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Gateway 内部通过 Scroll API 从源集群分批拉取数据,再通过 Bulk API 写入目标集群,整个过程对业务透明。
主要优势
- 配置简单:只需配置源集群和目标集群地址、索引名称即可
- 断点续传:支持从断点恢复,避免网络抖动导致重头再来
- 进度可视:实时显示迁移进度和速率
- 多索引并行:支持同时迁移多个索引
基本步骤
- 在目标集群创建索引的 mapping 和 setting
- 准备 Gateway 配置文件,填写源集群和目标集群连接信息
- 运行 Gateway 执行迁移
- 迁移完成后进行数据校验
详细的配置说明和操作示例,可参考 ES 数据迁移之 INFINI Gateway。
备选方案
如果需要更灵活的控制,也可以自行编写脚本,通过 Scroll API 读取源数据、Bulk API 写入目标。这种方式适合有定制化需求的场景,但需要自行处理断点续传、错误重试等逻辑。
字段类型兼容性
直接兼容类型:text、keyword、long、double、boolean、date、object、nested、geo_point、geo_shape、ip、completion、wildcard、flattened、alias、join、rank_feature、rank_features、integer_range、long_range、date_range、match_only_text 等。
ES 7.x / 8.x 需替换类型:
| ES 类型 | Easysearch 替代方案 | 数据保留 | 说明 |
|---|---|---|---|
dense_vector |
knn_dense_float_vector |
是 | 需安装 knn 插件,向量数据格式兼容 |
knn_vector |
knn_dense_float_vector |
是 | 需安装 knn 插件 |
sparse_vector |
knn_sparse_bool_vector |
是 | 需安装 knn 插件 |
constant_keyword |
keyword |
是 | 需手动维护常量值 |
runtime |
移除或转为普通字段 | 是 | Easysearch 不支持运行时字段 |
histogram |
object |
是 | 聚合 histogram 功能丢失 |
aggregate_metric_double |
object |
是 | 需手动计算聚合 |
unsigned_long |
long 或 keyword |
是 | 注意数值范围 |
semantic |
暂不支持 | - | ES 专有 AI 功能 |
向量迁移要点:ES 的 dense_vector 数据可直接迁移到 Easysearch 的 knn_dense_float_vector,数据格式 [0.1, 0.2, ...] 完全兼容。需预先在目标索引创建正确的 mapping。
建议迁移前先用小索引测试,确认 mapping 无问题后再全量迁移。
常见问题与避坑指南
1. include_global_state 参数设置
该参数控制是否恢复集群级配置(模板、ILM 策略等)。不同版本的情况:
| ES 版本 | 发行版 | global_state | 说明 |
|---|---|---|---|
| 7.0-7.7 | 任意 | 兼容 | 无 _index_template API |
| 7.8-7.10 | OSS | 兼容 | 无内置 _index_template |
| 7.8-7.10 | default | 可能不兼容 | 取决于是否使用 _index_template |
| 7.11+ | 任意 | 不兼容 | 有 9 个内置 _index_template |
建议:迁移时统一使用 include_global_state=false,先恢复数据再重建配置。
2. ILM 和 data stream 迁移
- ILM:索引的 lifecycle 设置保留,但 policy 需在 Easysearch 中重建
- 数据流 (data stream):后备索引 (backing index) 数据完整恢复,语义需在目标侧重建
- 冻结索引 (frozen index):自动恢复为普通可访问状态
3. 迁移验收标准
建议至少完成三项验证:
- 文档量一致
- 关键查询结果一致
- 核心业务链路压测通过
4. 迁移窗口规划
- 快照方案通常需要短停机窗口完成切换
- Gateway 迁移可实现近实时同步,仅在切换连接时短暂停服
快照格式变化参考
| 字段 | ES 7.0-7.11 | ES 7.12-7.17 | ES 8.x | Easysearch 2.x |
|---|---|---|---|---|
min_version |
7.9.0 或无 | 7.12.0 | 7.12.0 | 支持 |
uuid(仓库级) |
无 | 有 | 有 | 不支持 |
cluster_id |
无 | 有 | 有 | 不支持 |
writer_uuid |
无 | 有(7.14+) | 有 | 不支持 |
transport_version |
无 | 无 | 有 | 不支持 |
总结
本文梳理了 Easysearch 2.x 对 ES 6/7/8 的迁移路径:
- ES 7.0-7.11:直接快照恢复,路径最短
- ES 6.x:INFINI Gateway 迁移 或 ES 7.10.x 中转
- ES 7.12+ / 8.x:使用 INFINI Gateway 迁移
建议在正式迁移前,先选择非核心索引进行小规模验证,确认数据完整性和业务兼容性后再扩大迁移范围。
如有迁移相关问题,欢迎联系我们。
用 Easysearch 帮助大型车企降本增效
Easysearch • yangmf2040 发表了文章 • 0 个评论 • 5894 次浏览 • 2024-02-02 15:15
最近某头部汽车集团需要针对当前 ES 集群进行优化,背景如下: ES 用于支撑包括核心营销系统、管理支持系统、财务类、IT 基础设施类、研发、自动驾驶等多个重要应用,合计超 50 余套集群,累计数据超 1.5PB 。 本文针对其中一个 ES 集群进行分享,该集群原本使用的是 ES 7.3.2 免费版,数据已经 130TB 了,14 个节点。写入数据时经常掉节点,写入性能也不稳定,当天的数据写不完。迫切需要新的解决方案。 分析业务场景后总结需求要点:主要是写,很少查。审计需求,数据需要长期保存。 这个需求比较普遍,处理起来也很简单:
- 使用 Easysearch 软件,只需少量节点存储近两天的数据。
- 索引设置开启 ZSTD 压缩功能,节省磁盘空间。
- 每天索引数据写完后,第二天执行快照备份存放到 S3 存储。
- 备份成功后,删除索引释放磁盘空间。
- 需要搜索数据时,直接从快照搜索。
将近期的数据,存放到本地磁盘,保障写入速度。写入完毕的索引,在执行快照备份后,可删除索引,释放本地磁盘空间。
Easysearch 配置要点
path.repo: ["/S3-path"]
node.roles: ["data","search"]
node.search.cache.size: 500mb
- path.repo : 指定 S3 存储路径,上传快照用。
- node.roles : 只有 search 角色的节点,才能去搜索快照中的数据。
- node.search.cache.size : 执行快照搜索时的,缓存大小。
更多信息请参考官方文档。
旧数据迁移
通过 Console 将原 ES 集群的数据,迁移到新 Easysearch 集群。迁移时,复制 mapping 和 setting,并在 setting 中添加如下设置。
"codec": "ZSTD",
"source_reuse": true,
原索引数据量大,可拆分成多个小任务。
迁移完,索引存储空间一般节省 50% 左右。
原索引 279GB ,迁移完后 138GB。

搜索快照数据
挂载快照后,搜索快照里的索引和搜索本地的索引,语法完全一样。
如何判断一个索引是在快照还是本地磁盘呢?可以查看索引设置里的 settings.index.store.type
如果是 remote_snapshot ,说明是快照中的数据。如果是空值,则是集群本地的数据。
这次迁移,节省了 6 台主机资源。更重要的是,用上对象存储后,主机磁盘空间压力骤减。
这次介绍就到这里了,有问题联系我。

关于 Easysearch

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
社区服务器迁移完成啦!
站务公告 • medcl 发表了文章 • 1 个评论 • 2322 次浏览 • 2020-07-29 11:18
生产环境6台es集群,怎么扩容?
Elasticsearch • zqc0512 回复了问题 • 6 人关注 • 5 个回复 • 7666 次浏览 • 2018-10-08 09:21
从一个网段的数据迁移到另外一个网段,请问我这种构想合理吗?如果合理,怎么配置呢?
Elasticsearch • bjfk2006 回复了问题 • 3 人关注 • 3 个回复 • 4645 次浏览 • 2017-11-14 19:57
社区网站服务器迁移完毕
资讯动态 • medcl 发表了文章 • 5 个评论 • 4390 次浏览 • 2017-04-24 14:52
从一个网段的数据迁移到另外一个网段,请问我这种构想合理吗?如果合理,怎么配置呢?
回复Elasticsearch • bjfk2006 回复了问题 • 3 人关注 • 3 个回复 • 4645 次浏览 • 2017-11-14 19:57
Elasticsearch 6/7/8 到 Easysearch 2.x 迁移指南
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 5959 次浏览 • 2026-06-04 14:14

最近在协助客户进行 Elasticsearch 到 Easysearch 的迁移时,发现大家最关心的问题是"当前版本能否直接使用快照迁移"。这个问题看似简单,但不同版本的答案差异较大。本文将基于实际测试经验,梳理各版本的迁移路径和注意事项。
迁移路径速览
根据源 ES 版本,可以直接对照下表选择迁移方案:
| 源 ES 版本 | 能否直接快照恢复 | 推荐方案 | 实施复杂度 |
|---|---|---|---|
| ES 6.x | 否 | INFINI Gateway 迁移 或 ES 7.10.x 中转 | 较低 |
| ES 7.0 - 7.11 | 是 | 直接快照恢复 | 较低 |
| ES 7.12 - 7.17 | 否 | INFINI Gateway 迁移 | 较低 |
| ES 8.x | 否 | INFINI Gateway 迁移 | 较低 |
结论:ES 7.0-7.11 是迁移最顺畅的版本窗口,可直接快照恢复;其他版本也有成熟的迁移方案,只是路径不同。
版本差异的原因
迁移路径的差异主要源于两方面:Lucene 版本兼容性和快照元数据格式变化。
Lucene 兼容性:Easysearch 2.x 底层要求的最低 Lucene 版本对应 ES 7.0.0。ES 6.x 的索引文件使用老版本 Lucene,直接恢复会报错:
The index was created with version [6.8.23] but the minimum compatible version is [7.0.0].
快照元数据格式:ES 7.12 开始在快照中引入 uuid、cluster_id 字段,7.14 增加 writer_uuid,8.x 又引入 transport_version。这些字段与 Easysearch 2.x 的快照解析器不兼容。
因此,ES 7.0-7.11 成为迁移的"黄金窗口"——既满足 Lucene 兼容性要求,快照格式又足够简洁。
ES 7.0-7.11:直接快照恢复
这是测试最充分的迁移路径,已验证版本包括 ES 7.0.1、7.8.1、7.10.2 OSS、7.11.2。
已验证能力:
- 单索引 / 多索引 / 通配符批量恢复
- 常见字段类型与别名
- 自定义 settings、多分片索引
- ILM 托管索引、数据流后备索引、冻结索引
操作步骤:
# 1. 源 ES 创建快照
PUT /_snapshot/my_backup/snapshot_1
{
"indices": "索引列表",
"include_global_state": false
}
# 2. Easysearch 注册同一快照仓库
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/path/to/snapshot/repo",
"readonly": true
}
}
# 3. 恢复快照
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "索引列表",
"include_global_state": false
}
ES 6.x:Gateway 迁移或中转方案
ES 6.x 无法直接快照恢复到 Easysearch 2.x,有两种迁移方案可选:
方案一:INFINI Gateway 迁移(推荐)
直接使用 Gateway 从 ES 6.x 迁移数据到 Easysearch,无需中转集群。Gateway 已验证支持 ES 6.8.x 的数据迁移。
方案二:ES 7.10.x 中转
ES 6.8 -> 快照 -> ES 7.10.x -> 快照 -> Easysearch 2.x
ES 7.10.x 可以正常恢复 ES 6.x 的快照,恢复完成后再创建快照供 Easysearch 使用。该方案数据完整性有保障,但需要额外的中转存储和迁移窗口。
ES 6.x 特有字段:ES 6.x 的 string 类型在 Easysearch 中需映射为 text 或 keyword(根据实际使用场景选择)。
ES 7.12+ 和 8.x:INFINI Gateway 迁移
这两个版本段的快照格式与 Easysearch 2.x 不兼容,推荐使用 INFINI Gateway 进行迁移。Gateway 是 INFINI Labs 提供的数据迁移工具,专门针对 Elasticsearch 到 Easysearch 的迁移场景进行了优化。
架构示意
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Elasticsearch │ ──── │ INFINI Gateway │ ──── │ Easysearch │
│ (源集群) │ │ (迁移工具) │ │ (目标集群) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Gateway 内部通过 Scroll API 从源集群分批拉取数据,再通过 Bulk API 写入目标集群,整个过程对业务透明。
主要优势
- 配置简单:只需配置源集群和目标集群地址、索引名称即可
- 断点续传:支持从断点恢复,避免网络抖动导致重头再来
- 进度可视:实时显示迁移进度和速率
- 多索引并行:支持同时迁移多个索引
基本步骤
- 在目标集群创建索引的 mapping 和 setting
- 准备 Gateway 配置文件,填写源集群和目标集群连接信息
- 运行 Gateway 执行迁移
- 迁移完成后进行数据校验
详细的配置说明和操作示例,可参考 ES 数据迁移之 INFINI Gateway。
备选方案
如果需要更灵活的控制,也可以自行编写脚本,通过 Scroll API 读取源数据、Bulk API 写入目标。这种方式适合有定制化需求的场景,但需要自行处理断点续传、错误重试等逻辑。
字段类型兼容性
直接兼容类型:text、keyword、long、double、boolean、date、object、nested、geo_point、geo_shape、ip、completion、wildcard、flattened、alias、join、rank_feature、rank_features、integer_range、long_range、date_range、match_only_text 等。
ES 7.x / 8.x 需替换类型:
| ES 类型 | Easysearch 替代方案 | 数据保留 | 说明 |
|---|---|---|---|
dense_vector |
knn_dense_float_vector |
是 | 需安装 knn 插件,向量数据格式兼容 |
knn_vector |
knn_dense_float_vector |
是 | 需安装 knn 插件 |
sparse_vector |
knn_sparse_bool_vector |
是 | 需安装 knn 插件 |
constant_keyword |
keyword |
是 | 需手动维护常量值 |
runtime |
移除或转为普通字段 | 是 | Easysearch 不支持运行时字段 |
histogram |
object |
是 | 聚合 histogram 功能丢失 |
aggregate_metric_double |
object |
是 | 需手动计算聚合 |
unsigned_long |
long 或 keyword |
是 | 注意数值范围 |
semantic |
暂不支持 | - | ES 专有 AI 功能 |
向量迁移要点:ES 的 dense_vector 数据可直接迁移到 Easysearch 的 knn_dense_float_vector,数据格式 [0.1, 0.2, ...] 完全兼容。需预先在目标索引创建正确的 mapping。
建议迁移前先用小索引测试,确认 mapping 无问题后再全量迁移。
常见问题与避坑指南
1. include_global_state 参数设置
该参数控制是否恢复集群级配置(模板、ILM 策略等)。不同版本的情况:
| ES 版本 | 发行版 | global_state | 说明 |
|---|---|---|---|
| 7.0-7.7 | 任意 | 兼容 | 无 _index_template API |
| 7.8-7.10 | OSS | 兼容 | 无内置 _index_template |
| 7.8-7.10 | default | 可能不兼容 | 取决于是否使用 _index_template |
| 7.11+ | 任意 | 不兼容 | 有 9 个内置 _index_template |
建议:迁移时统一使用 include_global_state=false,先恢复数据再重建配置。
2. ILM 和 data stream 迁移
- ILM:索引的 lifecycle 设置保留,但 policy 需在 Easysearch 中重建
- 数据流 (data stream):后备索引 (backing index) 数据完整恢复,语义需在目标侧重建
- 冻结索引 (frozen index):自动恢复为普通可访问状态
3. 迁移验收标准
建议至少完成三项验证:
- 文档量一致
- 关键查询结果一致
- 核心业务链路压测通过
4. 迁移窗口规划
- 快照方案通常需要短停机窗口完成切换
- Gateway 迁移可实现近实时同步,仅在切换连接时短暂停服
快照格式变化参考
| 字段 | ES 7.0-7.11 | ES 7.12-7.17 | ES 8.x | Easysearch 2.x |
|---|---|---|---|---|
min_version |
7.9.0 或无 | 7.12.0 | 7.12.0 | 支持 |
uuid(仓库级) |
无 | 有 | 有 | 不支持 |
cluster_id |
无 | 有 | 有 | 不支持 |
writer_uuid |
无 | 有(7.14+) | 有 | 不支持 |
transport_version |
无 | 无 | 有 | 不支持 |
总结
本文梳理了 Easysearch 2.x 对 ES 6/7/8 的迁移路径:
- ES 7.0-7.11:直接快照恢复,路径最短
- ES 6.x:INFINI Gateway 迁移 或 ES 7.10.x 中转
- ES 7.12+ / 8.x:使用 INFINI Gateway 迁移
建议在正式迁移前,先选择非核心索引进行小规模验证,确认数据完整性和业务兼容性后再扩大迁移范围。
如有迁移相关问题,欢迎联系我们。
用 Easysearch 帮助大型车企降本增效
Easysearch • yangmf2040 发表了文章 • 0 个评论 • 5894 次浏览 • 2024-02-02 15:15
最近某头部汽车集团需要针对当前 ES 集群进行优化,背景如下: ES 用于支撑包括核心营销系统、管理支持系统、财务类、IT 基础设施类、研发、自动驾驶等多个重要应用,合计超 50 余套集群,累计数据超 1.5PB 。 本文针对其中一个 ES 集群进行分享,该集群原本使用的是 ES 7.3.2 免费版,数据已经 130TB 了,14 个节点。写入数据时经常掉节点,写入性能也不稳定,当天的数据写不完。迫切需要新的解决方案。 分析业务场景后总结需求要点:主要是写,很少查。审计需求,数据需要长期保存。 这个需求比较普遍,处理起来也很简单:
- 使用 Easysearch 软件,只需少量节点存储近两天的数据。
- 索引设置开启 ZSTD 压缩功能,节省磁盘空间。
- 每天索引数据写完后,第二天执行快照备份存放到 S3 存储。
- 备份成功后,删除索引释放磁盘空间。
- 需要搜索数据时,直接从快照搜索。
将近期的数据,存放到本地磁盘,保障写入速度。写入完毕的索引,在执行快照备份后,可删除索引,释放本地磁盘空间。
Easysearch 配置要点
path.repo: ["/S3-path"]
node.roles: ["data","search"]
node.search.cache.size: 500mb
- path.repo : 指定 S3 存储路径,上传快照用。
- node.roles : 只有 search 角色的节点,才能去搜索快照中的数据。
- node.search.cache.size : 执行快照搜索时的,缓存大小。
更多信息请参考官方文档。
旧数据迁移
通过 Console 将原 ES 集群的数据,迁移到新 Easysearch 集群。迁移时,复制 mapping 和 setting,并在 setting 中添加如下设置。
"codec": "ZSTD",
"source_reuse": true,
原索引数据量大,可拆分成多个小任务。
迁移完,索引存储空间一般节省 50% 左右。
原索引 279GB ,迁移完后 138GB。

搜索快照数据
挂载快照后,搜索快照里的索引和搜索本地的索引,语法完全一样。
如何判断一个索引是在快照还是本地磁盘呢?可以查看索引设置里的 settings.index.store.type
如果是 remote_snapshot ,说明是快照中的数据。如果是空值,则是集群本地的数据。
这次迁移,节省了 6 台主机资源。更重要的是,用上对象存储后,主机磁盘空间压力骤减。
这次介绍就到这里了,有问题联系我。

关于 Easysearch

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
社区服务器迁移完成啦!
站务公告 • medcl 发表了文章 • 1 个评论 • 2322 次浏览 • 2020-07-29 11:18
社区网站服务器迁移完毕
资讯动态 • medcl 发表了文章 • 5 个评论 • 4390 次浏览 • 2017-04-24 14:52

