• 不停机迁移 elasticsearch 集群


    一、背景

     ES 集群不停机迁移,迁移过程中不影响业务使用。 所用集群版本为 6.3.0 。

    二、方案

    1、业务通过域名访问集群;

    2、在新的机器搭建集群;

    3、对原有集群进行快照,万一数据有丢失可以从快照进行恢复;

    4、新旧集群进行合并,并强制使旧集群数据通过数据均衡的方式迁移到新集群;

    5、下线原有旧集群。

    三、实施

    1、在新的机器搭建集群的方法

    1)机器准备(root设置):参考官网

    vim  /etc/security/limits.conf
    解除文件与内存限制
    * soft memlock unlimited
    * hard memlock unlimited
    * - nofile 65536
    * - core unlimited
    生效: 退出再登入
    vim /etc/sysctl.conf 
    添加
    vm.max_map_count = 262144
    vm.swappiness = 1
    生效:sysctl -p
    View Code

    2)配置节点:参考官网

    The order of precedence for cluster settings is:
    transient cluster settings
    persistent cluster settings
    settings in the elasticsearch.yml configuration file.
    View Code

    注意事项:

    1)ES 堆内存需要在32G 以内,最好是26G。

    官网  网友说法 参考1 参考2

    2)shard越多,QPS就会越低(详情),Shard大小官方推荐值为20-40GB(详情),每1GB堆内存对应集群的分片在20-25之间(26G 可以存储520个 shard)(详情);

    每个节点上可以存储的分片数量与可用的堆内存大小成正比关系,但是 Elasticsearch 并未强制规定固定限值。这里有一个很好的经验法则:确保对于节点上已配置的每个 GB,将分片数量保持在 20 以下。如果某个节点拥有 30GB 的堆内存,那其最多可有 600 个分片,但是在此限值范围内,您设置的分片数量越少,效果就越好(详情)。每个节点的 shard 数量设置方法,集群中 shard 分配策略设置方法

    3)master 与 client 节点的内存与 CPU 都用量比较少,相应的参数可以设小些。

    2、集群快照的方法:通过自己搭建Hadoop 集群实现(需要安装 hdfs 插件)

    curl -XPUT http://XXX/_snapshot/hdfs_repo -H 'Content-Type: application/json' -d '
        {
        "type": "hdfs",
        "settings": {
            "uri": "hdfs://XXX:8800/",
            "path": "hdfs_repo",
            "compress": true
        }
        }'
    View Code

    3、新旧集群合并:可以启动一个能够连接两个集群的 master, 这样两个集群就能合并成一个集群

    注意:相同的索引会覆盖,如果集群有部分索引 RED 了,确认无影响后可以通过 reroute 重新分配分片

    POST /_cluster/reroute?retry_failed=true&pretty
    {
    }
    View Code

    4、集群数据迁移的方法:通过分片配置过滤实现,使数据从旧机器中迁移走。

    curl -XPUT http://XXX/_cluster/settings -H 'Content-Type: application/json' -d '
        {
      "transient": {
        "cluster.routing.allocation.exclude._name": "XXX"
      }
    }'
    View Code

    四、其他

    1、数据冷热分离

    1、使所有分片都不能分配在 ssd 上;
    curl -XPUT "http://XXX/*/_settings?master_timeout=120s" -H 'Content-Type: application/json' -d'
    {
      "index.routing.allocation.exclude.box_type": "hot"
    }'
    2、使 test 能够分配在 ssd 上;
    PUT test/_settings
    {
      "index.routing.allocation.include.box_type": "hot"
    }
    3、启用 tag 感知策略(不设也没关系)
    PUT /_cluster/settings
    {
        "transient" : {
            "cluster.routing.allocation.awareness.attributes": "box_type"
        }
    }
    View Code

     2、使用 esrally 进行压测

    3、kibana

    4、滚动重启

    1、暂停集群数据均衡
    PUT _cluster/settings
    {
      "transient": {
        "cluster.routing.rebalance.enable": "none"
      }
    }
    2、禁止分片分配
    PUT _cluster/settings
    {
      "transient": {
        "cluster.routing.allocation.enable": "none"
      }
    }
    3、刷新索引(可选)
    curl -XPOST http://XXX/_flush/synced
     
    4、此处进行节点更新操作后再重启
    
    5、重新允许分片分配
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.enable": null
      }
    }
    6、待集群恢复 green 后再重复2~5步,直到完成所有节点的更新重启
    7、恢复集群数据均衡
    View Code
  • 相关阅读:
    Java基础系列(3)- 程序流程控制
    Linux 文本处理三剑客
    POJ3592 Instantaneous Transference题解
    插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数
    BZOJ2818 与 BZOJ2301【euler,线性筛,莫比乌斯】
    BZOJ1857 传送带 (三分法求单峰函数极值)
    线段树详解
    二叉查找树 详解
    最小函数值 洛谷P2085
    二叉树的遍历转换(层序,中序转先序)
  • 原文地址:https://www.cnblogs.com/yuanzhenliu/p/11605204.html
Copyright © 2020-2023  润新知