docker-部署Elasticsearch

亮博士發表於2020-10-04

前言

Elasticsearch是一款開源的搜尋引擎框架,提供強大的搜尋功能。下面簡單介紹如何使用docker來部署Elasticsearch。更多資訊請參考官方文件

拉取映象

獲取Docker的Elasticsearch就像對Elastic Docker registry發出Docker pull命令一樣簡單。

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.2

或者,您可以下載其他Docker映象,這些映象只包含Apache 2.0許可下可用的特性。下載映象,訪問www.docker.elastic.co

用Docker啟動單個節點叢集

要啟動一個用於開發或測試的單節點Elasticsearch叢集,請指定單節點發現以繞過引導檢查:

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

用Docker組成啟動多節點叢集

要在Docker中啟動並執行三個節點的Elasticsearch叢集,您可以使用Docker Compose:

  1. 建立一個docker-compose.yml檔案:
version: '3.7'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.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.9.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.9.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合成檔案將顯示一個三個節點的Elasticsearch叢集。節點es01監聽localhost:9200,es02es03通過Docker網路與es01通訊。

請注意,此配置在所有網路介面上公開了埠9200,並且考慮到Docker在Linux上操縱iptables的方式,這意味著您的Elasticsearch叢集是可以公開訪問的,可能會忽略任何防火牆設定。如果您不想公開埠9200,而是使用反向代理,那麼在docator-compose.yml檔案中將9200:9200替換為127.0.0.1:9200:9200。Elasticsearch將只能從主機本身訪問。

名為data01data02data03Docker命名卷儲存節點資料目錄,以便在重新啟動時資料保持不變。如果它們還不存在,那麼docker-compose將在啟動叢集時建立它們。

日誌訊息會到達控制檯,並由配置的Docker日誌驅動程式處理。預設情況下,您可以使用docker logs訪問日誌。

要停止叢集,請執行docker-compose down。當您使用Docker-compose up重啟叢集時,Docker卷中的資料將被保留並載入。要在關閉叢集時刪除資料卷,請指定-v選項:docker-compose down -v。

啟動啟用TLS的多節點叢集

請參閱Elasticsearch Docker容器中的加密通訊,並在啟用TLS的Docker中執行彈性堆疊

在生產中使用Docker映象

以下要求和建議適用於在生產中Docker中執行Elasticsearch。

設定vm.max_map_count至少為262144

對於生產使用,vm.max_map_count核心設定必須至少設定為262144(32k)。

配置檔案必須是elasticsearch使用者可讀的

預設情況下,Elasticsearch使用uid:gid 1000:0作為使用者elasticsearch在容器內執行。

增加nofile和nproc的ulimit

對於Elasticsearch容器,必須對nofile和nproc增加ulimit。驗證Docker守護程式的init系統將它們設定為可接受的值。

禁用交換

為了效能和節點穩定性,需要禁用交換。有關此操作方法的資訊,請參見禁用交換

配置Elasticsearch與Docker

在Docker中執行時,Elasticsearch配置檔案/usr/share/elasticsearch/config/載入。

載入Elasticsearch配置檔案

建立自定義配置檔案,並將它們繫結掛載到Docker映象中的相應檔案上。例如,繫結掛載custom_elasticsearch.ymldocker執行,指定:

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

掛載一個Elasticsearch金鑰庫

預設情況下,Elasticsearch將自動為安全設定生成一個金鑰儲存庫檔案。該檔案是模糊的,但沒有加密。如果希望使用密碼對安全設定進行加密,則必須使用elasticsearch-keystore實用程式建立一個受密碼保護的金鑰儲存,並將其繫結掛載到容器/usr/share/elasticsearch/config/elasticsearch.keystore。為了在Docker容器啟動時提供密碼,將Docker環境值KEYSTORE_PASSWORD設定為您的密碼值。例如,docker run命令可能有以下選項:

-v full_path_to/elasticsearch.keystore:/usr/share/elasticsearch/config/elasticsearch.keystore
-E KEYSTORE_PASSWORD=mypassword

相關文章