本篇文章首發於頭條號 "單機如何搭建Elasticsearch集群?使用容器技術快速構建集群環境" ,歡迎關註 "頭條號" 和微信公眾號“大數據技術和人工智慧”(微信搜索bigdata_ai_tech)獲取更多乾貨,也歡迎關註 "CSDN博客" 。 在之前的文章里分別介紹過 "Elasticsear ...
本篇文章首發於頭條號單機如何搭建Elasticsearch集群?使用容器技術快速構建集群環境,歡迎關註頭條號和微信公眾號“大數據技術和人工智慧”(微信搜索bigdata_ai_tech)獲取更多乾貨,也歡迎關註CSDN博客。
在之前的文章里分別介紹過Elasticsearch本地環境安裝和常用操作和Elasticsearch源碼構建來搭建一個Standalone(單機集群)模式的Elasticsearch環境,那麼這種方式的環境能否在實際生產環境中使用呢?很顯然是可以的,但是強烈不推薦。隨著大數據的不斷發展成熟和大數據應用的落地實施,傳統的技術架構的缺陷越來越明顯,分散式、集群、微服務、雲計算等技術架構越來越流行,這篇文章就來介紹一下如何使用Docker來搭建一個Elasticsearch的集群環境。
為什麼是Docker?
Docker是一個高速創新的企業級容器平臺,優點很多,比如:
- 可以在任何地方安全地構建、共用和運行任何應用程式
- 節省資源、降低成本
- 部署非常靈活方便
讓我們開始吧
這個例子會使用Docker來搭建一個主節點兩個數據節點的Elasticsearch集群,首先要已經安裝好docker,可以使用docker --version
命令來看確認一下。
1、下麵是目錄結構,接下來會基於這個目錄結構來操作
.
├── docker-compose.yml
├── config
│ ├── es01
│ │ └── elasticsearch.yml
│ ├── es02
│ │ └── elasticsearch.yml
│ └── es03
│ └── elasticsearch.yml
├── data
│ ├── es01
│ ├── es02
│ └── es03
└── logs
├── es01
├── es02
└── es03
2、編寫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的鏡像,下麵簡單說下如何製作鏡像。
- 新建一個目錄併進入這個目錄
- 新建Dockerfile文件,文件內容為
FROM docker.elastic.co/elasticsearch/elasticsearch:6.2.0
,保存 - 打開終端進入當前目錄執行
docker build .
3、分別編寫每個節點的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
配置即可。
4、執行命令docker-compose up
部署集群,可以在命令後面加上-d
參數使後臺執行。
5、驗證
瀏覽器打開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集群。