ElkStack介绍

对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:logstash(收集)、elasticsearch(存储+搜索)、kibana(展示),我们将这三个组合起来的技术称之为ELKStack,所以说ELKStack指的是Elasticsearch、Logstash、Kibana技术栈的结合

Elasticsearch

什么是全文检索和lucene?

基于java环境,基于Lucene之上包装一层外壳

Lucene是一个java的搜索引擎库,操作非常繁琐

全文检索和倒排索引:

数据里里的标题:

1.老男孩教育 1

2.老男孩教育linux学院 1 1 1

3.老男孩教育python学院 1 1

4.老男孩教育DBA 1 1

5.老男孩教育oldzhang 1

ES内部分词,评分,倒排索引:

老男孩 1 2 3 4 5

教育 1 2 3 4 5

学院 2 3

linux 2

python 3

DBA 4

用户输入:

老男孩学院

linux老男孩学院DBA

Elasticsearch应用场景

1.搜索: 电商,百科,app搜索

2.高亮显示: github

3.分析和数据挖掘: ELK

Elasticsearch特点

1.高性能,天然分布式

2.对运维友好,不需要会java语言,开箱即用

3.功能丰富

Elasticsearch在电商搜索的实现

mysql:

skuid name

1 狗粮100kg

2 猫粮50kg

3 猫罐头200g

ES:

聚合运算之后得到SKUID:

拿到ID之后,mysql就只需要简单地where查询即可

mysql:

select xx from xxx where skuid 1

ES安装启动(最好同步时间)

0.停止其他软件

systemctl stop docker
iptables -nL
iptables -F
iptables -X
iptables -Z
iptables -nL 查看索引
curl -s 127.0.0.1:9200/_cat/indices

1.下载软件

mkdir /data/soft
[root@db-01 /data/soft]# ll -h
total 268M
-rw-r--r-- 1 root root 109M Feb 25 2019 elasticsearch-6.6.0.rpm
-rw-r--r-- 1 root root 159M Sep 2 16:35 jdk-8u102-linux-x64.rpm

2.安装jdk

rpm -ivh jdk-8u102-linux-x64.rpm
[root@db-01 /data/soft]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

3.安装ES

rpm -ivh elasticsearch-6.6.0.rpm

4.检查

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service netstat -lntup|grep 9200 [root@db01 /data/soft]# curl 127.0.0.1:9200
{
"name" : "pRG0qLR",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "mNuJSe07QM61IOxecnanZg",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

ES配置启动

1.查看ES有哪些配置

[root@db01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml #ES的主配置文件
/etc/elasticsearch/jvm.options #jvm虚拟机配置
/etc/sysconfig/elasticsearch #默认一些系统配置参数
/usr/lib/sysctl.d/elasticsearch.conf #配置参数,不需要改动
/usr/lib/systemd/system/elasticsearch.service #system启动文件

2.自定义配置文件

cp /etc/elasticsearch/elasticsearch.yml  /opt/
cat >/etc/elasticsearch/elasticsearch.yml<<EOF
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200
EOF

3.重启服务后发现报错

systemctl restart elasticsearch.service

4.解决内存锁定失败:

查看日志发现提示内存锁定失败
[root@db01 ~]# tail -f /var/log/elasticsearch/elasticsearch.log
[2019-11-14T09:42:29,513][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked 解决方案:
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity systemctl daemon-reload
systemctl restart elasticsearch.service

es跟mysql关系对比

mysql es
索引
类型
字段 项 key
文档

es交互方式

三种交互方式

curl命令:

最繁琐

最复杂

最容易出错

不需要安装任何软件,只需要有curl命令

es-head插件:

查看数据方便

操作相对容易

需要node环境

kibana:

查看数据以及报表格式丰富

操作很简单

需要java环境和安装配置kibana

es-head插件安装

注意:需要修改配置文件添加允许跨域参数

修改ES配置文件支持跨域

/etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

es-head 三种方式:

1.npm安装方式

  • 需要nodejs环境
  • 需要连接国外源

2.docker安装

3.google浏览器插件(不需要配置跨域也可以)

  • 修改文件名为zip后缀
  • 解压目录
  • 拓展程序-开发者模式-打开已解压的目录
  • 连接地址修改为ES的IP地址

具体操作命令

Head插件在5.0以后安装方式发生了改变,需要nodejs环境支持,或者直接使用别人封装好的docker镜像
插件官方地址
https://github.com/mobz/elasticsearch-head 使用docker部署elasticsearch-head
docker pull alivv/elasticsearch-head
docker run --name es-head -p 9100:9100 -dit elivv/elasticsearch-head 传统安装使用nodejs编译安装elasticsearch-head
cd /opt/
wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz
tar xf node-v12.13.0-linux-x64.tar.xz
mv node-v12.13.0-linux-x64 node
vim /etc/profile
PATH=$PATH:/opt/node/bin source profile
npm -v
node -v
git clone git://github.com/mobz/elasticsearch-head.git
unzip elasticsearch-head-master.zip
cd elasticsearch-head-master
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install
npm run start &

es-head界面(10.0.0.51:9100,连接10.0.0.1:9200)

kibana与ES交互

1.安装kibana

rpm -ivh kibana-6.6.0-x86_64.rpm

2.配置kibana(跟es装在同一台机器上)

[root@db-01 /data/soft]# grep "^[a-Z]" /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.51"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"

3.启动kibana

systemctl start kibana

systemctl status kibana -l #查看状态

4.操作ES

Dev Tools

kibana界面(10.0.0.51:5601)

插入数据(处理问题)

1.使用自定义的ID
PUT oldzhang/info/1
{
"name": "zhang",
"age": "29"
} 2.使用随机ID
POST oldzhang/info/
{
"name": "zhang",
"age": "29",
"pet": "xiaoqi"
} 3.和mysql对应关系建议单独列一个字段(解决延时问题)
POST oldzhang/info/
{
"uid": "1",
"name": "ya",
"age": "29"
}

查询数据

1.简单查询
GET /oldzhang/_search
GET /oldzhang/_search/1 2.单个条件查询
GET /oldzhang/_search
{
"query" : {
"term" : { "job" : "it" }
}
} 3.多个条件查询
GET /oldzhang/_search
{
"query" : {
"bool": {
"must": [
{"match": {"pet": "xiao10"}},
{"match": {"name": "yaz"}}
],
"filter": {
"range": {
"age": {
"gte": 27,
"lte": 30
}
}
}
}
}
}
} 4.查询方式
- curl命令
- es-head 基础查询多个条件
- es-head 左侧字段查询
- kibana dev-tools 命令查询
- kibana 索引查询

更新数据

GET oldzhang/info/1

PUT oldzhang/info/1
{
"name": "zhang",
"age": "30",
"job": "it"
} POST oldzhang/info/1
{
"name": "zhang",
"age": "30",
"job": "it"
}

删除数据

1.删除指定ID的数据
DELETE oldzhang/info/1 2.删除符合条件的数据
POST oldzhang/_delete_by_query
{
"query" : {
"match":{
"age":"29"
}
}
} 3.删除索引
DELETE oldzhang 4.!!!警告!!!
尽量不要在命令行或者Kibana里删除,因为没有任何警告
建议使用es-head删除
生产环境可以先把索引关闭掉,如果一段时间没人访问了再删除

工作中删除ES索引流程

1.先关闭需要删除的索引

2.如果有业务在用,开发回来找你

3.业务迁移完成后,再次关闭

4.假如关闭之后等了一个星期还没有人来找你

5.写邮件给领导,交代清楚所有流程,等回复

6.删除之前备份一份,然后删除

删除索引推荐(变灰)

集群的相关名词

1.集群健康状态
绿色: 所有数据都完整,并且副本数满足
黄色: 所有数据都完整,但是有的索引副本数不满足
红色: 有的数据不完整 2.节点类型
主节点: 负责调度数据分配到哪个节点
数据节点: 负责处理落到自己身上的数据
默认: 主节点同时也是数据节点 3.数据分片
主分片: 实际存储的数据,负责读写,粗框的是主分片
副本分片: 主分片的副本,提供读,同步主分片,细框的是副本分片 4.副本:
主分片的备份,副本数量可以自定义

部署es集群

1.安装java
rpm -ivh jdk-8u102-linux-x64.rpm 2.安装ES
rpm -ivh elasticsearch-6.6.0.rpm 3.配置ES配置文件
配置内存锁定:
systemctl edit elasticsearch.service
[Service]
LimitMEMLOCK=infinity 集群配置文件:
b01配置文件:
cat > /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: linux5
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]
discovery.zen.minimum_master_nodes: 1
EOF
==================================================================
db02配置文件:
cat> /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: linux5
node.name: node-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.52,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]
discovery.zen.minimum_master_nodes: 1
EOF 4.启动
systemctl daemon-reload
systemctl restart elasticsearch 5.查看日志
tail -f /var/log/elasticsearch/linux5.log 6.ES-head查看是否有2个节点

es集群相关注意

注意事项:
1.插入和读取数据在任意节点都可以执行,效果一样
2.es-head可以连接集群内任一台服务 3.主节点负责读写
如果主分片所在的节点坏掉了,副本分片会升为主分片 4.主节点负责调度
如果主节点坏掉了,数据节点会自动升为主节点

查看集群各种信息

GET _cat/nodes
GET _cat/health
GET _cat/master
GET _cat/fielddata
GET _cat/indices
GET _cat/shards
GET _cat/shards/oldzhang

扩容第三台机器

1.安装java

rpm -ivh jdk-8u102-linux-x64.rpm

2.安装ES

rpm -ivh elasticsearch-6.6.0.rpm

3.配置内存锁定

systemctl edit elasticsearch.service
[Service]
LimitMEMLOCK=infinity

4.db03集群配置文件

cat > /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: linux5
node.name: node-3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.53,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.53"]
discovery.zen.minimum_master_nodes: 1
EOF

5.启动

systemctl daemon-reload
systemctl restart elasticsearch

集群注意事项

集群配置文件
1同一个集群的所有成员,集群名称要一样
2.节点名称每个主机都不一样
3.选举相关参数,所有可能成为master的节点数/2+1=集群的大多数 注意1:发现节点参数不需要把集群内所有的机器IP都加上
只需要包含集群内任意一个IP和自己的IP就可以
discovery.zen.ping.unicast.hosts: ["10.0.0.51","10.0.0.53"] 注意2: 集群选举相关的参数需要设置为集群节点数的大多数
discovery.zen.minimum_master_nodes: 2 注意3: 默认创建索引为1副本5分片 注意4: 数据分配的时候会出现2中颜色
紫色: 正在迁移
黄色: 正在复制
绿色: 正常 注意5: 3节点的时候
0副本一台都不能坏
1副本的极限情况下可以坏2台: 1台1台的坏,不能同时坏2台
2副本的情况,发现节点数为1,可以同时坏2台 注意6:集群指令可以在集群内任意一个节点执行
通讯端口防火请要放行
9200 9300
监控状态不能只监控颜色(稳定状态下,监控颜色和节点数)

动态修改最小发现节点数(临时,出问题时动态改不了)

GET _cluster/settings

PUT _cluster/settings
{
"transient": {
"discovery.zen.minimum_master_nodes": 2
}
}

自定义副本分片和索引

索引为2副本3分片
索引为0副本5分片 注意:
索引一旦建立完成,分片数就不可以修改了
但是副本数可以随时修改 命令:
1.创建索引的时候就自定义副本和分片
PUT /yayayaay/
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
}
} 2.修改单个索引的副本数(坏两台,其他索引丢数据)
PUT /oldzhang/_settings/
{
"settings": {
"number_of_replicas": 0
}
} 3.修改所有的索引的副本数
PUT /_all/_settings/
{
"settings": {
"number_of_replicas": 0
}
} 工作如何设置:
2个节点: 默认就可以
3个节点: 重要的数据,2副本 不重要的默认
日志收集: 1副本3分片

监控

监控注意,不能只监控集群状态
1.监控节点数
2.监控集群状态
3.2者任意一个发生改变了都报警 监控命令: curl -s 127.0.0.1:9200/_cat/
GET _cat/nodes
GET _cat/healt

增强插件x-pack监控功能

前提:同步时间,集群有警告,不影响集群
monitoring-->点一下蓝色图标

优化

1.内存
不要超过32G 48内存
系统留一半: 24G
自己留一半: 24G
8G 12G 16G 24G 30G 当前业务量 4G
先给 8G
满了之后先别急的加内存,询问开发和老大,是不是我们的使用问题
加到 12G
满了之后先别着急加内存,询问开发和老大,是不是使用的问题
加16G 20G 24G 所有内存一半
要给老大打招呼,我们已经用到系统的一半内存了
官方建议不要超过30G,要考虑加机器了 2.硬盘的优化
RAID0 ssd
利用了ES集群本身的高可用优势来弥补ssd硬盘和raid0的风险
兼顾速度和安全,比较费钱
3.代码的优化
4.升级大版本 4.升级大版本
- 更新很多新功能
- 性能都会得到大幅提升
- 提前测试好
- 升级的风险
- 数据丢失的风险
- 功能的改变,代码需要修改
- 滚动升级 5.必杀技
加机器 money$$$$$$

集群发现相关参数

#跨机房调大点
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s 超时时间为120s
重试次数为6次
每次间隔30秒

中文分词

未分词的情况:

1.插入测试数据
curl -XPOST http://localhost:9200/index/_create/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://localhost:9200/index/_create/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://localhost:9200/index/_create/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/_create/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
' 2.检测
curl -XPOST http://localhost:9200/index/_search -H 'Content-Type:application/json' -d'
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
' 分词配置
1.配置中文分词器
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip 2.创建索引
curl -XPUT http://localhost:9200/news 3.创建模板
curl -XPOST http://localhost:9200/news/text/_mapping -H 'Content-Type:application/json' -d'
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
} }' 4.插入测试数据
POST /news/text/1
{"content":"美国留给伊拉克的是个烂摊子吗"} POST /news/text/2
{"content":"公安部:各地校车将享最高路权"} POST /news/text/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"} POST /news/text/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"} 5.再次查询数据发现已经能识别中文了
POST /news/_search
{
"query" : { "match" : { "content" : "张亚" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}

中文分词

未分词的情况

1.插入测试数据
POST /news/txt/1
{"content":"美国留给伊拉克的是个烂摊子吗"} POST /news/txt/2
{"content":"公安部:各地校车将享最高路权"} POST /news/txt/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"} POST /news/txt/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"} 2.检测
POST /news/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}

分词配置

0.前提条件
- 所有的ES节点都需要安装
- 所有的ES都需要重启才能生效 1.配置中文分词器
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip 本地文件安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///XXX/elasticsearch-analysis-ik-6.6.0.zip 重启
2.创建索引
PUT /news1 3.创建模板
POST /news1/text/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
} } ik_smart:粗略的分词
ik_max_word:比较精细的分词
4.插入测试数据
POST /news1/text/1
{"content":"美国留给伊拉克的是个烂摊子吗"} POST /news1/text/2
{"content":"公安部:各地校车将享最高路权"} POST /news1/text/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"} POST /news1/text/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"} 5.再次查询数据发现已经能识别中文了
POST /news1/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}

重新查数据的原理图

安装报错总结

1.集群内所有的机器没有全部都安装插件

2.执行完命令不看提示,安装失败了不知道

3.创建的索引和搜索的索引名称不是一个

4.创建模版之前要先单独创建索引

5.安装包上传不完整导致安装失败

6.ES节点配置不统一

7.修改完没有全部重启

8.字典也一样

手动更新字典

1.创建字典
vi /etc/elasticsearch/analysis-ik/main.dic 2.把字典发送到集群内所有的机器
scp main.dic 10.0.0.52:/etc/elasticsearch/analysis-ik/ 3.重启所有的ES节点!!!
systemctl restart elasticsearch 4.更新索引的数据
POST /news2/text/5
{"content":"昨天胖虎很嚣张,让张亚请他吃饭"}
5.搜索测试
POST /news2/_search
{
"query" : { "match" : { "content" : "胖虎" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}

热更新中文分词库

原理图(F12>>>>ETag会改变)

1.安装nginx
[root@db01 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true yum makecache fast
yum -y install nginx
2.配置nginx [root@db01 nginx]# cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost; #access_log /var/log/nginx/host.access.log main; location / {
root /usr/share/nginx/html/;
charset utf-8;
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
}
}
nginx -t
systemctl start nginx
3.写字典
[root@db01 nginx]# cat /usr/share/nginx/html/my.txt

中国
日本
打发
台湾
小日本
伊朗
时间
滚蛋
王总 4.配置es的中文分词器插件
vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">http://10.0.0.51/my.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties> 5.将修改好的IK配置文件复制到其他所有ES节点
scp /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml 10.0.0.53:/etc/elasticsearch/analysis-ik/ 6.重启所有的ES节点
systemctl restart elasticsearch
7.查看日志里字典的词有没有加载出来
tail -f /var/log/elasticsearch/linux5.log 8.打开es日志,然后更新字典内容,查看日志里会不会自动加载 9.搜索测试验证结果
POST /news2/text/6
{"content":"昨天胖虎很嚣张,把班长打了一顿并让班长请他吃饭"} POST /news2/_search
{
"query" : { "match" : { "content" : "班长" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
测试是否更新
echo "武汉" >> /usr/share/nginx/html/my.txt
10.电商上架新产品流程(先更新字典,在插入数据)
- 先把新上架的商品的关键词更新到词典里
- 查看ES日志,确认新词被动态更新了
- 自己编写一个测试索引,插入测试数据,然后查看搜索结果
- 确认没有问题之后,在让开发插入新商品的数据
- 测试

备份恢复

0.前提条件

必须要有Node环境和npm软件
nodejs
npm

1.nodejs环境安装(注意路径的存放)

cd /opt
weget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar xf node-v10.16.3-linux-x64.tar.xz
mv node-v12.13.0-linux-x64 node
echo "export PATH=/opt/node/bin:\$PATH" >> /etc/profile
source /etc/profile
[root@db-01 ~]# node -v
v10.16.3
[root@db-01 ~]# npm -v
6.9.0

2.指定使用国内淘宝npm源

npm install -g cnpm --registry=https://registry.npm.taobao.org

3.安装es-dump

cnpm install elasticdump -g

4.备份命令

备份成可读的json格式
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2.json \
--type=data 备份成压缩格式(恢复先解压gzip -d ,在恢复)
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=$|gzip > /data/news2.json.gz 备份分词器/mapping/数据一条龙服务(先恢复mapping表空间,在恢复数据)不同节点之间也可以备份恢复
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2_analyzer.json \
--type=analyzer
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2_mapping.json \
--type=mapping
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2.json \
--type=data

5.恢复命令

只恢复数据
elasticdump \
--input=/data/news2.json \
--output=http://10.0.0.51:9200/news2 恢复所有数据包含分词器/mapping一条龙
elasticdump \
--input=/data/news2_analyzer.json \
--output=http://10.0.0.51:9200/news2 \
--type=analyzer
elasticdump \
--input=/data/news2_mapping.json \
--output=http://10.0.0.51:9200/news2 \
--type=mapping
elasticdump \
--input=/data/news2.json \
--output=http://10.0.0.51:9200/news2
--type=data

批量备份

curl -s 127.0.0.1:9200/_cat/indices|awk '{print $3}'

6.备份恢复注意

恢复的时候需要先解压缩成json格式
恢复的时候,如果已经存在相同的数据,会被覆盖掉
如果新增加的数据,则不影响,继续保留

ES相关知识的更多相关文章

  1. es基础知识

    1.ES定义 •是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据 •使用Java开发并使用Lucene作为其核心来实现 ...

  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  3. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  4. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  5. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  6. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  7. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  8. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  9. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

随机推荐

  1. NOI4.6 1455:An Easy Problem

    描述 As we known, data stored in the computers is in binary form. The problem we discuss now is about ...

  2. C语言寒假大作战01

    问题 回答 这个作业属于哪个课程 2019软件四班C语言寒假作业大作战 这个作业要求在哪里 作业要求 我在这个课程的目标是 gitee 与 git基础命令学习与使用 这个作业在那个具体方面帮助我实现目 ...

  3. CentOS7下部署2套Python版本共存

    参考地址:https://www.cnblogs.com/xuaijun/p/7985245.html 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make in ...

  4. zabbix3.4搭建钉钉报警

    1.在钉钉群里添加一个自定义的机器 在设置说明中无需开启Outgoing机制 红色箭头指的信息很重要后面脚本会用到 2.脚本 #!/usr/bin/python # -*- coding: utf-8 ...

  5. Matlab 与 c++对txt 文档的读写格式

    学习g++能够读取什么格式的txt文件. 读基本指令: >sprintf(filename, "doc_%d.txt", d); >fileptr = fopen(fi ...

  6. DWZ框架-- Dialog点击保存后不能自动关闭

    案例 今天在用DWZ框架做添加功能时,发现在对话框保存成功后,后端返回正确的json格式,但对话框不能自动关闭窗口,而且保存后自动跳回主页,没有停留在当前用户列表页面,具体错误过程重现如下: 1.打开 ...

  7. ROS和Gazebo进行机器人仿真(二)

    一.在Gazebo中使用ROS控制器 在本节中,我们将讨论如何在Gazebo中让机器人的每个关节运动. 为了让关节动起来,我们需要分配一个ROS控制器,尤其是,我们需要为每个关节连上一个与transm ...

  8. 第四次作业:使用Packet Tracer理解RIP路由协议及ICMP协议

    0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 理解RIP路由表的建立与更新 感受RIP坏消息传得慢 2 实验内容 使用Packet Tracer,正确配置网络参数,使用命 ...

  9. Codeforces_462_B

    http://codeforces.com/problemset/problem/462/B 简单的贪心,排序即可看出来. #include<cstdio> #include<ios ...

  10. 从敏捷开发到微服务,maybe再到中台

    -- 先说下准备这个的背景: 本来是想让我分享下敏捷开发,可能是听我说为as**搭建并完善了敏捷开发体系的原因吧. 我一般分享一个东西,希望大家能真的理解,而不只是知道. 我不大相信有万能的东西,不希 ...