docker部署es集群

安装docker 以及 docker-compose

参考文章https://developer.aliyun.com/article/708974

下载镜像

这里以6.7.1版本为例 实际生产请按生产具体版本号

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.7.1

安装docker集群

目前三台虚拟机 ip 10.211.55.7,10.211.55.8,10.211.55.10

  1. 首先在10.22.55.7创建配置文件夹

    mkdir /docker/es/config
    mkdir /docker/es/data
    
  2. 然后在config目录下创建docker配置文件

    vim es.yml
    
    node.name: es-node1
    network.host: 0.0.0.0
    network.publish_host: 10.211.55.7
    http.port: 9200
    transport.tcp.port: 9300
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    node.master: true
    node.data: true
    discovery.zen.ping.unicast.hosts: ["10.211.55.7:9300","10.211.55.8:9300","10.211.55.10:9300"]
    discovery.zen.minimum_master_nodes: 2
    

    具体参数解释

    ES_JAVA_OPTS 配置ES JVM heap内存限制
    cluster.name   集群名称
    node.name 节点名称
    node.master 节点角色配置,true表示可以成为主节点,false不能成为主节点
    node.data   节点角色配置,true表示可以成为数据节点,false不能成为数据节点
    node.ingest 节点角色配置,true表示可以成为协调节点,false不能成为协调节点(简单解释,请以官方为准)
    node.attr.rack  节点服务器所在的机柜信息,可能在数据分布中起到指导作用
    discovery.zen.ping.unicast.hosts 配置自动发现IP列表
    discovery.zen.minimum_master_nodes 防止脑裂,这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量(我们的情况是3,因此这个参数设置为2,但对于只有2个节点的情况,设置为2就有些问题了,一个节点DOWN掉后,你肯定连不上2台服务器了,这点需要注意)。
    gateway.recover_after_nodes 控制集群在达到多少个节点之后才会开始数据恢复,通过这个设置可以避免集群自动相互发现的初期,shard分片不全的问题,假如es集群内一共有5个节点,就可以设置为5,那么这个集群必须有5个节点启动后才会开始数据分片,如果设置为3,就有可能另外两个节点没存储数据分片
    network.host 绑定服务的IP地址
    transport.tcp.port 内部通信端口
    http.port 对外服务端口
    path.data 数据存放目录
    bootstrap.memory_lock 锁住内存,确保ES不使用swap
    bootstrap.system_call_filter        系统调用过滤器,建议禁用该项检查,因为很多检查项需要Linux 3.5以上的内核,否则会报错。
    

    创建jvm的配置文件

    vim jvm.options
    
    ## JVM configuration
    
    ################################################################
    ## IMPORTANT: JVM heap size
    ################################################################
    ##
    ## You should always set the min and max JVM heap
    ## size to the same value. For example, to set
    ## the heap to 4 GB, set:
    ##
    ## -Xms4g
    ## -Xmx4g
    ##
    ## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
    ## for more information
    ##
    ################################################################
    
    # Xms represents the initial size of total heap space
    # Xmx represents the maximum size of total heap space
    
    -Xms512m
    -Xmx512m
    
    ################################################################
    ## Expert settings
    ################################################################
    ##
    ## All settings below this section are considered
    ## expert settings. Don't tamper with them unless
    ## you understand what you are doing
    ##
    ################################################################
    
    ## GC configuration
    8-13:-XX:+UseConcMarkSweepGC
    8-13:-XX:CMSInitiatingOccupancyFraction=75
    8-13:-XX:+UseCMSInitiatingOccupancyOnly
    
    ## G1GC Configuration
    # NOTE: G1 GC is only supported on JDK version 10 or later
    # to use G1GC, uncomment the next two lines and update the version on the
    # following three lines to your version of the JDK
    # 10-13:-XX:-UseConcMarkSweepGC
    # 10-13:-XX:-UseCMSInitiatingOccupancyOnly
    14-:-XX:+UseG1GC
    14-:-XX:G1ReservePercent=25
    14-:-XX:InitiatingHeapOccupancyPercent=30
    
    ## JVM temporary directory
    -Djava.io.tmpdir=${ES_TMPDIR}
    -Dlog4j2.disable.jmx=true
    
    ## heap dumps
    
    # generate a heap dump when an allocation from the Java heap fails
    # heap dumps are created in the working directory of the JVM
    -XX:+HeapDumpOnOutOfMemoryError
    
    # specify an alternative path for heap dumps; ensure the directory exists and
    # has sufficient space
    -XX:HeapDumpPath=data
    
    # specify an alternative path for JVM fatal error logs
    -XX:ErrorFile=logs/hs_err_pid%p.log
    
    ## JDK 8 GC logging
    8:-XX:+PrintGCDetails
    8:-XX:+PrintGCDateStamps
    8:-XX:+PrintTenuringDistribution
    8:-XX:+PrintGCApplicationStoppedTime
    8:-Xloggc:logs/gc.log
    8:-XX:+UseGCLogFileRotation
    8:-XX:NumberOfGCLogFiles=32
    8:-XX:GCLogFileSize=64m
    
    # JDK 9+ GC logging
    9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
    

    其中启动内存建议是服务器内存的一半,比如服务器内存16g 就设置-Xms8g
    -Xmx8g

  3. 编写docker compose文件

    vi docker-compose.yml
    
    version: '2.2'
    services:
      elasticsearch:
        image: elasticsearch:6.7.1
        restart: always
        container_name: es-node1
        privileged: true
        network_mode: host
        volumes:
          - /docker/es/data:/usr/share/elasticsearch/data
          - /docker/es/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - /docker/es/config/jvm.options:/usr/share/elasticsearch/config/jvm.options
        environment:
          - bootstrap.memory_lock=true
          - xpack.security.enabled=false
          - xpack.monitoring.enabled=false
        ports:
          - 9200:9200
          - 9300:9300
        ulimits:
          memlock:
            soft: -1
            hard: -1
    

    记得给文件夹授予权限

    chmod 777 /docker/es -R

  4. 启动es

    docker-compose up -d
    

    然后用docker ps 查看是否启动进程

    image-20201229101835678

    如果遇到启动失败,可以用docker logs 容器id来查看日志

    比如docker logs 4d92f5249b81

    image-20201229094650799

然后可以访问服务器ip:9200来访问es,请确保9200 9300端口已开放

image-20201229102151886

其他两台电脑依次部署 具体配置文件请看附件

部署完成

可以用http://ip:9200/_nodes 来查看集群信息

image-20201229135815601

可以看到已经有三个节点

部署出现的问题

  1. 没有访问路径的权限

    image-20201229102552285

    解决方案:授予权限

    chmod 777 /docker/es -R
    
  2. es占用内存空间太小

    image-20201229094650799

    解决方案

    https://www.jianshu.com/p/90ec54cd4b10

  3. es从节点无法连城集群

    image-20201229122456695

    解决方案

    https://discuss.elastic.co/t/failed-add-node/187715/2

    清空data下的数据

WRITTEN BY: