docker-compose搭建Elasticsearch集群和Kibana

首先需要修改宿主机的max_map_count
宿主机默认max_map_count的值太小了,需要设大到262144

查看max_map_count :
cat /proc/sys/vm/max_map_count
65530
 
设置max_map_count(临时性的,重启失效):
sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144

永久生效:
vim /etc/sysctl.conf
在最后一行添加以下即可永久生效:
vm.max_map_count=262144

只创建两个es节点的情况下(增加节点以此类推即可):
docker-compose.yml文件:

version: '3.1'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
    container_name: es02
    environment:
      # 集群名称
      - cluster.name=es-cluster
      # 节点名称
      - node.name=es01
      # 让节点es-2发现
      - discovery.seed_hosts=es02
      # 集群初始化时指定的主节点
      - cluster.initial_master_nodes=es01,es02
      # 开启提供hhtp服务
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      # 设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
      - bootstrap.memory_lock=true
      # 数据传输地址和端口 如在java里面配置节点ip和端口时应该用192.168.xx.xxx:9300  不用9200端口
      - transport.host=0.0.0.0
      - transport.tcp.port=9300
      # jvm运行内存大小
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      # 设置才能远程访问,默认为localhost
      - network.host=0.0.0.0
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./es01/data:/usr/share/elasticsearch/data:rw
      - ./es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:rw
    # - ./es01/plugins:/usr/share/elasticsearch/plugins  # 插件
    ports:
      - 9200:9200
      - 9300:9300
#   networks:
#     - esnet

  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
    container_name: es01
    environment:
      # 集群名称
      - cluster.name=es-cluster
      # 节点名称
      - node.name=es02
      # 让节点es-1发现
      - discovery.seed_hosts=es01
      # 集群初始化时指定的主节点
      - cluster.initial_master_nodes=es01,es02
      # 开启提供hhtp服务
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      # 设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
      - bootstrap.memory_lock=true
      # 数据传输地址和端口 绑定节点之间的通信 端口默认3000
      - transport.host=0.0.0.0
      - transport.tcp.port=9300
      # es运行内存大小
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      # 设置才能远程访问,默认为localhost
      - network.host=0.0.0.0
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./es02/data:/usr/share/elasticsearch/data:rw
      - ./es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:rw
    # - ./es02/plugins:/usr/share/elasticsearch/plugins  # 插件
    ports:
      - 9201:9200
      - 9301:9300
#   networks:
#     - esnet

  kibana:
    image: docker.elastic.co/kibana/kibana:7.3.0
    container_name: kibana
    ports:
      - 5601:5601
    volumes:
      - ./kibana/kibana.yml:/usr/share/kibana/config/kibana.yml:rw
#   networks:
#     - esnet

kibana的配置文件:

server.host: "0.0.0.0"
#elasticsearch.url: "http://192.168.72.130:9200"
elasticsearch.hosts: "http://192.168.72.130:9200"
#elasticsearch.requestTimeout: 90000
i18n.locale: zh-CN

在上面docker-compose.yml文件中指定了一些elasticsearch的运行环境,另外也可以通过指定elasticsearch.yml来运行elasticsearch容器
编辑elasticsearch.yml配置文件:

cluster.name: es-cluster #集群名
network.host: 0.0.0.0 
node.name: es-01
node.master: true
node.data: true
http.port: 9200
#可省略不写,默认3000,只要docker-compose.yml文件中有端口映射到该容器的3000就行
#transport.tcp.port: 9300
 
#集群最小的主节点数
discovery.zen.minimum_master_nodes: 1
 
#当最少几个节点回复之后,集群就正常工作
gateway.recover_after_nodes: 1
#head所需要使用的,否则head连接不了集群
http.cors.enabled: true 
http.cors.allow-origin: "*"
 
#集群初始化时指定的主节点
cluster.initial_master_nodes: ["es-01", "es-02"] 
 
#discovery.zen.ping.unicast.hosts属性已过时,用discovery.seed_hosts代替,且使用9300等集群通信端口
discovery.seed_hosts: ["192.168.20.101:9300","192.168.20.101:9301"]
#discovery.zen.ping.unicast.hosts: ["192.168.20.101:9300","192.168.20.101:9301"]
 
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
 
#指定一下容器中logs的位置,以便docker-compose可以正确挂载logs地址
path.logs: /usr/share/elasticsearch/logs

你可能感兴趣的:(docker-compose搭建Elasticsearch集群和Kibana)