【问题标题】:How to move elasticsearch data directory?如何移动elasticsearch数据目录?
【发布时间】:2021-12-09 19:25:32
【问题描述】:

我有一个默认安装的 Elasticsearch。它似乎将其数据存储在

/var/lib/elasticsearch/elasticsearch/nodes

那么两个问题:

如果我想将我的数据移动到同一台机器上的另一个位置(例如/foo/bar

1) 我要复制/var/lib/elasticsearch 树的哪个级别?和

2) elastisearch.yml中path.data的相关设置是什么?

【问题讨论】:

  • 除了 Val 的回答,请确保新目录的所有权和组设置为 elasticsearch 或与 /var/lib/elasticsearch 中的相同。

标签: elasticsearch


【解决方案1】:

A.您需要移动elasticsearch 文件夹,即该文件夹与elasticsearch.yml 文件中配置的cluster.name 同名。

B.您需要将elasticsearch.yml 文件中的path.data 设置修改为您已将数据移动到的新文件夹。

所以,假设您当前正在使用/var/lib/elasticsearch,并且您想将数据文件夹移动到/foo/bar,您需要执行以下操作:

> mv /var/lib/elasticsearch /foo/bar

然后在elasticsearch.yml修改path.data为:

path.data: /foo/bar

您的数据最终会存储在/foo/bar/elasticsearch 而不是/var/lib/elasticsearch。确保 elasticsearch 进程可以访问您的新文件夹。

【讨论】:

  • 完美答案!谢谢!
  • 很好,很高兴它有帮助!
  • @Val 一旦我们将 ES 数据文件夹移动到一个新路径,新的索引就会自动在那里创建,对吗?
  • @Darth_Vader 如果您将文件夹移动到其他位置,您还需要修改配置文件,ES 将从新位置获取索引。如果您使用新的空位置,则将在那里创建新索引
  • 你不能用ES向上移动数据文件夹,所以Logstash应该向下移动。
【解决方案2】:

如果您在移动关键数据时更加谨慎,保留所有属性(所有者、组、时间戳等)的 cp 会有所帮助。

cp -r --preserve=all /var/lib/elasticsearch/ /foo/bar/

打开 elasticsearch.yml 并将 path.data 设置为新位置

path.data: /foo/bar/elasticsearch/

重启弹性搜索服务器。现在您可以安全地删除源数据了。

rm -rf /var/lib/elasticsearch/

【讨论】:

  • 保留所有是其他帮助的方法,权限问题永无止境。 - 谢谢
  • 迁移目录时应使用 cp preserve 选项。还有一点需要注意的是,该命令只会在完成时设置所有内容:虽然它仍在复制目录,并且您以 root 身份运行 cp,但该目录将归 root 所有。只有在完成此目录时,它才会将其设置为正确的权限。参考——unix.stackexchange.com/questions/43605/…
【解决方案3】:

我想添加一个我在执行@Val 的有用指导时遇到的烦人问题。 在我这样做之后:

> mv /var/lib/elasticsearch /foo/bar

我设置了

path.data: /foo/bar

但是 Elasticsearch 没有正确运行。例如 xpack 安全(以前屏蔽)身份验证密码变回其默认的“changeme”。而且当我想列出索引时,什么也没有显示。 然后我设置了

path.data:/foo/bar/elasticsearch/

我认为“elasticsearch”末尾的最后一个斜杠很重要。可能是我很困惑,但它解决了我的问题。

【讨论】:

    【解决方案4】:

    补充 Val 的好答案...

    也许是从 ES 5.6 开始(?没有研究多久以前这是真的)我将我的数据目录移动到一个新位置并且无法让 ES 启动。 index_name.log 文件显示 ES 正在寻找默认数据目录(/var/lib/elasticsearch),因为我移动了它,所以它找不到,所以启动失败了。我将现在移动的目录复制回 /var/lib/elasticsearch 并再次尝试启动,但再次失败。日志显示,ES确实找到了默认的数据目录位置,但也发现有内容所以启动失败。最后一步是清空/var/lib/elasticsearch,启动成功。

    总结 ES 5.6 on RHEL(至少): 1.默认的/var/lib/elasticsearch目录必须存在 2.默认的/var/lib/elasticsearch目录必须为空

    【讨论】:

    • 在 Ubuntu 中也有同样的问题
    【解决方案5】:

    自Elastic Search6.8以来,这种手动复制数据目录的做法已经失效;而且,它不再保证无缝工作。即使您设法更改了数据目录位置,并且您的集群正常运行,也不会检测到在旧数据目录中创建的用户定义索引。从 6.8 开始,更改数据目录路径的可靠方法是从旧目录中获取快照,并将其还原到新目录中。详细说明实现这一目标的步骤:

    1. 虽然仍指向旧数据路径,但注册快照注册表并创建快照。快照存储库应该可以从需要复制和恢复的所有网络访问。为此,我使用了 NFS 路径。但是,快照存储可使用多种其他选项,例如 S3、Azure、HDFS。有关其他选项的详细信息,请参阅 https://www.elastic.co/guide/en/elasticsearch/reference/7.15/snapshots-register-repository.html
     PUT http://localhost:9200/_snapshot/mysnapshotregistry {
         "type": "fs",
         "settings": {
             "location": "/usr/share/elasticsearch/snapshotrepo",
             "compress": true
         }  }
    
    1. 通过在步骤 1 中创建的注册表中创建快照来备份旧数据。
    PUT http://localhost:9200/_snapshot/mysnapshotregistry/snapshot1?wait_for_completion=true
    
    {   "indices": "employee, manager",   
        "ignore_unavailable": true,
        "include_global_state": false,   
        "metadata": {
        "taken_by": "binita",
        "taken_because": "testing creation of snapshot"
        } 
    }
    
    1. 停止 ElasticSearch 服务。

    2. 将数据目录更新到elasticsearch.yml中的所需路径 由:path.data 字段给出。请记住将更新数据目录的所有权授予 uid:gid = 1000:0chown -R 1000:0 <updated data directory>

    3. 启动 ElasticSearch 服务。

    4. 检查此时您的集群是否仅包含默认索引。所有用户定义的索引都将不存在。

    GET http://localhost:9200/_cat/indices

    1. 在指向步骤 1 中提到的相同底层 NFS 路径的新数据目录中注册一个快照存储库。
     PUT http://localhost:9200/_snapshot/mysnapshotregistry2 {
         "type": "fs",
         "settings": {
             "location": "/usr/share/elasticsearch/snapshotrepo",
             "compress": true
         }  }
    
    1. 列出步骤 7 中创建的注册表中的所有可用快照。

    GET http://localhost:9200/_cat/snapshots/mysnapshotregistry2 snapshot1 将出现在响应中。

    1. 将快照恢复到更新的数据目录:
     PUT http://localhost:9200/_snapshot/mysnapshotregistry2/snapshot1/_restore {  
        "indices": "employee",
        "ignore_unavailable": true,  
        "include_global_state": false,
        "index_settings": {
         "index.number_of_replicas": 0   
        },   
        "ignore_index_settings": [
         "index.refresh_interval"
    
       ]   }
    

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      相关资源
      最近更新 更多