Docker 安裝 Elasticsearch 集群

此處部署為單個服務器啟動三個elasticsearch容器

問題:本打算在三個服務器上單獨部署elasticsearch 容器,elasticsearch.yml 注冊用的宿主機ip,但是容器之間通信發現用的是容器內部ip,導致節點之間通信失敗,只能發現master節點,待大佬們解疑答惑

  • 修改 max_map_count 否則啟動失敗,提示該值設置為262144

    • cat /proc/sys/vm/max_map_count
      
    • sysctl -w vm.max_map_count=262144
      
  • 分別創建三個節點配置文件掛載目錄

  • 拉取 elasticsearch 鏡像

    • docker pull elasticsearch:7.14.0
      
    • 先啟動一個容器,并將配置文件復制出來

    • docker run --name es01 -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m"  -v /opt/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -p 9200:9200 -p 9300:9300 elasticsearch:7.14.0
      
    • docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml /opt/es01/config
      
  • 修改 es01 elasticsearch.yml

    • # 集群名稱
      cluster.name: es-cluster
      # 節點名稱 
      node.name: es-node1
      # 啟用該物理機器所有網卡網絡訪問
      network.host: 0.0.0.0
      http.host: 0.0.0.0
      # 跨域
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      # 當前節點是否可以被選舉為master節點,是:true、否:false    
      node.master: true
      # 當前節點是否用于存儲數據,是:true、否:false  
      node.data: true
      # 設置節點之間通信的端口 
      transport.tcp.port: 9300
      # es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點 
      discovery.seed_hosts: 192.168.202.128:9300
      # es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master   
      cluster.initial_master_nodes: es-node1
      # elasticsearch和其他節點通信的地址,如果不設置的話 會自動獲取  
      network.publish_host: 192.168.202.128
      # host地址,默認為network.host 
      transport.host: 0.0.0.0
      # 設置這個集群,有多少個節點有master候選資格,如果集群較大官方建議為2-4個
      discovery.zen.minimum_master_nodes: 1
      
    • docker restart es01

  • 復制 elasticsearch.yml 到其他兩個 es 掛載目錄

    • es02 elasticsearch.yml

    • cluster.name: es-cluster
      node.name: es-node2
      network.host: 0.0.0.0
      http.host: 0.0.0.0
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      node.master: true
      node.data: true
      transport.tcp.port: 9301
      discovery.seed_hosts: 192.168.202.128:9300
      cluster.initial_master_nodes: es-node1
      network.publish_host: 192.168.202.128
      transport.host: 0.0.0.0
      discovery.zen.minimum_master_nodes: 1
      
    • es03 elasticsearch.yml

    • cluster.name: es-cluster
      node.name: es-node3
      network.host: 0.0.0.0
      http.host: 0.0.0.0
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      node.master: true
      node.data: true
      transport.tcp.port: 9302
      discovery.seed_hosts: 192.168.202.128:9300
      cluster.initial_master_nodes: es-node1
      network.publish_host: 192.168.202.128
      transport.host: 0.0.0.0
      discovery.zen.minimum_master_nodes: 1
      
    • 啟動es02 、 es03

    • docker run --name es02 -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m"  -v /opt/es02/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -p 9201:9200 -p 9301:9300 elasticsearch:7.14.0
      
      docker run --name es03 -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m"  -v /opt/es03/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -p 9202:9200 -p 9302:9300 elasticsearch:7.14.0
      
    • es 啟動較慢,別著急 ,訪問接口 http://192.168.202.128:9200/_cat/nodes

    • 172.17.0.2 72 97 1 0.08 0.11 0.14 cdfhilmrstw * es-node1
      172.17.0.4 53 97 1 0.08 0.11 0.14 cdfhilmrstw - es-node3
      172.17.0.3 69 97 1 0.08 0.11 0.14 cdfhilmrstw - es-node2
      
    • 顯示以上信息表示集群搭建成功

  • 安裝 elasticsearch-head 可視化界面

    • #拉取鏡像
      docker pull mobz/elasticsearch-head:5
      
      #創建容器
      docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
      
      #啟動容器
      docker start elasticsearch-head
      or
      docker start 容器id (docker ps -a 查看容器id )
      
    • 啟動成功后訪問 http://192.168.202.128:9100/

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容