不停机迁移 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

2)配置节点:参考官网

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

注意事项:

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
    }
    }‘

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

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

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

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

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

四、其他

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"
    }
}

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、恢复集群数据均衡

原文地址:https://www.cnblogs.com/yuanzhenliu/p/11605204.html

时间: 2024-08-30 07:31:31

不停机迁移 elasticsearch 集群的相关文章

Kafka不停机,如何无感知迁移ZooKeeper集群?

Kafka 在 Yelp 的应用十分广泛,Yelp 每天通过各种集群发送数十亿条消息,在这背后,Kafka 使用 Zookeeper 完成各种分布式协调任务.因为Yelp 非常依赖 Kafka,那么问题来了,它是否可以在不引起 Kafka 及其他 Zookeeper 用户注意的情况下切换 Zookeeper 集群呢?本文将揭晓答案.Kafka 在 Yelp 的应用十分广泛.事实上,我们 每天通过各种集群发送数十亿条消息.在这背后,Kafka 使用 Zookeeper 完成各种分布式协调任务,例如

Elasticsearch集群数据迁移

参考 https://www.elastic.co/guide/en/elasticsearch/reference/5.0/modules-snapshots.htmlhttps://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.htmlhttps://blog.csdn.net/u014431852/article/details/52905821 环境 阿里云elasticsearch集群5.0版

ES2:ElasticSearch 集群配置

ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 是全局配置文件,用于在服务器级别对ElasticSearch进行配置.ElasticSearch的配置选项分为静态设置和动态设置两种,静态设置必须在结点级别(node-level)设置,或配置在elasticsearch.yml配置文件中,或配置在环境变量中,或配置在命令行中,在结点启动之后,静态设置不能修改.集群的名字

elasticsearch集群介绍及优化【转】

elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵向扩展也有一定的局限性.真正的扩展应该是横向的,它通过增加节点来传播负载和增加可靠性.对于大多数数据库而言,横向扩展意味着你的程序将做非常大的改动来利用这些新添加的设备.对比来说,Elasticsearch天生是分布式的:它知道如何管理节点来提供高扩展和高可用.这意味着你的程序不需要关心这些.对于大

elasticsearch 集群indices 分片状态INITIALIZING

elasticsearch 集群indices 分片状态INITIALIZING,集群状态为: yellow 故障现象 GET /_cat/shards/7a_cool 7a_cool 5 r STARTED 4583018 759.4mb 10.2.4.21 pt01-pte-10-2-4-21 7a_cool 17 r INITIALIZING 10.2.4.22 pt01-pte-10-2-4-22 <==异常分片 解决办法 1:关闭异常分片主机es 服务: 登陆pt01-pte-10-2

手把手教你搭建一个Elasticsearch集群

一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息.所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间.假设系统一直能够提供服务,我们说系统的可用性是 100%.如果系统在某个时

Elasticsearch 集群分配多少分片合理

https://www.jianshu.com/p/297e13045605 Elasticsearch 是一个非常通用的平台,支持各种用户实例,并为组织数据和复制策略提供了极大的灵活性.但是,这种灵活性有时会使我们很难在早期确定如何很好地将数据组织成索引和分片,尤其是不熟悉 Elastic Stack.虽然不一定会在首次启动时引起问题,但随着数据量的增长,它们可能会导致性能问题.群集拥有的数据越多,纠正问题也越困难,因为有时可能需要重新索引大量数据.      因此,当我们遇到性能问题时,往往

手把手教你搭建一个 Elasticsearch 集群

为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? 高可用性 Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息.所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间.假设系统一直能够提供服务,我们说系统的可用性是 100%.如果系统在某个时刻宕掉了,

搭建一个Elasticsearch集群

一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息.所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间.假设系统一直能够提供服务,我们说系统的可用性是 100%.如果系统在某个时