基於docker搭建elasticsearch集群


es集群的搭建

- 基於單機搭建elasticsearch集群見官網 https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

本文旨在三台不同的服務器,搭建elasticsearch集群,版本為7.1.1

  • 1、服務器列表即配置
    172.168.50.40(8G), 172.168.50.41(16G), 172.168.50.240(8G)
    服務器內存盡量不要低於4G
    選用172.168.50.41作為master節點,
  • 2、建立存放yml文件的目錄
   建立文件夾,/root/elasticsearch(隨意即可),用於存放啟動elasticsearch容器的yml文件以及es的配置文件
   mkdir /root/elasticsearch
  • 3、創建docker-compose.yml文件
    cd /root/elasticsearch
    touch docker-compose.yml
  • 4、docker-compose.yml 的文件內容如下
version: '3'
services:
  elasticsearch:                    # 服務名稱
    image: elasticsearch:7.1.1      # 使用的鏡像
    container_name: elasticsearch   # 容器名稱
    restart: always                 # 失敗自動重啟策略
    environment:                                    
      - node.name=node-41                   # 節點名稱,集群模式下每個節點名稱唯一
      - network.publish_host=172.168.50.41  # 用於集群內各機器間通信,對外使用,其他機器訪問本機器的es服務,一般為本機宿主機IP
      - network.host=0.0.0.0                # 設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0,即本機
      - discovery.seed_hosts=172.168.50.40,172.168.50.240,172.168.50.41          # es7.0之后新增的寫法,寫入候選主節點的設備地址,在開啟服務后,如果master掛了,哪些可以被投票選為主節點
      - cluster.initial_master_nodes=172.168.50.40,172.168.50.240,172.168.50.41  # es7.0之后新增的配置,初始化一個新的集群時需要此配置來選舉master
      - cluster.name=es-cluster     # 集群名稱,相同名稱為一個集群, 三個es節點須一致
      # - http.cors.enabled=true    # 是否支持跨域,是:true // 這里設置不起作用,但是可以將此文件映射到宿主機進行修改,然后重啟,解決跨域
      # - http.cors.allow-origin="*" # 表示支持所有域名      // 這里設置不起作用,但是可以將此文件映射到宿主機進行修改,然后重啟,解決跨域
      - bootstrap.memory_lock=true  # 內存交換的選項,官網建議為true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 設置內存,如內存不足,可以嘗試調低點
    ulimits:        # 棧內存的上限
      memlock:
        soft: -1    # 不限制
        hard: -1    # 不限制
    volumes:
      - /root/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  # 將容器中es的配置文件映射到本地,設置跨域, 否則head插件無法連接該節點
      - esdata:/usr/share/elasticsearch/data  # 存放數據的文件, 注意:這里的esdata為 頂級volumes下的一項。
    ports:
      - 9200:9200    # http端口,可以直接瀏覽器訪問
      - 9300:9300    # es集群之間相互訪問的端口,jar之間就是通過此端口進行tcp協議通信,遵循tcp協議。
volumes:
  esdata:
    driver: local    # 會生成一個對應的目錄和文件,如何查看,下面有說明。

  • 另外兩台服務器也照着這個配置進行配置,但 publish_host,以及 node.name 需要改一下即可。

  • 內存設置,三台服務器都需要進行設置

兩種設置內存的方式:

1、設置簡單,但機器重啟后需再次設置
    sysctl -w vm.max_map_count=262144

2、直接修改配置文件, 進入sysctl.conf文件添加一行(解決容器內存權限過小問題)

    vi /etc/sysctl.conf

    sysctl vm.max_map_count=262144  # 添加此行

    退出文件后,執行命令: sysctl -p 立即生效
    {
  "cluster_name" : "es-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

  • elasticsearch.yml 文件內容如下:
    network.host: 0.0.0.0
    http.cors.enabled: true        # 是否支持跨域
    http.cors.allow-origin: "*"    # 表示支持所有域名
  • 上面說到的頂級volumes, 如何查看掛載卷在宿主機的位置呢?
    # docker volume create elk_data    // 創建一個自定義容器卷,本教程內不需要執行,我們的docker-compose.yml會幫我們自動執行改命令。
    # docker volume ls                 // 查看所有容器卷,
    # docker volume inspect elk_data   // 查看指定容器卷詳情信息, 包括真實目錄
    注意: 如果你要刪除一個掛載卷,或者重新生成,請執行刪除卷操作
    # docker volume rm elk_data        // 直接執行這個命令,同時會刪除文件,但是先刪除文件的話,必須再次執行此命令,否則可能導致該節點無法加入集群。
  • 以上就是es集群的搭建,如果出現權限不足等簡單問題,可以百度自行解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM