- Published on
使用 AWS OpenSearch Service(托管版的 Elasticsearch)
- Authors
- Name
- Shelton Ma
1. 部署方案
1. 版本选择
- 单节点(开发/测试):t3.small.search(低成本)
- 多 AZ 集群(生产):3+ 节点,分布在多个可用区(AZ)
- UltraWarm(历史数据归档):低成本存储(仅适用于 7.x 及以上)
2. 配置高可用
实例类型:r6g.large.search(高性能) 或 m6g.large.search(性价比)
跨 AZ 部署:最低 3 个 AZ,防止单点故障
分片策略:
- index.number_of_shards: 3(与数据节点数相等)
- index.number_of_replicas: 1(1 份副本)
{ "settings": { "index": { "number_of_shards": 3, "number_of_replicas": 1 } } }
3.访问控制(权限管理)
AWS 提供两种 访问方式
IAM 角色(推荐):适用于 AWS 内部服务访问
在 AWS OpenSearch 控制台,选择
Fine-grained access control
创建 Master 用户
配置 IAM 角色 允许 EC2 / Lambda 访问:
{ "Effect": "Allow", "Action": "es:ESHttp*", "Resource": "arn:aws:es:us-west-2:123456789012:domain/my-es-cluster/*" }
用户名密码(Basic Auth):适用于外部访问 启用 Basic Auth,Kibana 登录:
curl -X GET "<https://your-es-domain.amazonaws.com>" -u "admin:yourpassword"
4. Kibana & OpenSearch Dashboards
- AWS 提供 Kibana / OpenSearch Dashboards 访问:
- 访问:https://your-es-domain.amazonaws.com/_dashboards/
5. 数据归档(UltraWarm & S3)
UltraWarm(低成本存储)适用于 历史数据查询
// 将 7 天前的数据移动到 UltraWarm { "lifecycle": { "hot": { "min_age": "0d", "actions": {} }, "warm": { "min_age": "7d", "actions": { "allocate": { "require": { "data": "warm" } } } } } }
S3 归档, 适用于 长期存储日志
aws s3 cp s3://your-s3-bucket/es-backup .
2. 索引生命周期管理(ILM)
根据数据量级及成本控制, 确定生命周期管理
1. 方案确定
使用Index State Management(ISM),用于自动执行数据生命周期管理.
- Hot(热存储):0 - 7 天 → 高性能 SSD
- Warm(温存储):7 - 30 天 → UltraWarm(低成本)
- Cold(归档):30+ 天 → S3(长存储)
2. 应用ILM策略
添加策略
PUT _plugins/_ism/policies/my-index-policy { "policy": { "description": "自动管理索引生命周期", "default_state": "hot", "states": [ { "name": "hot", "actions": [], "transitions": [ { "state_name": "warm", "conditions": { "min_index_age": "7d" } } ] }, { "name": "warm", "actions": [ { "replica_count": { "number_of_replicas": 1 } }, { "allocate": { "require": { "data": "warm" } } } ], "transitions": [ { "state_name": "cold", "conditions": { "min_index_age": "30d" } } ] }, { "name": "cold", "actions": [ { "snapshot": { "repository": "s3-repository", "snapshot": "archive-{{index}}" } }, { "delete": {} } ], "transitions": [] } ] } }
绑定 ISM 策略到索引
PUT my-index-0001/_settings { "index": { "plugins": { "index_state_management": { "policy_id": "my-index-policy" } } } }
配置 S3 存储库
PUT _snapshot/s3-repository { "type": "s3", "settings": { "bucket": "my-opensearch-archive", "region": "us-west-2" } }
3. 性能优化注意事项
即使有 Auto Scaling,你仍然需要监控 Opensearch 关键性能指标
1. 集群负载
- CPU 使用率 (_nodes/stats),
按需增加节点
- JVM 内存占用(如果 > 75%,GC 可能会影响查询),
减少 shards 数量
- 磁盘使用率(超过 80%,可能导致写入慢),
提高 refresh_interval(降低磁盘 IO)
2. Bulk 写入性能
- Bulk 队列 (_cat/thread_pool/bulk), 调整 bulk 大小(1000 -> 500)
- Rejected bulk 请求(如果 > 0,写入速度跟不上)
- 使用
Kafka
进行缓冲 - 增加 number_of_replicas=0(提升写入速度)
- 使用
3. 查询性能
- 查询耗时 (query_latency), 增加缓存(query_cache)
- 慢查询 (_slowlog)
- 减少 size 参数(避免 size=10000 查询过大)
- 使用 aggregations 代替 terms 查询
4. 数据冷热分层
如果你存储大量数据,需要用 冷热存储:
- Hot(7 天内的活跃数据,SSD)
- Warm(30 天内的历史数据,EBS)
- Cold(S3 归档)