参考文档: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