Elasticsearch

  • 2019-07-12
  • 475
  • 20
  • 1

elasticsearch概述

elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,它不仅仅可以进行全文搜索,还可以进行以下工作

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
  • 实时分析的分布式搜索引擎
  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

elasticsearch基本概念

elasticsearch是面向文档型数据库,一条数据在这里就是一个文档

  1. 索引(Index)索引是具有相似特性的文档集合,例如:可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识
  2. 文档:是一个存储索引中的JSON文档,每个文档都有一个类型和对应的ID,这是唯一的
  3. 字段:文档内的一个基本单位,键值对形式
  4. 类型:类型是index下的一个逻辑分类,比如weather这个index里,可以按照城市分组,也可以按照气候类型分组,这种分组叫做类型
  5. 映射:映射用于映射文档的每个field及其对应的数据类型,例如字符串,整数,浮点数,双精度数,日期等
  6. 分片:单台机器无法纯属大量数据,es可以将一个索引中的数据分片为多个shard,分布在多台服务器上存储,有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作 分布到多台服务器上去执行
  7. 分词:把一段文本中的词按一定的

elasticsearch选举

脑裂

因为网络或者其他故障,导致一个集群被划分成了两伙或者多方势力,这些群伙都有多个node以及master,那么原来的集群就出现了多个master,master主宰了集群状态的维护以及shard的分配,因此如果有多个master,可能会导致数据被破坏

容错机制

状态 意义
green 所有主分片和从分片都可用
yellow 所有主分片可用,但存在不可用的主节点
red 存在不可用的主分片

宕机瞬间

master node宕机的一瞬间,该节点的primary shard(主分片)就没有了,此时状态就不是active status,那么集群中就不是所有的主分片都是active status,那么集群中就不是所有的主分片都是active的了

容错步骤一

master选举,es自动选举一个node成为master,承担起master的责任

容错步骤二

新maser将丢失掉的主分片的某个复制分片提升为主分片,此时cluster status会变成yellow,因为所有的主分片都变成active status了,但少一个复制分片

容错步骤三

重启node,新master会将缺失的副本都copy一份到该节点,而且该节点会使用之前已有的分片数据,只是同步一下宕机的修改,cluster status变为green

elasticsearch安装部署

第一台 第二台 第三台
IP地址 192.168.1.11 192.168.1.22 192.168.1.33

三台服务器同样操作!!!

安装JAVA环境

  1. 首先需要下载JDK安装包,并解压到当前目录下
[root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java
  1. 设置环境变量
[root@localhost ~]# vim /etc/profile

在末尾添加

JAVA_HOME=/usr/local/java
JRE_HOME=/usr/local/java/jre
CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
PATH=$PATH:JAVA_HOME/bin:JRE_HOME/bin

使环境变量生效

[root@localhost ~]# source /etc/profile

添加软连接

[root@localhost ~]# rm -f /usr/bin/java
[root@localhost ~]# ln -s /usr/local/jdk1.8.0_171/bin/java /usr/bin/

检测java版本

[root@localhost ~]# java -version

创建用户和组

[root@localhost ~]# groupadd es
[root@localhost ~]# useradd es -g es
[root@localhost ~]# mkdir -p /es/{data,logs}
[root@localhost ~]# chown -R es:es /es/

修改系统描述符(软限制、硬限制)

[root@localhost ~]# echo "* soft nofile 819200" >> /etc/security/limits.conf 
[root@localhost ~]# echo "* hard nofile 819200" >> /etc/security/limits.conf

修改最大打开的文件数(软限制、硬限制)

[root@localhost ~]# echo "* soft nproc 2048" >> /etc/security/limits.conf 
[root@localhost ~]# echo "* hard nproc 4096" >> /etc/security/limits.conf

修改最大锁定内存地址空间(软限制、硬限制)

[root@localhost ~]# echo "* soft memlock unlimited" >> /etc/security/limits.conf
[root@localhost ~]# echo "* hard memlock unlimited" >> /etc/security/limits.conf

jvm能开启的最大线程数

[root@localhost ~]# echo "vm.max_map_count=655360" >> /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
vm.max_map_count = 655360

修改hosts文件

[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11 es1
192.168.1.22 es2
192.168.1.33 es3

安装elasticsearch

[root@localhost ~]# tar -zxf elasticsearch-6.3.2.tar.gz 
[root@localhost ~]# mv elasticsearch-6.3.2 /usr/local/es
[root@localhost ~]# chown -R es:es /usr/local/es/

修改es配置文件

[root@localhost ~]# vim /usr/local/es/config/elasticsearch.yml

[root@localhost ~]# scp /usr/local/es/config/elasticsearch.yml es2:/usr/local/es/config/elasticsearch.yml
[root@localhost ~]# scp /usr/local/es/config/elasticsearch.yml es3:/usr/local/es/config/elasticsearch.yml

切换到es2、es3里面只用修改配置文件里面的节点名称和节点IP为自己的

重启服务器

[root@localhost ~]# reboot

切换到es用户,然后启动es服务

[root@localhost ~]# su es
[es@localhost root]$ /usr/local/es/bin/elasticsearch

检查es集群状态(等待变绿… :huaji:

[root@es1 ~]# curl -XGET http://192.168.1.11:9200/_cluster/health?pretty
{
"cluster_name" : "shuai",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}

安装分词器插件

分词插件在一台安装即可!

[root@es1 ~]# mkdir /usr/local/es/plugins/ik
[root@es1 ~]# unzip elasticsearch-analysis-ik-6.3.2.zip -d /usr/local/es/plugins/ik/

重启es

[root@localhost ~]# su es 
[es@localhost root]$ /usr/local/es/bin/elasticsearch

检查es集群状态

[root@es1 ~]# curl -XGET http://192.168.1.11:9200/_cluster/health?pretty
{
"cluster_name" : "shuai",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
# 查询主节点
[root@es1 ~]# curl -XGET http://192.168.1.11:9200/_cat/master
XkhzL00VSLyEPMO6kuzdmQ 192.168.1.11 192.168.1.11 es1
# 查询所有节点
[root@es1 ~]# curl -XGET http://192.168.1.11:9200/_cat/nodes
192.168.1.22 33 61 0 0.01 0.07 0.08 mdi - es2
192.168.1.11 34 64 0 0.07 0.09 0.08 mdi * es1
192.168.1.33 33 60 0 0.00 0.09 0.10 mdi - es3

创建索引

[root@es1 ~]# curl -XPUT http://192.168.1.11:9200/shuaiguoer
{"acknowledged":true,"shards_acknowledged":true,"index":"shuaiguoer"}

插入数据

[root@es1 ~]# curl -XPUT http://192.168.1.11:9200/shuaiguoer/fulltext/1?pretty -H 'Content-Type: application/json' -d '{ "name" : "shuai" }'

{
"_index" : "shuaiguoer",
"_type" : "fulltext",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}

安装node

[root@es1 ~]# tar -zxvf node-v10.6.0-linux-x64.tar.gz
[root@es1 ~]# mv node-v10.6.0-linux-x64 /usr/local/node
[root@es1 ~]# vim /etc/profile
# 在最后添加加
NODE_HOME=/usr/local/node
PATH=$PATH:$NODE_HOME/bin
[root@es1 ~]# source /etc/profile
[root@es1 ~]# node -v

安装head

[root@es1 ~]# unzip elasticsearch-head-master.zip 
[root@es1 ~]# mv elasticsearch-head-master /usr/local/head

[root@es1 ~]# cd /usr/local/head/
[root@es1 head]# npm install -g grunt --registry=https://registry.npm.taobao.org
[root@es1 head]# npm install -g cnpm --registry=https://registry.npm.taobao.org
[root@es1 head]# cnpm install

修改head配置文件

[root@es1 head]# vim Gruntfile.js

修改es配置文件

[root@es3 head]# vim /usr/local/es/config/elasticsearch.yml

[root@es1 head]# grunt server

评论

  • 墨蓝回复
    Firefox 68 Firefox 68 Windows 10 Windows 10

    博主我想知道那个不要点我怎么弄? :weiqu:

  • 墨兰回复
    Google Chrome 62 Google Chrome 62 Android 8.1.0 Android 8.1.0

    不要点我是在里面跳js引用代码吗? :yiwen:

    • shuai
      shuai回复
      QQbrowser QQbrowser Android 9 Android 9

      对的 :tushe:
      一段js、css外部引用,一段css内部调用

  • 墨兰回复
    Google Chrome 62 Google Chrome 62 Android 8.1.0 Android 8.1.0

    不要点我
    还是不知道怎么用 :jiku:

  • 墨兰回复
    Google Chrome 62 Google Chrome 62 Android 8.1.0 Android 8.1.0

    不要点我
    上一条邮箱写错了
    我就是不知道
    不要点我这个怎么用
    Class=里要填写什么啊还有后面的oncick=

    • shuai
      shuai回复
      QQbrowser 10 QQbrowser 10 Windows 10 Windows 10

      class=”jitter” onclick=”hig()

  • 墨兰回复
    Google Chrome 62 Google Chrome 62 Android 8.1.0 Android 8.1.0

    我可能废了吧教程都写了我还不会 :daku:

    • shuai
      shuai回复
      QQbrowser 10 QQbrowser 10 Windows 10 Windows 10

      只需要加入 high.jsjitter.css,然后在 high.js 中引入 high.css你喜欢的音乐.mp4,再然后就是把带有 不要点我 的这段代码,放在你网站想要显示的地方就可以了! :hu:

      • 墨兰回复
        MIUI Browser 9 MIUI Browser 9 Android 8.1.0 Android 8.1.0

        是要先把js和css引用代码方在网站上
        然后不要点我那个直接复制随便放在哪里的意思吗

        • shuai
          shuai回复
          QQbrowser 10 QQbrowser 10 Windows 10 Windows 10

          对的,对的。就是这个意思

  • 墨兰回复
    MIUI Browser 9 MIUI Browser 9 Android 8.1.0 Android 8.1.0

    啊嘞我发的怎么不动

    • shuai
      shuai回复
      QQbrowser 10 QQbrowser 10 Windows 10 Windows 10

      因为你根本没有引用,你所导入的js和css呀

  • 墨兰回复
    MIUI Browser 9 MIUI Browser 9 Android 8.1.0 Android 8.1.0

    你qq多少

  • 墨兰回复
    MIUI Browser 9 MIUI Browser 9 Android 8.1.0 Android 8.1.0

    加了 :hehe:

    • shuai
      shuai回复
      QQbrowser 10 QQbrowser 10 Windows 10 Windows 10

      成功了吗? :yi:

发表评论

:zhenbang: :yiwen: :yinyue: :yinxian: :yi: :xxyl: :xinsui: :xiaonian: :weiqu: :tushe: :tu: :taiyang: :taikaixin: :shuijiao: :shenli: :shengqi: :ruo: :qianbi: :qian: :pen: :neng: :mianqiang: :meigui: :lu: :liwu: :kuanghan: :ku: :kaixin: :jinya: :jiku: :huaxin: :huaji: :hu: :heixian: :hehe: :han: :haha: :haha2: :guai: :dangao: :damuzhi: :daku: :chabei: :caihong: :bugaoxing: :bishi: :aixin: :a: :OK: :) :(