使用Docker搭建Elasticsearch集羣環境

本篇文章首發於頭條號單機如何搭建Elasticsearch集羣?使用容器技術快速構建集羣環境,歡迎關注頭條號和微信公衆號「大數據技術和人工智能」(微信搜索bigdata_ai_tech)獲取更多幹貨,也歡迎關注CSDN博客node

在以前的文章裏分別介紹過Elasticsearch本地環境安裝和經常使用操做Elasticsearch源碼構建來搭建一個Standalone(單機集羣)模式的Elasticsearch環境,那麼這種方式的環境可否在實際生產環境中使用呢?很顯然是能夠的,可是強烈不推薦。隨着大數據的不斷髮展成熟和大數據應用的落地實施,傳統的技術架構的缺陷愈來愈明顯,分佈式、集羣、微服務、雲計算等技術架構愈來愈流行,這篇文章就來介紹一下如何使用Docker來搭建一個Elasticsearch的集羣環境。docker

爲何是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: alwaysdepends_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 .

三、分別編寫每一個節點的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.namenode.masternode.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集羣。

相關文章
相關標籤/搜索