之前写了一个爬虫项目,数据存在本地,现在想要把项目部署在服务器上,怎么把数据弄过去是个问题,毕竟爬虫爬了几天的数据再重新获取也比较麻烦。

可能是数据库设计的原因,ElasticSearch并不能直接像MySql一样导出个sql文件,然后再另外一边重新导入就好了。

网上的资料大部分都是针对linux到linux的,而且还是多节点的。。。我就是想把我的小项目(一个节点的那种)从windows上搞到linux服务器上而已。下面说一下我遇到的坑和最后的解决方案

  1. 首先上网搜索解决方案,然后出现了一大堆,首先是elasticsearch-dump,这种需要安装在接收数据一方的软件,我怎么也想不明白,在接收方发个请求,发送方的机器就会把数据发过来,这听起来就很诡异(而且我的windows处在内网中,端口映射9200端口怎么样也不成功,可能是elasticsearch有什么保护),我想肯定需要一点其它配置吧,然而并没有找到相关的文章,最后结果很明显就是失败了。

  2. 然后就是elasticsearch-exporter,这个是安装在发送方的工具,听起来似乎靠谱了一点,也避开了我的windows处在内网中没有公网ip的问题,发送命令大概是 指定源地址,目的地址,端口号,索引名的就可以了,感觉应该可以成功,但是很遗憾的失败了,我想直接从一个机器在不经另外一个机器许可的情况下,把数据传过去也是一件很诡异的事情(比如tcp需要接收方机器处于监听状态)。

  3. 还有一种是github上的用go语言写的工具,叫elasticsearch-migration,应该是个大神写的,但是好像要自己编译然而我不懂go,看的是一脸懵逼。

  4. 最后一种是我成功的那个方法,就是用快照的方法,其实这个方法我一开始是放弃了的,因为要在elasticsearch.yml里配置的path.repo: /storage/esdata属性,后面跟的是一个linux类型的地址,windows上的地址应该是 C:\backup 这种类型的,我感觉用不了这种方法,后面在前面的几种方法都失败的情况下试了这种方法,没想到成功了。

    1. 修改elasticsearch.yml配置,添加如下
      path.repo: /backup,这个目录在windows里是表示elasticsearch文件夹所在位置的根目录,比如你的elasticsearch的地址是E:\elasticsearch,这个路径就表示E:\backup,最好现在相应的位置建立好文件夹。
    2. 由于是单节点,我这里就不做什么自平衡,共享目录挂载之类的事情(虽然我也不懂是什么)相应的文章有很多,我这个主要是给新手看的。然后直接向elasticsearch的api接口发送创建快照的命令,这个方法有很多,我看很多文章使用的curl命令,但是windows下是没有这个命令的,windows下可以下载cmder这个软件来模拟linux命令行,也可以使用postman这种工具,kibana的dev插件也是可以的,反正就是一切能发rest请求的软件都可以,你要是用hackbar也行。。。curl的命令是curl -XPUT http://127.0.0.1:9200/_snapshot/my_backup -d
      ‘{
      “type”: “fs”,
      “settings”: {
      “location”: “/backup”,
      “compress”: true
      }’
      这里的ip地址大家可以改成相应的ip地址,一本本机就行了,后面的my_backup是创建快照的名字,这个大家也可以自己改,-d后面表示的是发送的数据,所以用引号括起来了,location就是之前配置文件里写的那个地址,如果elasticsearch处于启动状态,先重启再执行命令,要不然yml文件里的配置没有起作用,还有就是settings不是setting。。。,出现acknowledge:true就表示成功了。 curl -XGET http://127.0.0.1:9200/_snapshot/my_backup?pretty 可以查看状态。
    3. curl -XPUT http://127.0.0.1:9200/_snapshot/my_backup/index_name -d’
      {
      “indices”: “index_name”
      }’
      这一步是创建需要迁移索引的快照,index_name表示需要迁移的索引名称,
      出现{“accepted”:true}就表示成功了,现在去之前定义的文件夹里面就可以看到多了一些东西,现在把文件夹里的东西全部打包成一个压缩文件,然后想办法传到你需要迁移的服务器上去,ftp,lrzsz什么的都可以,这种方式就有点类似于mysql导出sql文件,看起来就比较合理。文件传过去之后,这台机器就没什么事情了。
    4. 在新的机器上,像之前的1,2步一样,建立好存放快照的目录并定义好快照的名称,这个名称是否与之前一致没有影响,然后把之前传过来的压缩包放在定义的快照文件夹里并解压,然后执行 curl -XPOST http://127.0.0.1:9200/_snapshot/my_backup/index_name/_restore,这里的my_backup是表示在这台机器上定义的快照名称,这里的index_name要与之前机器上的索引名要一样,不然会失败,执行完后,出现{“accepted”:true}表示成功。

    这样就能愉快的从windows迁移数据了

10-07 20:38