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即可查看集羣狀態

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