ES(Elasticsearch)入門學習教程

1.1 爲什麼要學Elasticsearch?

爲什麼要學Elasticsearch(ES)?

我想這是一個存留於很多初學者內心比較困惑的問題。

但是在回答之前,我們還需要先大致瞭解下它是啥。

畢竟如果一個技術你都不瞭解它是啥,何談爲什麼要學它?

那麼, 什麼是ES呢?

Elasticsearch 簡稱ES, 經常與Logstash 和Kibana 一起使用,江湖人稱ELK.

  • 這E 自然指的就是Elasticsearch,簡稱ES, 具有分佈式存儲,搜索和分析的功能。
  • L 指的就是Logstash,分佈式日誌收集框架
  • K 指的就是Kibana,可視化分析框架。

接下來我們聊聊爲什麼我們要學傳說中的ES。

這個問題的本質其實是ES 可以做啥?回答清楚這個問題,問題的答案自然就有了。

我翻開了官方文檔,在網絡中流浪,終於尋找到了答案

其中分享一些經典的使用案例如下:

  • 使用案例一:
    ELK 結合使用,用於微服務架構下不同機器上微服務的日誌聚合,日誌分析。
  • 使用案例二:
    當我們打開淘寶,京東,等電商網站的時候,嘗試輸入一些關鍵詞,然後系統就會給我們提供一些搜索建議。
    這種場景其實也是ES 使用的一個經典案例。
  • 使用案例三:
    Github使用Elasticsearch檢索1300億行的代碼
  • 使用案例四:
    維基百科使用Elasticsearch提供全文搜索並高亮關鍵字,以及輸入實時搜索(search-as-you-type)和搜索糾錯(did-you-mean)等搜索建議功能。
  • 使用案例五:
    StackOverflow結合全文搜索與地理位置查詢,以及more-like-this功能來找到相關的問題和答案

1.2 如何下載安裝使用ES?

1.2.1 ES 安裝使用條件

ES 的安裝需要JDK 8+

1.2.2 ES 下載須知

如果是企業需要注意的是ES 的下載安裝包默認包含一個基礎的免費許可證,它包含開源和免費的部分商業功能

如果想30天試用一些完整的付費商業功能,可以去這裏申請,傳送門

關於免費和付費版本的區別見:
在這裏插入圖片描述

點擊瞭解更多

1.2.3 ES 官方下載

舊版本下載地址 https://www.elastic.co/cn/downloads/past-releases

1.2.3.1 Windows 系統下載安裝

Windows 系統可以直接點擊下圖中WINDOWS 超鏈接 即可下載安裝包。
在這裏插入圖片描述

1.2.3.1 Mac OSX 系統下載安裝

Mac OSX 自帶了HomeBrew ,因此可以通過包管理器方式進行下載安裝。

  • 首先輸入命令:
brew tap elastic/tap
  • 然後輸入命令:
brew install elastic/tap/elasticsearch-full
  • 當然Mac OSX 系統也可以通過輸入如下命令進行下載安裝
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-darwin-x86_64.tar.gz

解壓命令如下:

tar -xzf elasticsearch-7.6.2-linux-x86_64.tar.gz

1.2.3.2 Docker方式下載安裝

除了上面列舉的方法之外,使用Docker 下載安裝是一個更棒的選擇。

  • 首先需要安裝好Docker,如果沒有安裝可以查看Docker 入門學習教程
  • 然後輸入如下命令從遠程Docker倉庫下載ES
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2

執行成功如下圖所示:
在這裏插入圖片描述

1.2.4 使用Docker 啓動ES單節點實例

上面通過Docker 安裝好ES之後我們可以通過輸入如下命令啓動一個單節點的ES實例:

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

運行成功如下所示:
在這裏插入圖片描述

  • 輸入如下命令調用接口測試
curl -X GET "localhost:9200/_cat/nodes?v&pretty"

執行成功後輸出內容如下:
在這裏插入圖片描述

Mac OSX 自帶了curl命令,Windows用戶如果也想用可以點擊下載並配置環境變量

1.2.5 使用Docker啓動ES多節點實例

  • 爲了方便文件管理,我們首先在/Users/zhaoqingfeng/documents/app目錄下創建一個叫做es 的文件夾
    Mac OSX 可以通過輸入mkdir es 命令進行創建,Windows 可以圖形用戶界面創建即可。
  • 創建一個docker-compose.yml 配置文件內容如下:
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge
  • 輸入如下命令啓動集羣
docker-compose up

這裏科普下docker-compose 的用法

  • 格式爲docker-compose up [options] [SERVICE...]
  • 該命令可以自動完成包括構建鏡像,(重新)創建服務,啓動服務,並關聯服務相關容器的一系列操作
    • docker-compose up 啓動的容器都在前臺,方便調試和查看
    • 如果想後臺啓動它,可以通過輸入如下命令 bash docker-compose up -d
  • 執行一個Restful API 請求測
curl -X GET "localhost:9200/_cat/nodes?v&pretty"
  • 執行成功如下
    在這裏插入圖片描述

1.2.6 ES 在生產環境配置

1.2.6.1 vm.max_map_count 必須至少設置262144

  • Linux 服務器

首先需要編輯這個/etc/sysctl.conf文件

grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144

vm.max_map_count至少要設置26214

然後如果想要配置立即生效,需要輸入如下命令

sysctl -w vm.max_map_count=262144

1.2.6.2 elasticsearch 用戶必須擁有讀取配置文件權限

默認情況下,Elasticsearch使用uid:gid 1000:0作爲elasticsearch用戶在容器內運行。

如果您要綁定安裝本地目錄或文件,則elasticsearch用戶必須可以讀取它。 此外,該用戶必須對數據和日誌目錄具有寫權限。 一個好的策略是授予組對本地目錄的gid 0的訪問權限。

例如,要準備一個本地目錄以通過綁定安裝存儲數據:

mkdir esdatadir
chmod g+rwx esdatadir
chgrp 0 esdatadir

作爲最後的選擇,您可以通過環境變量TAKE_FILE_OWNERSHIP強制容器更改用於數據和日誌目錄的任何綁定安裝的所有權。 執行此操作時,它們將由uid:gid 1000:0擁有,它提供對Elasticsearch進程的必需讀/寫訪問權限。

1.2.6.3 增加nofile和nprocedit的ulimit

nofile和nproc的增加的ulimit必須對Elasticsearch容器可用。

驗證Docker守護程序的初始化系統是否將它們設置爲可接受的值。

要檢查Docker守護程序默認值是否爲ulimits,請運行:

docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'

如果需要,請在守護程序中調整它們,或對每個容器覆蓋它們。 例如,當使用docker run時,設置:

--ulimit nofile=65535:65535

1.2.6.4 禁用交換

爲了性能和節點穩定性,需要禁用交換。 有關執行此操作的方法的信息,請參閱禁用交換。

如果您選擇bootstrap.memory_lock:true方法,則還需要在Docker Daemon中定義memlock:true ulimit,或爲示例組成文件中所示的容器顯式設置。 使用docker run時,您可以指定:

-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1

1.2.6.5 隨機發布已發佈的端口

該映像公開了TCP端口9200和9300。對於生產集羣,建議使用–publish-all將發佈的端口隨機化,除非您要爲每個主機固定一個容器。

1.2.6.6 設置堆大小

使用ES_JAVA_OPTS環境變量來設置堆大小。

例如,要使用16GB,請在運行docker run時指定-e ES_JAVA_OPTS="-Xms16g -Xmx16g。 請注意,儘管默認配置文件jvm.options設置了1GB的默認堆,但是您在ES_JAVA_OPTS中設置的任何值都將覆蓋它。

即使要限制對容器的內存訪問,也必須配置堆大小。

雖然建議通過環境變量設置堆大小,但也可以通過將自己的jvm.options文件綁定安裝在/usr/share/elasticsearch/config/下來進行配置。

Elasticsearch提供的文件包含一些重要的設置,因此您應該首先從Elasticsearch容器中獲取jvm.options的副本,然後根據需要對其進行編輯。

1.2.6.7 將部署固定到特定的映像版本

將您的部署固定到Elasticsearch Docker映像的特定版本。

例如docker.elastic.co/elasticsearch/elasticsearch:7.6.2

1.2.6.8 始終綁定數據卷

出於以下原因,您應該使用/ usr / share / elasticsearch / data上綁定的卷:

如果容器被殺死,您的Elasticsearch節點的數據將不會丟失
Elasticsearch對I / O敏感,而Docker存儲驅動程序對於快速I / O而言並不理想
它允許使用高級Docker卷插件

1.2.6.9 避免使用loop-lvm模式

如果使用devicemapper存儲驅動程序,請不要使用默認的loop-lvm模式。 將docker-engine配置爲使用direct-lvm。

1.2.6.10 集中您的日誌

考慮使用其他日誌記錄驅動程序集中化日誌。 還要注意,默認的json文件日誌記錄驅動程序不適合用於生產環境。

1.2.7 在Docker中配置ES

在Docker中運行時,Elasticsearch配置文件從/usr/share/elasticsearch/config/加載。

要使用自定義配置文件,請將文件綁定安裝在映像中的配置文件上。

您可以使用Docker環境變量來設置各個Elasticsearch配置參數。 樣本撰寫文件和單節點示例都使用此方法。

要使用文件的內容設置環境變量,請在環境變量名後加上_FILE。 這對於將密碼之類的機密傳遞給Elasticsearch而無需直接指定它們很有用。

例如,要從文件設置Elasticsearch引導程序密碼,您可以綁定安裝文件並將ELASTIC_PASSWORD_FILE環境變量設置爲安裝位置。 如果將密碼文件安裝到/run/secrets/password.txt,請指定

-e ELASTIC_PASSWORD_FILE=/run/secrets/bootstrapPassword.txt

您還可以覆蓋圖像的默認命令,以將Elasticsearch配置參數作爲命令行選項傳遞。 例如:

docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername

雖然綁定安裝配置文件通常是生產中的首選方法,但您也可以創建一個包含配置的自定義Docker映像。

1.2.7.1 掛載Elasticsearch配置文件

創建自定義配置文件,並將其綁定安裝在Docker映像中的相應文件上。 例如,要將docker run綁定到custom_elasticsearch.yml,請指定:

-v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

容器使用uid:gid 1000:0作爲elasticsearch用戶運行Elasticsearch。 該用戶必須可以訪問綁定的已掛載主機目錄和文件,並且該用戶必須可以寫數據和日誌目錄。

1.2.7.2 使用自定義Docker鏡像

在某些環境中,準備包含您的配置的自定義映像可能更有意義。

一個用於實現此目的的Dockerfile可能很簡單:

FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2
COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/

然後,您可以使用以下命令構建映像:

docker build --tag=elasticsearch-custom .

運行鏡像

docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom

一些插件需要其他安全權限。 您必須通過以下方式明確接受它們:

  • 運行Docker映像時附加tty,並在出現提示時允許權限。
  • 通過在插件安裝命令中添加--batch標誌,檢查安全權限並接受(如果適用)。

0x02 參考鏈接


本篇完~

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