测试使用的elasitcsearch版本是6.3
nodejs版本10.9
linux版本为centos7.9
elasicsearh-head插件
Head插件是Elasticsearch的图形化界面工具,通过此插件可以很方便的对数据进行增删改查等数据交互操作。在Elasticsearch5.x版本以后,head插件已经是一个独立的Web App了,所以不需要和Elasticsearch进行集成。可以将Head插件安装到任何一台机器上,这里将Head插件安装到172.16.213.37(server1)机器上,可以从https://github.com/mobz/elasticsearch-head 下载此插件。
由于Head插件本质上是一个Node.js的工程,因此需要安装Node.js,使用npm工具来安装依赖的包。这里简单说下Node.js和NPM,作为知识的铺垫。
Node.js是一个Javascript运行环境,一个新兴的前端框架,用于方便地搭建响应速度快、易于扩展的网络应用。
NPM的全称是Node Package Manager,是一个Node.JS包管理和分发工具,它定义了包依赖关系标准,并提供了用于JavaScript开发所需要的各种常见第三方框架的下载。
在Centos7.x系统上,可以直接通过yum在线安装Node.js和NPM工具(前提是你的机器要能上网)
安装步骤
#下载nodejs以及npm,编译好的二进制版本
wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz
mkdir -p /usr/software
tar -xvf node-v10.9.0-linux-x64.tar.xz -C /usr/software/
mv /usr/software/node-v10.9.0-linux-x64 /usr/software/node
#设置软连接
ln -s /usr/software/nodejs/bin/npm /usr/local/bin/
ln -s /usr/software/nodejs/bin/node /usr/local/bin/
#安装git
yum install git
#在码云上下载elastic-search的源码
cd /usr/local
git clone https://gitee.com/githubd/elasticsearch-head.git
#设置npm仓库为腾讯云
npm config set registry http://mirrors.cloud.tencent.com/npm/
#强制安装
cd /usr/loca/elsticsearch-head
npm audit fix --force
npm install --force
npm安装完成了后,首先修改elasticsearch的配置文件,如下增加
echo 'http.cors.enabled: true' >> /usr/local/elasticsearch/config
echo 'http.cors.allow-origin: "*"' >> /usr/local/elasticsearch/config
echo 'http.cors.allow-methods: "GET"' >> /usr/local/elasticsearch/config
http.cors.enabled: true 表示开启跨域名访问支持
http.cors.allow-origin: ""' 表示跨域访问运行的域名地址,“”代表所有
然后修改elasticsearch的配置文件/usr/local/elasticsearch-head/_site/app.js
#vim /usr/local/elasticsearch-head/_site/app.js
找到 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") | 这行,修改成es的地址
最后启动elasticsearch-head
cd /usr/local/elasticsearch-head
nohup npm run start
启动后访问
easticsearch-head简单使用
首先可以看到,elasticsearch集群有server1、server2和server3三个节点,其中,server3是目前的主节点。点击图上的信息按钮,可查看节点详细信息。
其次,从这个页面上可以看到elasticsearch基本的分片的信息,比如主分片、副本分片等等,以及多少可用分片。由于在elasticsearch配置中设置了5个分片,一个副本分片,因此可以看到每个索引都有10个分片,每个分片都用0、1、2、3、4等数字加方框表示,其中,粗体方框是主分片,细体方框是副本分片。
图中esbigdata是集群的名称,后面的“集群健康值”通过不同的颜色表示集群的健康状态:其中,绿色表示主分片和副本分片都可用;黄色表示只有主分片可用,没有副本分片;红色表示主分片中的部分索引不可用,但是某些索引还可以继续访问。正常情况下都显示绿色。
在索引页面可以创建索引,并且可以设置分片的数量,副本的数量等等。点击创建索引按钮,即可创建一个索引
在数据浏览可以看到每个索引的基本信息,比如有什么字段,存储的内容等。
在基本拆线呢页面可以拼接一些基本查询,如
在符合查询页面,不仅可以做查询,还可以做PUT,GET,DELETE等curl命令。
基本就是easticsearch的基本查询语法。
elasticsearch-dump
elasticsearch-dump 是一款开源的 ES 数据迁移工具,国内码云地址
https://gitee.com/AshitaKaze/elasticsearch-dump
有了它就可以做es的数据迁移。
elasticsearch-dump 使用 node.js 开发,可使用 npm 包管理工具直接安装:
npm install elasticdump -g
-input: 源地址,可为 ES 集群 URL、文件或 stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index}
--input-index: 源 ES 集群中的索引
--output: 目标地址,可为 ES 集群地址 URL、文件或 stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index}
--output-index: 目标 ES 集群的索引
--type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias
如果集群有安全认证,可以参照下面的方法使用 reindex 集群鉴权。在对应的 http 后面,添加 user:password@ 参考样例 elasticsearch-dump --input=http://192.168.1.2:9200/my_index --output=http://user:[email protected]:9200/my_index --type=data。
迁移单个索引
以下操作通过 elasticdump 命令将集群172.16.0.39中的 companydatabase 索引迁移至集群172.16.0.20。
第一条命令先将索引的 settings 先迁移,如果直接迁移 mapping 或者 data 将失去原有集群中索引的配置信息如分片数量和副本数量等,当然也可以直接在目标集群中将索引创建完毕后再同步 mapping 与 data。
elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settings
elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mapping
elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data
迁移所有索引
以下操作通过 elasticdump 命令将集群172.16.0.39中的所有索引迁移至集群172.16.0.20。
此操作并不能迁移索引的配置,例如分片数量和副本数量,必须对每个索引单独进行配置的迁移,或者直接在目标集群中将索引创建完毕后再迁移数据。
elasticdump --input=http://172.16.0.39:9200 --output=http://172.16.0.20:9200
备份索引到文件
./elasticdump --input http://127.0.0.1:9200/osmessageslog-2023-04-13 \
--output /data/bakup/back1.json
检查备份的索引
恢复
/elasticdump elasticdump --input /mnt/company.json --output "http://192.168.200.100:9200/company"
总体而言,elasticdump类似于mysqldump一样,实现的是热备份,如果不在乎迁移效果和数据丢失的话,应该可以简单粗暴的把elasticsearch中定义的data数据存储目录整个拷贝迁移。但是这样一般都有问题