当es集群的数据量较小的情况下elasticdump这个工具比较方便,但是当数据量达到一定级别比如上百G的时候,elasticdump速度就很慢了,此时我们可以使用快照的方法进行备份
elasticdump工具的使用可以参考 博文:elasticsearch5.0.1集群一次误删除kibana索引引发的血案 http://blog.csdn.net/reblue520/article/details/61925375

个人感觉这两个工具各有优缺点,和mysql的备份工具比起来:
elasticdump --> mysqldump# 都是逻辑备份需要将数据一条一条导出再导入,适合数据量小的场景
snapshot --> percona-xtrabackup # 物理备份,速度取决于磁盘IO能力,适合大数据量场景

快照方案的大概场景:

1.创建一个共性目录(新集群和老集群都可以访问这个目录),创建一个快照将老集群写入到这个共享目录中

2.将快照恢复到新集群中(即共享目录)

快照方案主要试用于新老集群的迁移,并且最好两个集群在一个局域网中

一、使用snapshot恢复.kibana索引数据

1.修改配置文件:
vim elasticsearch.yml

path.repo: ["/data/bak"]

2.创建仓库
curl -XPUT http://10.25.177.47:9200/_snapshot/my_backup -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/bak",
"compress": true
    }
}
'
# 返回true表示成功
{"acknowledged":true}

查看仓库
# curl -XGET 'http://10.25.177.47:9200/_snapshot/my_backup?pretty'
{
  "my_backup" : {
    "type" : "fs",
    "settings" : {
      "compress" : "true",
      "location" : "/data/bak"
    }
  }
}

3、备份数据
curl -XPUT http://10.25.177.47:9200/_snapshot/my_backup/snapshot_20161207
执行上面的命令会快照ealsticsearch上所有的索引。

如果需要快照指定的索引

curl -XPUT http://10.25.177.47:9200/_snapshot/my_backup/snapshot_20170316 -d '
{
    "indices": ".kibana"
}
'
{"accepted":true}

如果成功返回结果显示{"accepted":true}

4、查看备份

# curl -XGET http://10.25.177.47:9200/_snapshot/my_backup/snapshot_20170316?pretty
{
  "snapshots" : [
    {
      "snapshot" : "snapshot_20170316",
      "uuid" : "DhdKZkTaQ4G-eLAjJ68zGQ",
      "version_id" : 5000199,
      "version" : "5.0.1",
      "indices" : [
        ".kibana"
      ],
      "state" : "SUCCESS",
      "start_time" : "2017-03-16T09:56:02.075Z",
      "start_time_in_millis" : 1489658162075,
      "end_time" : "2017-03-16T09:56:02.154Z",
      "end_time_in_millis" : 1489658162154,
      "duration_in_millis" : 79,
      "failures" : [ ],
      "shards" : {
        "total" : 1,
        "failed" : 0,
        "successful" : 1
      }
    }
  ]
}

也可以使用下面的命令查看快照的状态

# curl -XGET http://10.25.177.47:9200/_snapshot/my_backup/snapshot_20170316/_status?pretty
{
  "snapshots" : [
    {
      "snapshot" : "snapshot_20170316",
      "repository" : "my_backup",
      "uuid" : "DhdKZkTaQ4G-eLAjJ68zGQ",
      "state" : "SUCCESS",
      "shards_stats" : {
        "initializing" : 0,
        "started" : 0,
        "finalizing" : 0,
        "done" : 1,
        "failed" : 0,
        "total" : 1
      },
      "stats" : {
        "number_of_files" : 4,
        "processed_files" : 4,
        "total_size_in_bytes" : 48362,
        "processed_size_in_bytes" : 48362,
        "start_time_in_millis" : 1489658162100,
        "time_in_millis" : 41
      },
      "indices" : {
        ".kibana" : {
          "shards_stats" : {
            "initializing" : 0,
            "started" : 0,
            "finalizing" : 0,
            "done" : 1,
            "failed" : 0,
            "total" : 1
          },
          "stats" : {
            "number_of_files" : 4,
            "processed_files" : 4,
            "total_size_in_bytes" : 48362,
            "processed_size_in_bytes" : 48362,
            "start_time_in_millis" : 1489658162100,
            "time_in_millis" : 41
          },
          "shards" : {
            "0" : {
              "stage" : "DONE",
              "stats" : {
                "number_of_files" : 4,
                "processed_files" : 4,
                "total_size_in_bytes" : 48362,
                "processed_size_in_bytes" : 48362,
                "start_time_in_millis" : 1489658162100,
                "time_in_millis" : 41
              }
            }
          }
        }
      }
    }
  ]
}
5、删除备份

curl -XDELETE http://10.25.177.47:9200/_snapshot/my_backup/snapshot_20170316
{"acknowledged":true}

6、恢复备份测试
①删除.kibana索引,可以看到报表已经没有了
curl -XDELETE http://10.25.177.47:9200/.kibana
{"acknowledged":true}

②关闭.kibana索引
curl -XPOST http://10.25.177.47:9200/.kibana/_close
{"acknowledged":true}

③使用快照恢复
curl -XPOST http://10.25.177.47:9200/_snapshot/my_backup/snapshot_20170316/_restore
{"accepted":true}

curl '10.25.177.47:9200/_cat/indices?v'

可以看到成功恢复

二、生产环境实战(当老集群磁盘空间不足的情况)

1)旧的集群备份出来的数据,要拷贝到新集群中。
解决两个问题:
1.旧集群没有足够的空间存储这些备份出来的数据
2.备份出来都需要拷贝到新的集群中,此处想到一个方法,通过nfs或者sshfs将新集群机器的目录远程挂载(mount)到旧集群机器上。

2)挂载目录,2.1)和2.2)可以任选一种方式  
  
2.1)使用sshfs进行挂载:  
  
// 在每台机器上安装sshfs  
yum install fuse sshfs -y
  
// 每台机器上创建Mount共享目录  
mkdir /data/backup_es
  
// 旧集群的每台机器上挂载共享目录(分别挂载了新机器的/opt/data07目录到/opt/backup_es)  
sshfs root@192.168.2.1:/opt/data07 /opt/backup_es -o allow_other  
  
// 测试运行ES的用户是否有对共享目录的写权限  
sudo -u elastic touch /opt/backup_es  
  
// 在旧机器上将共享目录的权限付给ES的运行用户  
chown elastic:elastic -R /opt/backup_es  
  
  
2.2)使用Mount nfs进行挂载(推荐):
// 在新集群的机器上(10.25.177.47)添加共享的文件夹和客户端可以访问的IP地址
创建目录:
mkdir /data/voice

vim /etc/exports  
/data/voice *(insecure,rw,no_root_squash,sync,anonuid=500,anongid=500)
  
// 查看共享文件夹
yum install -y exportfs
exportfs -rv
  
// 重启启动新集群机器的NFS服务  
systemctl restart nfs
  
// 旧集群的每台机器上创建共享目录  
mkdir /data/backup_es
  
// 旧集群每一台服务器上进行Mount挂载  
mount -t nfs 10.25.177.47:/data/voice /data/backup_es -o proto=tcp -o nolock

列出nfs服务端共享的目录:
# showmount -e 10.25.177.47
Export list for 10.25.177.47:
/data/voice *

报错:
mount: wrong fs type, bad option, bad superblock on 10.25.177.47:/opt/data07,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)

In some cases useful info is found in syslog - try
       dmesg | tail or so.

解决:
yum install -y nfs-utils

报错:
mount.nfs: access denied by server while mounting 10.25.177.47:/data/voice 
解决:
nfs服务端
 vim /etc/sysconfig/nfs
修改如下:
RPCNFSDARGS="-N 2 -N 3"
        ----->启用
# Turn off v4 protocol support
RPCNFSDARGS="-N 4"     ---->启用
重启生效
systemctl restart nfs
  
// 在旧机器上将共享目录的权限付给ES的运行用户  
chown yunva:yunva -R /data/backup_es

3)创建ES仓库  
  
3.1创建ES仓库my_backup

修改配置文件:
vim elasticsearch.yml
# 添加如下配置(需要在旧集群的每个节点上添加):
path.repo: ["/data/backup_es"]

创建快照仓库命令:
curl -XPUT http://10.26.241.237:9200/_snapshot/my_backup -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/backup_es",
"compress": true
    }
}
'
{"acknowledged":true}

查看仓库
# curl -XGET 'http://10.26.241.237:9200/_snapshot/my_backup?pretty'
{
  "my_backup" : {
    "type" : "fs",
    "settings" : {
      "compress" : "true",
      "location" : "/data/backup_es"
    }
  }
}

4)创建快照备份

4.1创建所有索引的快照
curl -XPUT http://10.26.241.237:9200/_snapshot/my_backup/snapshot_voice20170316
执行上面的命令会快照ealsticsearch上所有的索引。

4.2创建指定索引的快照

curl -XPUT http://10.26.241.237:9200/_snapshot/my_backup/snapshot_voice20170316 -d '
{
    "indices": "voice:mic:lose"
}
'
如果成功返回结果显示{"accepted":true}

4、查看备份

# curl -XGET http://10.26.241.237:9200/_snapshot/my_backup/snapshot_voice20170316?pretty
{
  "snapshots" : [
    {
      "snapshot" : "snapshot_voice20170316",
      "uuid" : "QBxu1worT3KDMf9GdG8svA",
      "version_id" : 5000199,
      "version" : "5.0.1",
      "indices" : [
        "voice:mic:lose"
      ],
      "state" : "SUCCESS",
      "start_time" : "2017-03-16T12:07:42.846Z",
      "start_time_in_millis" : 1489666062846,
      "end_time" : "2017-03-16T12:08:03.831Z",
      "end_time_in_millis" : 1489666083831,
      "duration_in_millis" : 20985,
      "failures" : [ ],
      "shards" : {
        "total" : 5,
        "failed" : 0,
        "successful" : 5
      }
    }
  ]
}

也可以使用下面的命令查看快照的状态

# curl -XGET http://10.25.177.47:9200/_snapshot/my_backup/snapshot_voice20170316/_status?pretty

可以看到ES会同时进行几个分片的备份,而且显示备份的数据情况。  
通过观察可以看到,旧集群上共享的两个目录/data/backup_es会均分备份出来的数据

{
  "snapshots" : [
    {
      "snapshot" : "snapshot_voice20170316",
      "repository" : "my_backup",
      "uuid" : "42WjLbCLQwadjBeMTK0p2w",
      "state" : "SUCCESS",
      "shards_stats" : {
        "initializing" : 0,
        "started" : 0,
        "finalizing" : 0,
        "done" : 1,
        "failed" : 0,
        "total" : 1
      },
      "stats" : {
        "number_of_files" : 107,
        "processed_files" : 107,
        "total_size_in_bytes" : 943093922,
        "processed_size_in_bytes" : 943093922,
        "start_time_in_millis" : 1489665958527,
        "time_in_millis" : 52189
      },
      "indices" : {
        "voice:mic:lose" : {
          "shards_stats" : {
            "initializing" : 0,
            "started" : 0,
            "finalizing" : 0,
            "done" : 1,
            "failed" : 0,
            "total" : 1
          },
          "stats" : {
            "number_of_files" : 107,
            "processed_files" : 107,
            "total_size_in_bytes" : 943093922,
            "processed_size_in_bytes" : 943093922,
            "start_time_in_millis" : 1489665958527,
            "time_in_millis" : 52189
          },
          "shards" : {
            "0" : {
              "stage" : "DONE",
              "stats" : {
                "number_of_files" : 107,
                "processed_files" : 107,
                "total_size_in_bytes" : 943093922,
                "processed_size_in_bytes" : 943093922,
                "start_time_in_millis" : 1489665958527,
                "time_in_millis" : 52189
              }
            }
          }
        }
      }
    }
  ]
}

6)耐心等待直到所有的的备份都完成。  
备份完成后,查看旧集群每台机器的/data/backup_es目录,查看备份出的数据。  
在所有旧集群服务器上取消挂载 umount /data/backup_es

7)在新集群中恢复  
  
// 在新集群每台机器上将共享目录的权限付给ES的运行用户  
chown yunva:yunva -R /data/voice
  
// 停止ES,在新集群的每台服务器上都添加设置elasticsearch.yml的参数  
path.repo: ["/data/voice"]

8)恢复备份
①删除voice:mic:lose索引,可以看到节点已经没有了
curl -XDELETE http://10.25.177.47:9200/voice:mic:lose
{"acknowledged":true}

# curl '10.25.177.47:9200/_cat/indices?v'
health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana OzGTpr9TSN6WGP2ynXBmaQ   1   1         40            0     47.2kb         47.2kb

# curl '10.25.177.47:9200/_cat/indices?v'
health status index          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   voice:mic:lose 5vyq-0VYSnqfV9fN9dTNmQ   1   1    3070979            0    899.4mb        899.4mb
yellow open   .kibana        OzGTpr9TSN6WGP2ynXBmaQ   1   1         40            0     47.2kb         47.2kb

// 启动ES,在新集群创建仓库  
curl -XPUT http://10.25.177.47:9200/_snapshot/my_backup -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/voice",
"compress": true
    }

'
8)在新集群中恢复数据  
// 使用RESTful API进行备份的恢复  
使用快照恢复
curl -XPOST http://10.25.177.47:9200/_snapshot/my_backup/snapshot_voice20170316/_restore
{"accepted":true}

// 查看恢复的状态
curl -XGET http://10.25.177.47:9200/_snapshot/my_backup/snapshot_voice20170316/_status

curl '10.25.177.47:9200/_cat/indices?v'
9)耐心等待,直至恢复完成。

elasticsearch5.0集群大数据量迁移方法及注意事项的更多相关文章

  1. elasticsearch5.0集群+kibana5.0+head插件插件的安装

    elasticsearch5.0集群+kibana5.0+head插件插件的安装 es集群的规划: 两台16核64G内存的服务器: yunva_etl_es1  ip:1.1.1.1 u04es01. ...

  2. redis 3.0 集群__数据迁移和伸缩容

    添加节点 1,启动2个新的redis-sever, 参照 ( redis 3.0 集群____安装 ),端口号为 7007 和 7008 2,使用命令 redis-trib.rb add-node 命 ...

  3. MySQL分页查询大数据量优化方法

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...

  4. MYSQL千万级别数据量迁移Elasticsearch5.6.1实战

    从关系型库中迁移数据算是比较常见的场景,这里借助两个工具来完成本次的数据迁移,考虑到数据量并不大(不足两千万),未采用snapshot快照的形式进行. Elasticsearch-jdbc,Githu ...

  5. 软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”

    去哪儿 Hadoop 集群 Federation 数据拷贝优化 背景 去哪儿 Hadoop 集群随着去哪儿网的发展一直在优化改进,基本保证了业务数据存储量和计算量爆发式增长下的存储服务质量.然而,随着 ...

  6. 大数据量时Mysql的优化

    (转自网络) 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时 ...

  7. Redis 切片集群的数据倾斜分析

    Redis 中如何应对数据倾斜 什么是数据倾斜 数据量倾斜 bigkey导致倾斜 Slot分配不均衡导致倾斜 Hash Tag导致倾斜 数据访问倾斜 如何发现 Hot Key Hot Key 如何解决 ...

  8. 大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用

    大家下午好,我是来自当贝网络科技大数据平台的基础开发工程师 王昱翔,感谢社区的邀请来参与这次分享,关于 Apache DolphinScheduler 在当贝网络科技大数据环境中的应用. 本次演讲主要 ...

  9. 大数据量场景下storm自定义分组与Hbase预分区完美结合大幅度节省内存空间

    前言:在系统中向hbase中插入数据时,常常通过设置region的预分区来防止大数据量插入的热点问题,提高数据插入的效率,同时可以减少当数据猛增时由于Region split带来的资源消耗.大量的预分 ...

随机推荐

  1. P3747 相逢是问候 欧拉定理+线段树

    巨难!!! 去年六省联考唯一的一道黑牌题,我今天一天从早到晚,把它从暴力15分怼到了90分,极端接近正解了. bzoj上A了,但是洛谷和loj上面就不行.伪正解会T,奇奇怪怪的类正解会WA.. 那么, ...

  2. Node.js npm uuid

    nodejs 提供了一个 node-uuid 模块用于生成 uuid 使用方法为 const uuidV1 = require('uuid/v1'); uuidV1(); 或者为 const uuid ...

  3. linux 空间释放,mysql数据库空间释放

    测试告急,服务器不行了.down了…… 1.linux如何查看磁盘剩余空间: [root@XXX~]# df -lhFilesystem        Size      Used      Avai ...

  4. P2422 良好的感觉

    P2422 良好的感觉 给定一段序列, 其中元素 \(0 \leq a_{i} \leq 100000\) 定义一段子段 \([L, R]\) 的舒适值为 \(\min_{L \leq i \leq ...

  5. golang 的时间格式化操作

    怎么做 简而言之 time.Now().Format("2006-01-02 15:04:05") 你将会获得如同 yyyy-MM-dd hh-mm-ss 这样的输出. 还可以 在 ...

  6. 图解项目管理流程:禅道&JIRA中的操作

    禅道作为优秀的国产开源项目管理软件,禅道集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,完整覆盖了研发项目管理的核心流程.禅道的设计理念在于提供一体化的解决方案,流程图完整呈现了项 ...

  7. tomcat中配置servlet.xml的JNDI或JDBC连接数据库【原】

    tomcat中配置servlet.xml的JNDI或JDBC连接数据库 一. JNDI 1. tomcat环境 找到X:\xxx\......\apache-tomcat-6.0.39\conf\se ...

  8. vue自学入门-1(Windows下搭建vue环境)

    本人是一个喜欢动手的程序员,先跑起来个HelloWorld,增加感性认识,这三篇入门文章,花了不到一个小时,从网上找资料,程序跑通后,整理出来的,有的新人可能去哪找资料,运行代码都不知道,分享出来,大 ...

  9. Managers经理/代理形式的数据共享

    代理方式实现进程间共享字典和列表形式的数据, 代码块: import os from multiprocessing import Process,Manager def f(d,l,normalLi ...

  10. java程序运存扩容

    线上程序随着业务增多,运行的越来越慢,初步判定是因为内存分配的太小导致频繁的进行GC和OOM,于是着手增加内存上限. 增加内存上限都知道是修改java启动的opt,因为服务容器是tomcat 首先是在 ...