ElasticSearch那些事儿(一)

目录

一、简介

二、下载并运行ElasticSearch

三、在Windows上运行ElasticSearch

四、在docker上运行ElasticSearch


Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。它可以快速地储存、搜索和分析海量数据,维基百科、Stack Overflow、Github 都采用它:

  • Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议;
  • 卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,实时的给它的编辑们提供公众对于新文章的反馈;
  • Stack Overflow 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题与答案;
  • GitHub 使用 Elasticsearch 对1300亿行代码进行查询。

一、简介

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口,同时Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

  • Elastic能够解决的问题主要包括:
  • 数据库字段太多,查询太慢,索引没有办法再做优化;
  • 数据库一个count就拖死全表;
  • mysql的limit翻到几十几百万页后实在是太慢;
  • 数据库like实在太慢,每次like整个服务器cpu内存飙高,拖慢整个线上服务;
  • 想要对外/内提供db里的数据的全文检索服务;
  • 提供日志(程序运行)查询功能。

Elastic是基于java开发的语言,在ElasticSearch 6.5版本开始,支持了Java11的版本。在7.0开始,ElasticSaerch已经内置了java开发环境。

二、下载并运行ElasticSearch

可以从https://www.elastic.co/cn/downloads/上下载对应的ElasticSearch产品,包括:

  • Elasticsearch(分布式、RESTful 风格的搜索和分析)
  • Kibana(实现数据可视化)
  • Logstash(采集、转换、充实,然后输出)
  • 其他(APM、App Search等)

三、在Windows上运行ElasticSearch

1.在Windows环境部署ElasticSearch环境较为容易,下载对应的ElasticSearch压缩包,进行解压,对应的目录如下图所示:

2.进入bin环境运行ElasticSearch

3.ElasticSearch插件相关命令:

#查看ElasticSearch已安装的插件
bin\elasticsearch-plugin list
#ElasticSearch安装插件
bin\elasticsearch-plugin install <插件名称>
#移除ElasticSearch安装插件
bin\elasticsearch-plugin remove <插件名称>

4.创建多节点集群时,使用命令:

#创建一个所属集群为geektime,节点名称为node0,节点数据存储路径为data0_data的节点
.\bin\elasticsearch -E node.name=node0 -E cluster.name=geektime -E path.data=data0_data -d
#创建一个所属集群为geektime,节点名称为node1,节点数据存储路径为data1_data的节点
.\bin\elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=data1_data -d
#创建一个所属集群为geektime,节点名称为node2,节点数据存储路径为data2_data的节点
.\bin\elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=data2_data -d
#创建一个所属集群为geektime,节点名称为node3,节点数据存储路径为data3_data的节点
.\bin\elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=data3_data -d

验证集群是否启动

注:大家可以查看_cat下面包含哪些命令,你应该会发现新大陆哦!

现在,楼主在工作中经常接触到docker技术,接下来就看看怎么在docker上部署ElasticSearch集群吧!

四、在docker上运行ElasticSearch

1、ElasticSearch镜像的制作

楼主是在阿里云的服务器上自己搭建的docker工具,具体的搭建过程请参考    配置fabric(超级记账本)时docker安装教程,直接利用docker pull命令拉取docker镜像

注:如果想自己定制化镜像的话,那就得看看源码了,镜像制作的方式以后再写文章吧!

以单节点的形式部署是,命令如下:

docker run --name es-node0 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d  <镜像名称:tag>

以集群的方式启动时,创建docker-compose.yml:

version: '3'
services:
    es-node0:
        image: elasticsearch:7.6.2
        container_name: es-node0
        privileged: true
        environment:
            - cluster.name=elasticsearch-cluster
            - node.name=node0
            - node.master=true
            - node.data=true
              #- bootstrap.memory_lock=true
            - http.cors.enabled=true
            - http.cors.allow-origin=*
            - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
            - "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
            - "discovery.zen.minimum_master_nodes=2"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        volumes:
            - ./node0/data:/usr/share/elasticsearch/data
            - ./node0/logs:/usr/share/elasticsearch/logs
        ports:
            - 9200:9200
    es-node1:
        image: elasticsearch:7.6.2
        container_name: es-node1
        privileged: true
        environment:
            - cluster.name=elasticsearch-cluster
            - node.name=node1
            - node.master=true
            - node.data=true
            - bootstrap.memory_lock=true
            - http.cors.enabled=true
            - http.cors.allow-origin=*
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
            - "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
            - "discovery.zen.minimum_master_nodes=2"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        volumes:
            - ./node1/data:/usr/share/elasticsearch/data
            - ./node1/logs:/usr/share/elasticsearch/logs
        ports:
            - 9201:9200
    es-node2:
        image: elasticsearch:7.6.2
        container_name: es-node2
        privileged: true
        environment:
            - cluster.name=elasticsearch-cluster
            - node.name=node2
            - node.master=true
            - node.data=true
            - bootstrap.memory_lock=true
            - http.cors.enabled=true
            - http.cors.allow-origin=*
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
            - "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
            - "discovery.zen.minimum_master_nodes=2"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        volumes:
            - ./node2/data:/usr/share/elasticsearch/data
            - ./node2/logs:/usr/share/elasticsearch/logs
        ports:
            - 9202:9200

注:在挂载的时候记得给宿主机挂载目录更改权限哦,chmod -R 777 XXX

访问http://ip:9200/_cat/nodes?v即可查看集群状态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章