利用CCR+Reindex跨集群同步阿里云ES数据
2021-09-29 本文已影响0人
左轮Lee
ES Version: 7.10.0
目录:
一、业务需求背景
二、RDS相关配置确认
三、CCR(Cross-Cluster Replication)配置
四、Reindex配置
五、新增角色及账号
六、参考文档
一、业务需求背景
1.由于种种原因,测试需要同步生产ES数据至测试ES集群,且需要过滤部分数据后供测试使用(只读即可),索引数据总量10w+,过滤后数据量1w+。
2.实例是购买的阿里云ES服务,且于新网络架构(2020年10月及之后)下购买的,故无法支持跨集群reindex功能,但是可以在同一实例执行reindex。官方链接见文末参考文档。
3.于是考虑CCR(将整个索引同步到测试ES),再Reindex过滤数据到新索引(需要定期去reindex,同步频率沟通为半小时一次),新建ES账号控制索引权限,再开放给测试使用。
4.同步流程大致为下:
image.png
二、RDS相关配置确认
1.需要确保两个ES集群在同一个VPC下
2.配置实例网络互通,配置其中一个ES集群即可,另外一个会自动设置。
image.png
三、CCR(Cross-Cluster Replication)配置
1.登录ES Kibana(购买ES时默认部署)
image.png
2.添加远程ES数据源(即被同步的ES集群)在测试ES集群操作。
image.png
image.png
3.添加同步索引
image.png
稍等片刻之后,索引的同步状态即将变成 Active。查看文档数量,两边一致,同步完成。
四、Reindex配置
1、首先要在测试环境新建索引 chat,字段类型保持与源端一致。
2、编写同步脚本 syncEsData.sh,过滤数据的 "query" 根据需求编写。
3、部署crontab,每半小时执行一次。
#!/bin/bash
curl -XPOST -u elastic:xxxxxxxxx 'http://xxxxxxxx:9200/_reindex?pretty' -H 'Content-Type: application/json' -d '
{
"source": {
"index": "follow_chat",
"query": {
"bool": {
"should": [
{
"terms": {
"from.keyword": ["AAAAA","BBBBB","CCCCC"]
}
},
{
"terms": {
"tolist.keyword": [
"AAAAA","BBBBB","CCCCC"
]
}
}
]
}
}
},
"dest": {
"index": "chat"
}
}'
五、新增角色及账号
新增角色是为了控制测试人员查看全量数据的索引 follow_chat,如果之前是使用的elastic账号,则需要回收替换账号。
#### 新增角色,只能操作索引chat
curl -XPOST -u elastic:xxxxxxxxx 'xxxxxxx:9200/_xpack/security/role/roleName' -H "Content-Type: application/json" -d '{ "indices":[{"names":["chat"],"privileges":["all"]}]}'
#### 新增user,赋权上面创建的角色
curl -XPOST -u elastic:xxxxx 'xxxxxx:9200/_xpack/security/user/newUser' -H "Content-Type: application/json" -d '{
"password" : "xxxxxxxxxxxxxxx",
"roles" : [ "roleName" ]
}'
六、参考文档
https://help.aliyun.com/document_detail/175973.html
https://help.aliyun.com/document_detail/176854.html