es手动迁移分片
主分片未分配
由于是索引的主分片未能分配,导致集群一直处于red状态
1.查看未分配的分片信息
curl -u elastic:111111 --insecure https://10.32.3.3:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grep UNASSIGNED
2.查看未分配的原因
curl -u elastic:111111 --insecure https://10.32.3.3:9200/_cluster/allocation/explain
3.试着让集群重新分配一下失败分片
curl -u elastic:11111 --insecure -XPOST https://10.32.3.3:9200/_cluster/reroute?retry_failed=true
4.手动指定某个分片到具体节点上
curl -u elastic:11111 --insecure -H "Content-Type: application/json" -XPOST https://10.32.3.3:9200/_cluster/reroute -d '{ "commands": [ { "allocate_stale_primary": { "index": "rs_asset_account_authorized_key", "shard": 0, "node": "node-2", "accept_data_loss" : true } } ] }'
这意味着除非丢失的节点重新加入集群,否则数据将丢失。或者,您可以使用allocate_empty_prprimary命令清空碎片
curl -u elastic:111111 --insecure -H "Content-Type: application/json" -XPOST https://10.32.3.3:9200/_cluster/reroute -d'{ "commands" : [ { "allocate_empty_primary" : { "index" : "rs_asset_port_infos", "shard" : 0, "node" : "node-3", "accept_data_loss" : true } } ] }'
手动阻止分片分配到某些节点
transient //暂时配置 重启后失效
persistent //永久配置 重启后仍然有效
1.源集群操作
触发集群分片均衡策略,把集群老节点上的分片全部移动到新的集群节点上
curl -u elastic:1111 --insecure -H "Content-Type: application/json" -XPUT https://10.32.3.2:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.include._name" : null, //设置集群分片可以包含的节点名称
"cluster.routing.allocation.exclude._name" : "node-2,node-18,node-20,node-4" //设置集群分片排除的节点名称
}
}'
//不仅节点上原来的分片数据会被迁移走
//新创建的索引产生的分片也不会分配到这些节点上
//新老数据都会从被排除的节点上转移到其它节点上
在分片迁移的中间状态由于分片迁移会消耗一定的性能。因此为了稳定性考虑,可以通过如下API将迁移的并发度和迁移速度调小一点。
curl -u elastic:11111 --insecure -H "Content-Type: application/json" -XPUT https://10.32.3.2:9200/_cluster/settings -d '{ "persistent": {
"cluster.routing.allocation.node_concurrent_recoveries": 2, //允许节点上最大并发的传出分片恢复数
"indices.recovery.max_bytes_per_sec": "100mb" //设置节点的分片传输速率
}
}'
2.还原es集群的配置
curl -u elastic:11111 --insecure -H "Content-Type: application/json" -XPUT https://10.32.3.2:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.include._name" : null, //还原集群的默认配置
"cluster.routing.allocation.exclude._name" : null //还原集群的默认配置
}
}'
CCR跨集群复制数据
跨集群复制即CCR,是一种能够实现数据迁移、数据备份、降低访问延迟的高可用解决方案
es使用CCR机制必须是白金会员,可以开通试用30天
源数据es集群和目标es集群必须都开启 否则不能跨集群传输数据
两个集群都必须有这两个菜单才行
1.先在目标集群添加Remote Clusters
如在3.2(目标集群页面)添加Remote Clusters 数据 10.30.92.70:9300 这里不是9200的http port 必须要填写集群内部通信端口9300
2.添加需要同步数据的索引
3.解除Follower关系
如果不解除Follower关系的索引只能进行读操作,不能写数据
es的api调用
curl --insecure -u elastic:111111 https://10.155.6.11:9200/_cat/indices?v
curl --insecure -u elastic:1111111 https://10.155.6.11:9200/_cat/allocation?v
本文来自博客园,作者:不懂123,转载请注明原文链接:https://www.cnblogs.com/yxh168/p/17956656