本篇文章首發於頭條號單機如何搭建Elasticsearch集羣?使用容器技術快速構建集羣環境,歡迎關注頭條號和微信公衆號「大數據技術和人工智能」(微信搜索bigdata_ai_tech)獲取更多幹貨,也歡迎關注CSDN博客。node
在以前的文章裏分別介紹過Elasticsearch本地環境安裝和經常使用操做和Elasticsearch源碼構建來搭建一個Standalone(單機集羣)模式的Elasticsearch環境,那麼這種方式的環境可否在實際生產環境中使用呢?很顯然是能夠的,可是強烈不推薦。隨着大數據的不斷髮展成熟和大數據應用的落地實施,傳統的技術架構的缺陷愈來愈明顯,分佈式、集羣、微服務、雲計算等技術架構愈來愈流行,這篇文章就來介紹一下如何使用Docker來搭建一個Elasticsearch的集羣環境。docker
Docker是一個高速創新的企業級容器平臺,優勢不少,好比:shell
這個例子會使用Docker來搭建一個主節點兩個數據節點的Elasticsearch集羣,首先要已經安裝好docker,可使用docker --version
命令來看確認一下。json
一、下面是目錄結構,接下來會基於這個目錄結構來操做bootstrap
. ├── docker-compose.yml ├── config │ ├── es01 │ │ └── elasticsearch.yml │ ├── es02 │ │ └── elasticsearch.yml │ └── es03 │ └── elasticsearch.yml ├── data │ ├── es01 │ ├── es02 │ └── es03 └── logs ├── es01 ├── es02 └── es03
二、編寫docker-compose.yml文件瀏覽器
version: '2' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0 container_name: es01 restart: always environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./data/es01:/usr/share/elasticsearch/data - ./config/es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./logs/es01:/usr/share/elasticsearch/logs ports: - 9200:9200 - 9300:9300 networks: - esnet es02: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0 container_name: es02 restart: always environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./data/es02:/usr/share/elasticsearch/data - ./config/es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./logs/es02:/usr/share/elasticsearch/logs depends_on: - es01 networks: - esnet es03: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0 container_name: es03 restart: always environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./data/es03:/usr/share/elasticsearch/data - ./config/es03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./logs/es03:/usr/share/elasticsearch/logs depends_on: - es01 networks: - esnet networks: esnet:
Elasticsearch集羣啓動的時候,須要主節點啓動成功後,其餘節點才能啓動並join到集羣裏,所以在配置文件裏要保證這一點,官網Control startup and shutdown order in Compose這篇文章介紹瞭如何控制啓動和關閉順序的問題,我這裏是經過配置restart: always
和depends_on
來控制順序的,這個辦法比較簡單。
另外,我這裏使用的是6.2.0版本的elasticsearch,官方目前只提供了6.8.1和7.2.0版本的docker鏡像,因此須要先本身作個6.2.0的鏡像,下面簡單說下如何製做鏡像。安全
FROM docker.elastic.co/elasticsearch/elasticsearch:6.2.0
,保存docker build .
三、分別編寫每一個節點的elasticsearch.yml配置微信
cluster.name: es-cluster node.name: es01 node.master: true node.data: false path.data: /usr/share/elasticsearch/data path.logs: /usr/share/elasticsearch/logs bootstrap.memory_lock: true network.host: 0.0.0.0 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: ["es01", "es02", "es03"] # discovery.seed_hosts: ["es02", "es03"] # cluster.initial_master_nodes: ["es01", "es02", "es03"] http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false xpack.security.transport.ssl.enabled: false
每一個節點的配置基本同樣,這裏只寫一個節點的配置,其餘節點主要改下node.name
、node.master
、node.data
配置便可。架構
四、執行命令docker-compose up
部署集羣,能夠在命令後面加上-d
參數使後臺執行。cors
五、驗證
瀏覽器打開http://127.0.0.1:9200
,輸出以下則表示成功了。
{ "name" : "es01", "cluster_name" : "es-cluster", "cluster_uuid" : "-zUZlE_lTJ2LX7JMq4R40g", "version" : { "number" : "6.2.0", "build_hash" : "37cdac1", "build_date" : "2018-02-01T17:31:12.527918Z", "build_snapshot" : false, "lucene_version" : "7.2.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
接下來再使用Elasticsearch提供的API來檢查一下集羣和節點的健康情況。
使用/_cluster/health
或/_cat/health?v
查看集羣健康情況,結果分別以下圖:
使用/_cat/nodes?v
查看節點,結果以下圖:
至此,就已經完成了使用Docker搭建的Elasticsearch集羣。