专栏首页大数据入坑指南Elasticsearch升级踩坑记之使用snapshot备份数据

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

参考文档: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 共享目录相关的服务需要打开好几个端口,为了避免防火墙的影响,这里直接关闭防火墙。

systemctl stop firewalld

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

chown -R elasticsearch:elasticsearch /data/essnapshot
chown -R elasticsearch:elasticsearch /data/backup_es

客户端

chown -R elasticsearch:elasticsearch /data/backup_es

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

yum install -y nfs-utils

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

/data/essnapshot *(insecure,rw,no_root_squash,sync)

NFS服务做成开机启动

systemctl enable rpcbind.service systemctl enable nfs-server.service

启动NFS相应的服务

systemctl start rpcbind.service systemctl start nfs-server.service

确认服务是否启动

rpcinfo -p

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

yum install -y nfs-utils 
systemctl enable rpcbind.service 
systemctl start rpcbind.service

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

[root@localhost data]# showmount -e 192.168.1.146
Export list for 192.168.1.146:
/data/essnapshot *

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

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都是一致的,如下所示

-rw-rw-r--  1 elasticsearch elasticsearch   39 3月  12 17:36 test.txt

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

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一样。

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

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

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成功了。

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

查看仓库

[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.创建所有索引的快照

[root@localhost backup_es]# curl -XPUT http://192.168.1.146:9200/_snapshot/my_backup/snapshot_test20180312
{"accepted":true}

2.查看备份

[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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 变量的删除与替换

    这就是#号的作用,一个#表示从前面删除匹配的最短路径。echo ${path#/*local/bin:}这行表达式中的/*local/bin这段路径匹配/usr...

    我是李超人
  • 第九篇 Zabbix创建用户群组

    Zabbix有多个默认的用户群组,其中最常用的是Zabbix administrators超级管理员组,其它的几乎没什么用,像添加一个主机监控一样,每添加一个用...

    我是李超人
  • python自学成才之路 线程间协作之Semaphore,threading.local()

    信号量 信号量用来控制线程并发数的,信号量里面维护了一个计数器,这个计数器可以理解为锁的数量,线程通过acquire方法去申请锁,每申请到一个锁,计数器就减1...

    我是李超人
  • 《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch

    前面 FLink 的文章中我们已经介绍了说 Flink 已经有很多自带的 Connector。

    zhisheng
  • Pandas处理csv表格

    可以结合这篇使用:数据处理利器Pandas使用手册 1)读取csv文件 data =pandas.read_csv(‘test.csv’) //返回的是Data...

    MachineLP
  • Linux 多线程编程

    Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用libpthr...

    chaplinthink
  • TP数据避免重复和去重处理

    alter table gift_doc add unique index(num_id);

    php007
  • 时间序列(三)

    (时间序列模型中的ARMA模型由于原理对我来说理解有些困难,加之最近的北美数学建模大赛即将开始,自己为了顾全大局,多看掌握几个重要模型,所以ARMA模型的...

    AI那点小事
  • 快速学习-以太坊交易的 value 和 data

    cwl_java
  • Android 保存文件路径方法

    可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来...

    砸漏

扫码关注云+社区

领取腾讯云代金券