Docker構建學習環境(1)-部署ElasticSearch集羣

ElasticSearch介紹

ElasticSearch下面簡稱ES,是一款分佈式全文搜索和分析引擎,它可用於商城的全文搜索引擎,也可用作小型實時日誌分析系統,著名的ELK中的E就是指的ElasticSearch。ElasticSearch基於Lucene基礎之上,用過Lucene的人可能知道,Lucene的API複雜,而且缺乏分佈式功能,而ElasticSearch天生提供分佈式功能,並且提供了基於JSON的REST API方便用戶使用。

我們開發過程中可能經常需要在單機上使用ElasticSearch集羣,但是在單機上部署多個ElasticSearch比較麻煩,所以這一篇文章主要講藉助Docker在單機上快速部署ElasticSearch集羣來幫助自己開發調試。Docker在這裏不做過多介紹,以後有機會會單獨介紹Docker。

環境和軟件版本

環境:windows10

Docker:3.0

ElasticSearch版本:7.4.2

部署步驟

1. docker安裝

省略,這裏不做介紹,安裝都很簡單,過程中直接下一步就ok。

2. 創建自定義網絡,用於部署ES集羣
docker network create --subnet=172.18.0.0/16 --gateway=172.18.0.1 esnet

執行命令後,我們查看一下當前docker的網絡
在這裏插入圖片描述

3. 拉取ES鏡像包
  1. 搜索鏡像包

    docker search elasticsearch
    

    選擇star最多的即官方的鏡像
    在這裏插入圖片描述

  2. pull拉取鏡像包

    docker pull elasticsearch:7.4.2
    

    這裏如果不帶上tag,會默認拉取latest,ES官方沒有這個tag,會導致找不到鏡像包,所以帶上版本號。想查看鏡像包的tag,可以官方鏡像倉庫這個網站查詢。

4. 配置和啓動
  1. 創建配置文件目錄和數據目錄

    我的環境是windows,所以在E盤下創建了docker文件夾,在docker文件夾下創建了config文件夾和data文件夾,data文件夾下創建data1和data2文件夾

  2. 配置ES配置文件
    我們部署兩臺,因爲第一步創建的子網爲172.18.0.0/16,網關爲172.18.0.1,現在把第一個節點ip固定設置爲172.18.0.2,第二臺設置爲172.18.0.3,在config文件夾創建es1.yml和es2.yml

    es1.yml
    
    #集羣名稱
    cluster.name: elasticsearch-cluster
     
    #節點名稱
    node.name: es-node1
     
    #設置綁定的ip地址,可以使ipv4或者ipv6
    #綁定這臺機器的任何一個ip
    network.bind_host: 172.18.0.2
     
    #設置其他節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真是的ip地址
    network.publish_host: 172.18.0.2
     
    #設置對外服務的http端口,默認爲9200
    http.port: 9200
     
    #設置節點之間的tcp端口,默認是9300
    transport.tcp.port: 9300
     
    #是否允許跨域REST請求
    http.cors.enabled: true
     
    #允許REST請求來自何處
    http.cors.allow-origin: "*"
    #初始master節點
    cluster.initial_master_nodes: es-node1
     
    #節點角色設置
    node.master: true 
    node.data: true  
     
    #集羣的節點列表
    discovery.zen.ping.unicast.hosts: ["172.18.0.2","172.18.0.3"]
     
    #集羣中一直正常運行的,有成爲master節點資格的最少節點數,默認爲1
    #(total number of master-eligible nodes / 2 + 1)
    discovery.zen.minimum_master_nodes: 1
    

    cluster.initial_master_nodes: es-node1 這個配置不要忘記不然啓動後會因爲沒有matser節點,無法組成集羣,第二臺ES配置:

    #集羣名稱
    cluster.name: elasticsearch-cluster
     
    # 節點名稱
    node.name: es-node2
     
    # 設置綁定的ip地址,可以使ipv4或者ipv6
    # 綁定這臺機器的任何一個ip
    network.bind_host: 172.18.0.3
     
    # 設置其他節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真是的ip地址
    network.publish_host: 172.18.0.3
     
    # 設置對外服務的http端口,默認爲9200
    http.port: 9200
     
    # 設置節點之間的tcp端口,默認是9300
    transport.tcp.port: 9300
     
    # 是否允許跨域REST請求
    http.cors.enabled: true
     
    # 允許REST請求來自何處
    http.cors.allow-origin: "*"
     
    # 節點角色設置
    node.master: true 
    node.data: true  
     
    # 集羣的節點列表
    discovery.zen.ping.unicast.hosts: ["172.18.0.2","172.18.0.3"]
     
    # 集羣中一直正常運行的,有成爲master節點資格的最少節點數,默認爲1
    # (total number of master-eligible nodes / 2 + 1)
    discovery.zen.minimum_master_nodes: 1
    
  3. 啓動

    # 啓動第一臺
    docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v E:/docker/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v E:/docker/data/data1:/usr/share/elasticsearch/data --network=esnet --ip 172.18.0.2 --name ES01 elasticsearch:7.4.2
    
    #啓動第二臺
    docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9200 -p 9301:9300 -v E:/docker/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v E:/docker/data/data2:/usr/share/elasticsearch/data --network=esnet --ip 172.18.0.3 --name ES02 elasticsearch:7.4.2
    

    參數解釋

    • -e: 設置環境變量參數
    • -d: 後臺運行
    • -p: 9200:9200, 宿主機和容器端口映射,分別是 宿主機port:容器port
    • -v: 目錄掛載 -v E:/docker/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml 把宿主機的E:/docker/config/es1.yml掛載到容器的/usr/share/elasticsearch/config/elasticsearch.yml
    • –network: 指定子網
    • –ip: 指定靜態ip
    • –name: 指定容器名
    5. 驗證

    啓動之後http://127.0.0.1:9200/_cat/nodes?v 鏈接可以查看節點信息

    我的是這樣的,*代表master節點,如果你的信息是這樣,那麼恭喜你,成功了。
    在這裏插入圖片描述
    文章首發地址:IkanのBolg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章