Docker簡易搭建 ElasticSearch 集群

2022-01-16 程式設計師解析

(點擊上方公眾號,可快速關注)

寫在前面:為什麼要用ElasticSearch?我們的應用經常需要添加檢索功能,開源的Elastic Search是目前全文檢索引擎的首選。它可以快速的存儲、搜索和分析海量數據。


ElasticSearch是一個分布式搜索框架,提供RestfulAPI,底層基於Lucene,採用多shard(分片)的方式保證數據安全,並且提供自動resharding的功能。


Elasticsearch: 權威指南(中文):


https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

拉取ElasticSearch鏡像

在centos窗口中,執行如下命令:


docker pull elasticsearch:5.6.8


當前ES鏡像版本信息:


 {
  "name" : "WlwFyqU",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "78UDZtviQqiWmzmenGpSrQ",
  "version" : {
    "number" : "5.6.8",
    "build_hash" : "cfe3d9f",
    "build_date" : "2018-09-10T20:12:43.732Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
 }


創建數據掛在目錄,以及配置ElasticSearch集群配置文件,調高JVM線程數限制數量1.創建數據文件掛載目錄,並開放通信埠

在centos窗口中,執行如下操作:


[root@localhost soft]# pwd
/home/soft
[root@localhost soft]# mkdir -p ES/config
[root@localhost soft]# cd  ES 
[root@localhost ES]# mkdir data1
[root@localhost ES]# mkdir data2
[root@localhost ES]# mkdir data3
[root@localhost ES]# cd ES/config/
[root@localhost ES]# firewall-cmd --add-port=9300/tcp
success
[root@localhost ES]# firewall-cmd --add-port=9301/tcp
success
[root@localhost ES]# firewall-cmd --add-port=9302/tcp
success


註:如果ELK選的6.X版本的,那麼讀者需將data1 data2 data3 開啟777權限=> chmod 777 data1 data2 data3


2.創建ElasticSearch配置文件

在centos窗口中,使用vim命令分別創建如下文件:es1.yml,es2.yml,es3.yml


es1.yml


cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.9.219
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.9.219:9300","192.168.9.219:9301","192.168.9.219:9302"]
discovery.zen.minimum_master_nodes: 2


es2.yml


cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.9.219
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.9.219:9300","192.168.9.219:9301","192.168.9.219:9302"]
discovery.zen.minimum_master_nodes: 2

es3.yml

cluster.name: elasticsearch-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
network.publish_host: 192.168.9.219
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.9.219:9300","192.168.9.219:9301","192.168.9.219:9302"]
discovery.zen.minimum_master_nodes: 2


註:本機虛擬機ip:192.168.9.219 讀者請自行更改


3.調高JVM線程數限制數量

在centos窗口中,修改配置sysctl.conf


vim /etc/sysctl.conf


加入如下內容:


vm.max_map_count=262144 


啟用配置:


sysctl -p


註:這一步是為了防止啟動容器時,報出如下錯誤:


bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

啟動ElasticSearch集群容器

啟動ElasticSearch集群容器


在centos窗口中,執行如下命令:


 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /home/soft/ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data1:/usr/share/elasticsearch/data --name ES01 elasticsearch:5.6.8
 
 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /home/soft/ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data2:/usr/share/elasticsearch/data --name ES02 elasticsearch:5.6.8

 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /home/soft/ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data3:/usr/share/elasticsearch/data --name ES03 elasticsearch:5.6.8


註:設置-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 是因為/etc/elasticsearch/jvm.options 默認jvm最大最小內存是2G,讀者啟動容器後 可用docker stats命令查看


驗證是否搭建成功

1.在瀏覽器地址欄訪問http://192.168.9.219:9200/_cat/nodes?pretty 查看節點狀態



註:節點名稱帶表示為主節點*


2.使用elasticsearch-head前端框架


1.拉取鏡像


docker pull mobz/elasticsearch-head:5


2.啟動容器


docker run -d -p 9100:9100 --name es-manager  mobz/elasticsearch-head:5


3.瀏覽器訪問http://192.168.9.219:9100/



寫在最後,這裡要多提一點索引分片設置以及副本,官方推薦設置,讀者根據自身需要進行修改:


curl -XPUT 『http://localhost:9200/_all/_settings?preserve_existing=true』 -d 『{
「index.number_of_replicas」 : 「1」,
「index.number_of_shards」 : 「10」
}』

附錄:

1.查看容器內存


docker stats $(docker ps --format={{.Names}})


2.查看容器日誌


docker logs 容器名/容器ID


3.ElasticSearch配置文件說明


cluster.name: elasticsearch-cluster
node.name: es-node1
#index.number_of_shards: 2
#index.number_of_replicas: 1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.9.219
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["es-node1:9300","es-node2:9301","es-node3:9302"]
discovery.zen.minimum_master_nodes: 2


註:


cluster.name: 用於唯一標識一個集群,不同的集群,其 cluster.name 不同,集群名字相同的所有節點自動組成一個集群。如果不配置改屬性,默認值是:elasticsearch。


node.name: 節點名,默認隨機指定一個name列表中名字。集群中node名字不能重複


index.number_of_shards:  默認的配置是把索引分為5個分片


index.number_of_replicas: 設置每個index的默認的冗餘備份的分片數,默認是1

通過 index.number_of_shards,index.number_of_replicas默認設置索引將分為5個分片,每個分片1個副本,共10個結點。


禁用索引的分布式特性,使索引只創建在本地主機上:

index.number_of_shards: 1 index.number_of_replicas: 0


但隨著版本的升級 將不在配置文件中配置而實啟動ES後,再進行配置


**bootstrap.memory_lock: ** true 當JVM做分頁切換(swapping)時,ElasticSearch執行的效率會降低,推薦把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的物理內存分配給ES,同時允許ElasticSearch進程鎖住內存


network.bind_host: 設置可以訪問的ip,可以是ipv4或ipv6的,默認為0.0.0.0,這裡全部設置通過


network.publish_host: 設置其它結點和該結點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址


同時設置bind_host和publish_host兩個參數可以替換成network.host network.bind_host: 192.168.9.219 

network.publish_host: 192.168.9.219 =>network.host: 192.168.9.219


http.port: 設置對外服務的http埠,默認為9200


transport.tcp.port:  設置節點之間交互的tcp埠,默認是9300


http.cors.enabled:  是否允許跨域REST請求


http.cors.allow-origin:  允許 REST 請求來自何處


node.master:  true 配置該結點有資格被選舉為主結點(候選主結點),用於處理請求和管理集群。


如果結點沒有資格成為主結點,那麼該結點永遠不可能成為主結點;如果結點有資格成為主結點,只有在被其他候選主結點認可和被選舉為主結點之後,才真正成為主結點。


node.data:  true 配置該結點是數據結點,用於保存數據,執行數據相關的操作(CRUD,Aggregation);


discovery.zen.minimum_master_nodes:  //自動發現master節點的最小數,如果這個集群中配置進來的master節點少於這個數目,es的日誌會一直報master節點數目不足。


(默認為1)為了避免腦裂,個數請遵從該公式 => (totalnumber of master-eligible nodes / 2 + 1)。腦裂是指在主備切換時,由於切換不徹底或其他原因,導致客戶端和Slave誤以為出現兩個active master,最終使得整個集群處於混亂狀態


discovery.zen.ping.unicast.hosts:  集群個節點IP位址,也可以使用es-node等名稱,需要各節點能夠解析

相關焦點

  • 搭建Elasticsearch集群
    為什麼要搭建集群?凡事都要講究個為什麼。在搭建集群之前,我們首先先問一句,為什麼我們需要搭建集群?它有什麼優勢呢?高可用Elasticsearch 作為一個搜尋引擎,我們對它的基本要求就是存儲海量數據並且可以在非常短的時間內查詢到我們想要的信息。所以第一步我們需要保證的就是 Elasticsearch 的高可用性,什麼是高可用性呢?
  • Elasticsearch + Kibana 集群環境搭建
    本文主要介紹 elasticsearch 集群以及 kibana 的環境搭建。ElasticsearchElasticsearch 可以理解為一個支持模糊查詢的資料庫,用來存儲日誌。下載 Elasticsearchwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gztar -xzvf elasticsearch-6.2.3.tar.gz修改配置文件修改 config/elasticsearch.yml
  • 使用 Elasticsearch 和 cAdvisor 監控 Docker 容器
    cAdvisor 有兩個比較酷的特性:設置測試集群,或搭建自己的基礎架構和我以前的文章[8]一樣,我習慣提供一個簡單的腳本,讓讀者不用花很多時間就能部署好和我一樣的測試環境。你可以使用以下(非生產環境使用的)腳本來搭建一個 Swarm 模式的集群,其中一個容器運行著 Elasticsearch。
  • ​打開ElasticSearch、kibana、logstash的正確方式
    logstash將es數據從索引庫中導出logstash對Elasticsearch索引庫中數據的導入三、安裝ik中文分詞器ik中文分詞器插件的安裝分詞結果測試四、Elasticsearch集群的搭建創建集群所需要的配置文件及數據文件,以便容器的映射創建elasticsearch容器並啟動所遇問題前言Elasticsearch是什麼?
  • 全文搜尋引擎 Elasticsearch 集群搭建入門教程
    Elasticsearch 是用 Java 開發的,並作為 Apache 許可條款下的開放源碼發布,是當前流行的企業級搜尋引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。基百科、Stack Overflow、Github 都採用它。本文從零開始,講解如何使用 Elasticsearch 搭建自己的全文搜尋引擎。每一步都有詳細的說明,大家跟著做就能學會。
  • docker部署tomcat集群
    1、升級yum源 [root@elasticsearch-03 opt]# yum update2、設置存儲庫安裝yum-utils軟體包(提供yum-config-manager 實用程序)並設置穩定的存儲庫
  • ELK教程1:ElasticSearch集群的部署
    | | 192.168.1.3 | 2核4G | 1 |安裝下載安裝執行以下命令:# 下載elasticsearch-7.2.0-x86_64的rpm包wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-x86_64.rpmwget
  • Elastic Search入門:架構說明及Docker方式體驗
    可以參考:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html可以選擇通過拉起單一Docker的模式體驗,也可以通過Docker Compose的方式體驗(Docker Compose比較適合構建一個分布式ES集群)。
  • 測試 - elasticsearch集群(不同雲伺服器上)的搭建與可視化
    為了方便監測elasticsearch的狀態,有兩個合適的可視化插件,分別是elasticsearch-head和cerebro。    先說head插件,由於安裝head需要node環境,乾脆安裝了一個node虛擬環境NVM。
  • ElasticSearch學習筆記(三)-ES集群基本概念及搭建過程及主要工作原理
    中如何安裝虛擬機   並且軟體以及linux系統我都已經通過百度網盤連結的方式分享出來了ES集群的搭建非常的簡單,只需要簡單配置一下config目錄下的elasticsearch.yml文件即可.4.ES設置開機自啟動因為這裡我這裡並不是在雲伺服器上面搭建的ES集群,所以每次都需要我自己打開虛擬機之後自己手動開啟elasticSearch,試了幾天之後發現,這樣太煩了,還是配置一下elasticSearch的開機自啟動吧.
  • elasticsearch和kibana的保姆級安裝教程
    目錄導航為什麼使用docker容器部署這些應用elasticsearch安裝安裝kibana安裝ik分詞器插件安裝elasticsearch-head插件參考文獻下載Elasticsearch鏡像,去官方鏡像網站(https://www.docker.elastic.co/r/elasticsearch)選擇需要的版本,我這裡下的是7.13.4版本docker pull elasticsearch:7.13.4
  • ElasticSearch介紹
    /cn/products/elasticsearchGithub:https://github.com/elastic/elasticsearch總結:1、elasticsearch是一個基於Lucene的高擴展的分布式搜索伺服器,支持開箱即用。
  • Elasticsearch專題
    =8080spring.application.name=springboot-elasticsearch#集群名稱spring.data.elasticsearch.cluster-name=prosayes#集群地址 9300埠是集群節點之間通信的埠號spring.data.elasticsearch.cluster-nodes=192.168.43.135
  • Spring Boot整合Elasticsearch
    這是我們的application.yml文件的片段,它覆蓋了默認的集群名稱和地址,以及在Docker容器上啟動的Elasticsearch的地址:spring: data: elasticsearch: cluster-name: docker-cluster
  • Elasticsearch 跨網絡、跨集群同步選型指南
    https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html2.2 跨網絡兩個集群不在一個區域網內,一個掛在雲端、一個在本地。
  • Elasticsearch快速入門,掌握這些剛剛好!
    Linux下的安裝Elasticsearch下載elasticsearch 6.4.0的docker鏡像;docker pull elasticsearch:6.4.0"cluster.name=elasticsearch" \-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \-d elasticsearch:6.4.0
  • Docker 如何安裝 ElasticSearch+ik 分詞器 +es-head 可視化插件
    三、docker 安裝 Elasticsearch1、拉去鏡像docker pull docker.io/elasticsearch:版本號docker pull docker.io/elasticsearch:7.1.12
  • Elasticsearch 的快照插件
    前言Elasticsearch 的快照與恢復功能是 Elasticsearch 集群的重要組成部分。它的存在為數據可靠性提供了強有力的保障。在這篇文章中,讓我們一起看看 Elasticsearch 中官方幾個快照插件的相關信息。在文章正式開始前,讓我們先大致地了解一下快照倉庫。
  • 使用Docker搭建ELK日誌系統
    官方pull下來之後鏡像名太長了,所以我將鏡像全部重新打了tag,命令:docker tag docker.elastic.co/elasticsearch/elasticsearch:6.1.1 elasticsearch:latest。
  • 使用ElasticSearch,Kibana,ASP.NET Core和Docker可視化數據
    原文地址:http://www.dotnetcurry.com/aspnet/1354/elastic-search-kibana-in-docker-dotnet-core-app