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
      }
    }
  ]
}'
View Code

      

      这意味着除非丢失的节点重新加入集群,否则数据将丢失。或者,您可以使用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
            }
        }
    ]
}'
View Code

     

 手动阻止分片分配到某些节点

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

posted @ 2024-01-15 09:45  不懂123  阅读(268)  评论(0编辑  收藏  举报