前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch升级踩坑记之使用snapshot备份数据

Elasticsearch升级踩坑记之使用snapshot备份数据

作者头像
我是李超人
发布2020-08-21 10:38:13
7560
发布2020-08-21 10:38:13
举报
文章被收录于专栏:大数据入坑指南

参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/modules-snapshots.html 环境:有三台机器192.168.1.146,192.168.1.151,192.168.1.152,系统均是Centos7,上面分别安装了elasticsearch2.4.6(为了学习之用才安装的2.4.6版本)。

在使用snapshot备份数据过程中碰到过不少问题,其实都是和权限有关(后面会讲),具体踩坑记录这里就不写了,直接写正确的操作过程吧。

第一步创建共享目录 创建共享目录 参考:http://blog.csdn.net/rznice/article/details/72654826 共享目录相关的服务需要打开好几个端口,为了避免防火墙的影响,这里直接关闭防火墙。

代码语言:javascript
复制
systemctl stop firewalld

创建相应的文件夹 146上创建/data/essnapshot和/data/backup_es,151和152上建/data/backup_es,因为在创建snapshot时,elasticsearch是用elasticsearch用户来执行的,所以需要个这些文件夹分别授权(下面的elasticsearch用户就是你执行elasticsearch的用户,根据你自己的来) 服务端

代码语言:javascript
复制
chown -R elasticsearch:elasticsearch /data/essnapshot
chown -R elasticsearch:elasticsearch /data/backup_es

客户端

代码语言:javascript
复制
chown -R elasticsearch:elasticsearch /data/backup_es

将46作为NFS服务端,在上面安装相应的服务

代码语言:javascript
复制
yum install -y nfs-utils

在NFS服务端146编辑/etc/exports文件,添加

代码语言:javascript
复制
/data/essnapshot *(insecure,rw,no_root_squash,sync)

NFS服务做成开机启动

代码语言:javascript
复制
systemctl enable rpcbind.service systemctl enable nfs-server.service

启动NFS相应的服务

代码语言:javascript
复制
systemctl start rpcbind.service systemctl start nfs-server.service

确认服务是否启动

代码语言:javascript
复制
rpcinfo -p

看到一堆与nfs相关的服务,说明启动成功了 在客户端151,152安装相应的服务,并启动

代码语言:javascript
复制
yum install -y nfs-utils 
systemctl enable rpcbind.service 
systemctl start rpcbind.service

在客户端查看服务端共享目录

代码语言:javascript
复制
[root@localhost data]# showmount -e 192.168.1.146
Export list for 192.168.1.146:
/data/essnapshot *

分别在客户端机器151,152上挂载共享目录,将服务端共享目录挂载在客户端/data/backup_es这个位置

代码语言:javascript
复制
mount -t nfs 192.168.1.146:/data/essnapshot /data/backup_es -o proto=tcp -o nolock

到此共享目录已经创建完成,可以测试是否成功了,测试的方法很简单。切换到elasticsearch用户,首先在NFS服务端146的/data/essnapshot上创建一个test.txt文件,再分别到151和152的/data/backup_es上以elasticsearch用户查看test.txt文件是否存在。如果存在则可以说明共享目录创建成功了。但是别开心的太早,现在在来来看看另一个致命的问题,仔细看看text.txt文件的user和group。如果你比较幸运,发现三台机器上test2.txt文件的user和group都是一致的,如下所示

代码语言:javascript
复制
-rw-rw-r--  1 elasticsearch elasticsearch   39 3月  12 17:36 test.txt

那么很好,接下来的操作你就不需要了,如果不是一致的,如下所示(我们的机器不一样,所以显示的可能是不一致的):

代码语言:javascript
复制
146:-rw-rw-r--  1 elasticsearch 1005   39 3月  12 17:36 test.txt
151:-rw-rw-r--  1 nginx elasticsearch 39 3月  12 17:36 test.txt
152:-rw-rw-r--  1 1004 elasticsearch 39 3月  12 17:36 test.txt

那么说明,你三台机器的elasticsearch用户的uid不一致,gid也不一致,为什么会这样呢?实际上是因为你在其中一台机器创建test.txt文件时,其它机器在共享这个文件时,这个文件的uid和gid也被共享了,虽然你是用elasticsearch用户创建的test.txt文件,但是由于三台机器的elasticsearch用户uid和gid不一致,结果在不同机器上看到的用户和用户组不一致,这样就存在权限问题了,设想一下,你在使用snapshot备份的时候,在一台机器上创建了一个备份,而由于三台机器的用户uid和gid不一样在写入的时候,是不是会发生拒绝访问的问题。所以解决方法就是得确保三台机器的uid一致,gid也一致。

解决方法很简单,重新创建一个elastic用户和用户组,使三台机器的elastic用户和用户组的uid,gid一样。

代码语言:javascript
复制
指定gid创建用户组(1020这个uid和gid确保没有被其它用户和用户组使用,可以在/etc/passwd里面查看,只要比最大的大就没问题)
groupadd -g 1020 elastic
创建用户,指定uid和用户组
useradd -u 1020 -g elastic elastic
在三台机器都执行上面的操作,那么三台机器的elastic用户uid都是1020,elastic用户组的gid都是1020

将三台机器所有相关目录全部设置权限为elastic

代码语言:javascript
复制
Elasticsearch启动目录
chown -R elastic:elastic elasticsearch-2.4.6
存放elasticsearch数据的目录,我的在esData下
chown -R elastic:elastic /data/esData/
日志目录,我的在es下
chown -R elastic:elastic /data/es/
Snapshot存放的目录
chown -R elastic:elastic /data/backup_es/

最后再执行创建snapshot仓库,OK成功了。

代码语言:javascript
复制
[root@localhost data]# curl -XPUT 'http://192.168.1.146:9200/_snapshot/my_backup' -d '{
> "type": "fs",
> "settings": {
> "location": "/data/backup_es",
> "compress": true
> }
> }'
{"acknowledged":true}

查看仓库

代码语言:javascript
复制
[root@localhost backup_es]# curl -XGET 'http://192.168.1.146:9200/_snapshot/my_backup?pretty'
{
  "my_backup" : {
    "type" : "fs",
    "settings" : {
      "compress" : "true",
      "location" : "/data/backup_es"
    }
  }
}

创建快照备份 1.创建所有索引的快照

代码语言:javascript
复制
[root@localhost backup_es]# curl -XPUT http://192.168.1.146:9200/_snapshot/my_backup/snapshot_test20180312
{"accepted":true}

2.查看备份

代码语言:javascript
复制
[root@localhost backup_es]# curl -XGET http://192.168.1.146:9200/_snapshot/my_backup/snapshot_test20180312?pretty
{
  "snapshots" : [ {
    "snapshot" : "snapshot_test20180312",
    "version_id" : 2040699,
    "version" : "2.4.6",
    "indices" : [ "megacorp", "website", "logstash-2013.12.11", "my_index_v1", "my_index_v2", "cars", "logstash-18-02-26", "logstash-2018.03.06", "my_index", "my_store", "logstash-2011.05.19", "my_index2", "logstash-2011.05.18", "logstash-2015.01.04" ],
    "state" : "SUCCESS",
    "start_time" : "2018-03-12T09:36:19.345Z",
    "start_time_in_millis" : 1520847379345,
    "end_time" : "2018-03-12T09:36:20.741Z",
    "end_time_in_millis" : 1520847380741,
    "duration_in_millis" : 1396,
    "failures" : [ ],
    "shards" : {
      "total" : 42,
      "failed" : 0,
      "successful" : 42
    }
  } ]
}

也可以到/data/backup_es目录下查看,备份是否创建成功。确认索引都备份完成之后,可以开始升级elasticsearch了。

备注:上面我是使用共享目录方式来备份的,不知道不使用共享目录的方式能不能备份,没试过,感兴趣的可以尝试一下。

升级elasticsearch请参考: http://blog.csdn.net/u012062455/article/details/79571898

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/03/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档