ES数据迁移
操作步骤如下:(所有节点一个一个操作)
1. 关闭ES服务
systemctl stop elasticsearch
2. 创建存储的新目录
把数据目录和日志目录复制到新的数据目录中,这里我新的数据目录是单独的一个云盘挂载到了
/data
目录
# 创建数据存储的新目录
mkdir -p /data/elasticsearch/data
# 创建日志存储的新目录
mkdir -p /data/elasticsearch/logs
3. 迁移数据
# 迁移数据文件
cp -r /usr/local/elasticsearch/elasticsearch-7.17.10/data/nodes /data/elasticsearch/data
# 迁移日志文件
cp -r /usr/local/elasticsearch/elasticsearch-7.17.10/logs/* /data/elasticsearch/logs/
# 检查旧文件有没有全部copy过来
ll /data/elasticsearch/data
ll /data/elasticsearch/logs
4. 授权新的数据目录
# 给elasticsearch用户授权
chown -R elasticsearch:elasticsearch /data/elasticsearch
5. 修改配置文件中,数据和日志的存储路径
vim /usr/local/elasticsearch/elasticsearch-7.17.10/conf/elasticsearch.yml
# 加入以下内容
path.data:/data/elasticsearch/data
path.logs:/data/elasticsearch/logs
6. 重新启动ES服务(所有节点操作完之后,一个一个启动)
systemctl restart elasticsearch.service
systemctl status elasticsearch.service
7. 验证集群状态
# 查看集群健康
curl -X GET "localhost:9200/_cat/health?v"
# 查看节点信息
curl -X GET "localhost:9200/_cat/nodes?v"
# 查看索引信息
curl -X GET "localhost:9200/_cat/indices?v"
常见错误
重新启动ES服务时,可能会报 .security-7
索引错误,错误信息如下
[2021-01-13T17:05:27,359][INFO ][o.e.x.s.a.AuthenticationService] [elekpelk01] Authentication of [elastic] was terminated by realm [reserved] - failed to authenticate user [elastic]
[2021-01-13T17:05:29,290][ERROR][o.e.x.s.a.e.ReservedRealm] [elekpelk01] failed to retrieve password hash for reserved user [elastic]
org.elasticsearch.action.UnavailableShardsException: at least one primary shard for the index [.security-7] is unavailable
at org.elasticsearch.xpack.security.support.SecurityIndexManager.getUnavailableReason(SecurityIndexManager.java:181) ~[x-pack-security-7.8.0.jar:7.8.0]
解决方案:
上述错误报出后,其实ES服务是启动成功的,只是身份验证不可用了,所以这里直接使用新用户去请求ES,删除掉 .security
开头的索引
curl -u restore_user -k -X DELETE "https://localhost:9200/.security-*"
该命令执行后,会让你设置 restore_user 用户的密码,随便设置一个即可,后面会删除该用户
重新启动ES服务
systemctl restart elasticsearch.service
发现错误信息已经没有了,并且ES重新建立了 .security-7
索引,此时尝试使用原来的用户名密码连接也可正常连接
删除上面新建的临时用户
curl -k -X DELETE "https://localhost:9200/_security/user/restore_user"
除上面新建的临时用户
curl -k -X DELETE "https://localhost:9200/_security/user/restore_user"
至此,此错误修复完毕