ES系列教程01:Elasticsearch學習環境搭建

poype發表於2022-01-05

> 本文最早釋出於公眾號極客軍營原文地址

Elasticsearch是一款非常強大的開源搜尋引擎,可以幫助我們快速地從海量資料中搜尋到想要獲取的資訊。例如當你在網上商城購物時,ElasticSearch可以幫助你快速獲取想要查詢的商品;當你在GitHub上搜尋時,ElasticSearch不僅能夠幫助你找到對應的程式碼倉庫,還能支援程式碼級搜尋並高亮顯示對應的程式碼片段。

ElasticSearch還是一個大資料分析平臺,具有非常強的資料分析能力。相比於Hadoop的“T+1”時效性,ElasticSearch的效能更高,可以近實時的獲取資料分析結果。

工欲善其事,必先利其器。

在真正學習ElasticSearch之前,讓我們先來準備好學習實驗環境。

安裝ElasticSearch和Kibana

ElasticSearch是一款天生支援分散式的搜尋引擎,可以只部署一個ElasticSearch節點,也可以輕鬆部署由多個節點組成的叢集,節點數量對應用開發是透明的。

除了安裝ElasticSearch外,我們還會安裝Kibana。Kibana是一個管理和操作ElasticSearch的平臺,具有很多強大的功能,通過它可以方便我們對ElasticSearch進行操作。

可以在如下地址下載到最新版本的ElasticSearch和Kibana;截至2021年12月7日,ElasticSearch的最新版本是7.15.2。

https://www.elastic.co/cn/downloads/

筆者的桌面PC執行的是Ubuntu Linux作業系統,下載好的ElasticSearch和Kibana壓縮包及解壓後的資料夾如下圖所示:

image.png

首先進入到ElasticSearch資料夾,執行如下命令,啟動ElasticSearch(如果你希望在後臺以Daemon方式啟動,可以增加-d引數):

./bin/elasticsearch

可以通過下面的curl命令判斷ElasticSearch是否啟動成功:

curl http://localhost:9200

如果收到類似下面的Response,就證明ElasticSearch已經成功安裝並啟動了:

{
  "name" : "poype",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "QqnV6yVtQte10Dw3IN6eEQ",
  "version" : {
    "number" : "7.15.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "93d5a7f6192e8a1a12e154a2b81bf6fa7309da0c",
    "build_date" : "2021-11-04T14:04:42.515624022Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

下面我們來啟動Kibana,同樣進入到Kibana對應的目錄下,執行如下命令;

./bin/kibana

待程式啟動後在瀏覽器中輸入:

http://localhost:5601

如果能看到類似下圖的歡迎頁面就證明Kibana啟動成功。Kibana啟動後會自動關聯到剛剛啟動好的Elasticsearch。
image.png

在Docker中執行ElasticSearch

相比於在作業系統上直接安裝ElasticSearch和Kibana,我更推薦大家利用Docker搭建學習環境。

作業系統的某些環境因素可能會導致ElasticSearch無法啟動。例如,如果你本機安裝的Java版本不符合ElasticSearch的要求,會導致啟動失敗,必須重置JAVA_HOME環境變數才能使ElasticSearch啟動成功。而利用Docker可以模擬一個乾淨的Linux沙箱環境,可以有效避免環境因素對ElasticSearch的干擾。

此外,利用docker-compose可以一次部署多個容器,這樣就可以一鍵部署包含多個節點的ElasticSearch叢集,省去了很多繁瑣的操作,使每次的部署更加方便。

筆者已經準備好了下面的docker-compose.yml檔案,定義了一個由三個ElasticSearch節點組成的叢集和一個Kibana節點,大家可直接使用。

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.15.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.15.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.15.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
  kibana:
    image: docker.elastic.co/kibana/kibana:7.15.2
    container_name: kibana
    environment:
      ELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200"]'
      SERVER_NAME: kibana.example.org
    ports:
      - "5601:5601"
    networks:
      - elastic

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

networks:
  elastic:
    driver: bridge

將這段yaml配置拷貝到名字為docker-compose.yml的檔案中,並在與該檔案相同的路徑下執行docker-compose up命令便能一鍵啟動一個完美的ElasticSearch叢集。
image.png

下面的命令可以檢視一個叢集的狀態資訊:

curl http://localhost:9200/_cluster/health?pretty

如果收到類似下面的Response,就證明ElasticSearch叢集已經啟動成功了:

{
  "cluster_name" : "es-docker-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 7,
  "active_shards" : 14,
  "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
}

通過number_of_nodes引數可以確定我們已經成功搭建了一個由3個節點組成的ElasticSearch叢集。

小結

至此,我們已經擁有了一個可以用於學習和實驗的ElasticSearch環境。在下一小節,我將用一個“線上書店”的例子帶領大家快速瀏覽ElasticSearch的各個特性,讓大家感受一下ElasticSearch相比於傳統資料庫的獨特之處,並掌握如何通過Kibana操控ElasticSearch。

喜歡本文的朋友,歡迎關注公眾號極客軍營,收看更多精彩內容

相關文章