使用Docker安裝Elasticsearch

分享于 

9分钟阅读

Elasticsearch

  简体

Elasticsearch也可以作為Docker鏡像使用,鏡像使用centos 7作為基礎鏡像。

所有已發布的Docker鏡像列表在www.docker.elastic.co,源文件位於github

這些鏡像可以在 Elastic 許可下自由使用,它們包含開源和免費商業特性,以及付費的商業特性,有關 Elastic 許可級別的信息,請參見訂閱頁面。

提取鏡像

獲取適用於Docker的Elasticsearch就像對Elastic Docker註冊表發出docker pull命令一樣簡單。


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

或者,你可以下載其他Docker鏡像,其中僅包含Apache 2.0許可下可用的功能,要下載鏡像,請轉到www.docker.elastic.co

使用node集群啟動單個Docker

要啟動用於開發或測試的單個節點Elasticsearch集群,請指定單節點發現繞過Bootstrap檢查


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

使用Docker Compose啟動多節點集群

要啟動一個三節點Elasticsearch集群並在Docker中運行,你可以使用Docker Compose:

  • 創建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文件打開一個三節點Elasticsearch集群,node es01在和localhost:9200上偵聽通過網路與es02 talk。

請注意,此配置在所有網路介面上公開埠9200,並且給定Docker在上如何操作iptables,這意味著,如果不想公開埠9200,而是使用反向代理,則將9200:9200替換為docker-compose.yml文件中的127.0.0.1:9200:9200,然後,Elasticsearch只能從主機本身訪問。

Dockerdata01data02重新啟動數據,並且目錄,如果它們不存在,當你啟動集群時,docker-compose將創建它們。

確保Docker引擎分配至少4GiB個內存,在Docker Desktop中,在首選項(macOS )或設置(Windows )的高級選項卡上配置資源使用情況。

Docker Compose未與Docker在Linux上預安裝,有關安裝說明,請參見docs.docker.com:在Linux上安裝Compose

運行docker-compose來啟動集群:


docker-compose up

提交一個_cat/nodes請求,查看節點已經啟動並運行:


curl-X GET"localhost:9200/_cat/nodes?v&pretty"

日誌消息轉到控制台,由配置的Docker日誌記錄驅動程序處理,默認情況下,你可以使用docker logs訪問日誌。

要停止集群,請運行docker-compose down,Docker卷中的數據在使用docker-compose up重新啟動集群時被保留和載入,到刪除數據卷關閉集群時,請指定-v選項:docker-compose down -v

在生產中使用Docker鏡像

在生產中運行Elasticsearch在Docker時,有以下要求和建議。

vm.max_map_count設置為至少262144

vm.max_map_count內核設置必須設置為至少262144才能用於生產使用。

設置vm.max_map_count的方式取決於你的平台:

Linux

vm.max_map_count設置應在/etc/sysctl.conf中永久設置:


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

要對live系統應用設置,請運行:


sysctl-w vm.max_map_count=262144

macOS Mac的Docker

vm.max_map_count設置必須在xhyve虛擬機中設置:

在命令行,運行:


screen~/Library/Containers/com.docker.docker/Data/vms/0/tty

按enter並使用$sysctl來配置vm.max_map_count


sysctl-w vm.max_map_count=262144

  • 要退出screen會話,請鍵入Ctrl ad

Windows和macOS的用法Docker Desktop

vm.max_map_count設置必須通過docker機器設置:


docker-machine ssh
sudo sysctl-w vm.max_map_count=262144

配置文件必須可由elasticsearch用戶讀取編輯

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

一個例外是 Openshift,它使用任意分配的用戶ID運行容器,Openshift呈現持久卷,將gid設置為0,無需調整。

如果要綁定掛載本地目錄或文件,就必須由elasticsearch用戶讀取,此外,此用戶必須有對數據和日誌目錄,一個好的策略是為本地目錄授予對gid 0的組訪問許可權。

例如,為通過綁定掛載存儲數據準備本地目錄:


mkdir esdatadir
chmod g+rwx esdatadir
chgrp0 esdatadir

作為最後的手段,可以通過環境變數數據和日誌目錄強制容器改變用於的綁定掛載的所有權,執行此操作時,它們將由uid:gid 1000:0擁有,它提供對Elasticsearch的讀寫訪問。

為nofile和nproc增加ulimit

nofilenproc增加的ulimit必須為Elasticsearch容器提供,驗證初始化系統用於Docker守護進程將它設置為可接受的值。

要檢查ulimit的Docker守護進程默認值,請運行:


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

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


--ulimit nofile=65535:65535


相关文章