使用Docker搭建Elasticsearch集群環境

来源:https://www.cnblogs.com/cjblogs/archive/2019/07/12/11175508.html
-Advertisement-
Play Games

本篇文章首發於頭條號 "單機如何搭建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: 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 .

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.namenode.masternode.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集群。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.數據增刪改 2.單表查詢 3.正則表達式 4.多表查詢 ​ 笛卡爾積 ​ 內連接 ​ 外鏈接 ​ 子查詢 一.數據的增刪改 為什麼不說查 因為查詢語句 有很多細節 所以先從簡單的說起 添加數據: 1.insert into table_name[column,[column2.....]] va ...
  • 一、在mysql主上的配置1.修改mysql的配置文件在[mysqld]組下麵添加如下內容 server-id=1 #給mysql服務設置一個編號,必須是唯一的log-bin=mysql-bin #開啟二進位日誌 重啟mysql服務 service mysqld restart關閉防火牆servic ...
  • 熟悉MySQL的人,都知道InnoDB存儲引擎,如大家所知,Redo Log是innodb的核心事務日誌之一,innodb寫入Redo Log後就會提交事務,而非寫入到Datafile。之後innodb再非同步地將新事務的數據非同步地寫入Datafile,真正存儲起來。 那麼innodb引擎有了redo ...
  • 錯誤一:ADF_FACES-60097:For more information, please see the server's error log for an entry beginning with: ADF_FACES-60096:Server Exception during PPR, ...
  • 1.在已經安裝好系統的linux伺服器上關閉selinux和iptables 2.在所有linux伺服器上配置ntp服務並設置ntp時間同步 3.在所有linux伺服器上安裝好cm和cdh版本所需要對應的java版本 (1).下載java包到/usr/local目錄解壓 (2).添加java環境到/... ...
  • 備份 使用維護計劃嚮導創建備份 1. 啟動維護計劃嚮導 2. 填入計劃名稱,選擇每項任務單獨計劃 3. 選擇完整備份和清除任務 4. 配置完整備份任務,選擇備份資料庫 5. 設置備份文件保存位置, 6. 指定壓縮備份,設置執行計劃時間為每天執行,並 勾選僅複製備份 7. 配置清除任務的文件位置,擴展 ...
  • 在進行Spark Streaming的開發時,我們常常需要將DStream轉為DataFrame來進行進一步的處理, 共有兩種方式,方式一: 利用map運算元和tuple來完成,一般的場景下採用這種方式即可。 但是有的時候我們會遇到列數大於22的情況,這個時候會受到scala的tuple數不能超過22 ...
  • 前言(廢話) 昨天抽了點時間在網上搜列了一個開源項目,項目挺完整的,前後臺分離還帶有微信小程式,我Clone下代碼,經過一番倒騰,嘿~還真就跑起來了。在這個過程中,體驗了一把VUE項目工程細節,因為之前沒有接觸過這一塊,所以還是花費了點時間,好在開源項目的QQ群里樓主幫忙看了一下,才得以順利往後進行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...