ELK-Elasticsearch 集群部署(3个Elasticsearch)

一、docker-compose.yml

version: "3.2"
services:
    elasticsearch:
      image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
      container_name: elasticsearch
      environment:
        # - discovery.type=single-node
        - node.name=elasticsearch
        - discovery.zen.minimum_master_nodes=2
        - cluster.name=es-docker-cluster     # 集群name
        - discovery.seed_hosts=es02,es03
        - cluster.initial_master_nodes=es02,es03,elasticsearch
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        # - bootstrap.mlockall= true
      ports:
        - 9200:9200
      ulimits:
          memlock: 
              soft: -1
              hard: -1

      networks:
        - "elk-net"
    es02: 
      image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
      container_name: "es02"
      environment:
        - node.name=es02  # 节点name
        - cluster.name=es-docker-cluster     # 集群name
        - discovery.seed_hosts=elasticsearch,es03     # 发送集群
        - cluster.initial_master_nodes=elasticsearch,es02,es03
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        # - discovery.type=single-node 
        - discovery.zen.minimum_master_nodes=2
      ulimits:
          memlock: 
              soft: -1
              hard: -1
      networks:
        - "elk-net"
    es03: 
      image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
      container_name: "es03"
      environment:
        - node.name=es03  # 节点name
        - cluster.name=es-docker-cluster     # 集群name
        - discovery.seed_hosts=elasticsearch,es02     # 发送集群
        - cluster.initial_master_nodes=elasticsearch,es02,es03
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        # - discovery.type=single-node 
        - discovery.zen.minimum_master_nodes=2 
      ulimits:
          memlock: 
              soft: -1
              hard: -1    
      networks:
        - "elk-net"
    filebeat:
      image: docker.elastic.co/beats/filebeat:7.4.2
      volumes:
       - type: bind
         source: "./filebeat/2018.log"
         target: "/2018.log"
       - type: bind
         source: "./filebeat/filebeat.yml"
         target: "/usr/share/filebeat/filebeat.yml"
      networks:
        - "elk-net"
      depends_on:
        - "logstash"
    logstash:
      image: docker.elastic.co/logstash/logstash:7.4.2
      container_name: logstash
      volumes:
        - type: bind
          source: "./logstash/logstash_stdout.conf"
          target: "/usr/share/logstash/pipeline/logstash.conf"
      networks:
        - "elk-net"
    kibana:
        image: docker.elastic.co/kibana/kibana:7.4.2
        ports:
          - "5601:5601"
        networks: 
          - "elk-net"
networks:
      elk-net:

二、设置最新主节点数

minimum_master_nodes 设定对你的集群的稳定 极其 重要。

当你的集群中有两个 masters(注:主节点)的时候,这个配置有助于防止 脑裂 。

如果你的集群发生了脑裂,那么你的集群就会处在丢失数据的危险中,因为主节点被认为是这个集群的最高统治者,它决定了什么时候新的索引可以创建,分片是如何移动的等等。如果你有 两个 masters 节点, 你的数据的完整性将得不到保证,因为你有两个节点认为他们有集群的控制权,就会导致冲突。

此设置应该始终被配置为 master 候选节点的法定个数(大多数个)。法定个数就是 ( master 候选节点个数 / 2) + 1 。 这里有几个例子:

如果你有 10 个节点(能保存数据,同时能成为 master),法定数就是 6 。
如果你有 3 个候选 master 节点,和 100 个 data 节点,法定数就是 2 ,你只要数数那些可以做 master 的节点数就可以了。
如果你有两个节点,你遇到难题了。法定数当然是 2 ,但是这意味着如果有一个节点挂掉,你整个集群就不可用了。 设置成 1 可以保证集群的功能,但是就无法保证集群脑裂了,像这样的情况,你最好至少保证有 3 个节点。
建议这样配置:

discovery.zen.minimum_master_nodes: 2

三、容器因内存问题无法启动的解决方案

Swapping 是性能的坟墓
有必要说的更清楚一点:内存交换 到磁盘对服务器性能来说是 致命 的。想想看:一个内存操作必须能够被快速执行。

如果内存交换到磁盘上,一个 100 微秒的操作可能变成 10 毫秒。 再想想那么多 10 微秒的操作时延累加起来。 不难看出 swapping 对于性能是多么可怕。

最好的办法就是在你的操作系统中完全禁用 swap。这样可以暂时禁用:

sudo swapoff -a

如果需要永久禁用,你可能需要修改 /etc/fstab 文件,这要参考你的操作系统相关文档。

如果你并不打算完全禁用 swap,也可以选择降低 swappiness 的值。 这个值决定操作系统交换内存的频率。 这可以预防正常情况下发生交换,但仍允许操作系统在紧急情况下发生交换。

对于大部分Linux操作系统,可以在 sysctl 中这样配置:

vm.swappiness = 1 

swappiness 设置为 1 比设置为 0 要好,因为在一些内核版本 swappiness 设置为 0 会触发系统 OOM-killer(注:Linux 内核的 Out of Memory(OOM)killer 机制)。
最后,如果上面的方法都不合适,你需要打开配置文件中的 mlockall 开关。 它的作用就是允许 JVM 锁住内存,禁止操作系统交换出去。在你的 elasticsearch.yml 文件中,设置如下:

bootstrap.mlockall: true

四、访问 kibana 10.0.122.116:5601

ELK-Elasticsearch 集群部署(3个Elasticsearch)_第1张图片

五、访问 ELA 10.0.122.116:9200

可以看到3个节点
ELK-Elasticsearch 集群部署(3个Elasticsearch)_第2张图片

部署成功!!

你可能感兴趣的:(运维)