美文网首页
Elasticsearch Docker环境搭建集群

Elasticsearch Docker环境搭建集群

作者: GALAace | 来源:发表于2021-06-10 17:51 被阅读0次

    在上文Elasticsearch & Kibana环境安装中,我们已经安装好了单机版的ES,但通常情况下,ES都会以集群的形式使用,下面介绍集群的搭建以及常见的坑。

    1.环境

    这里以搭建两个节点来演示,三个及以上方法一样。
    准备两个服务器

    节点1 节点2
    节点名 es-node1 es-node2
    服务器ip xxx.xxx.xxx.1 xxx.xxx.xxx.2
    2.准备文件夹

    分别在两台服务器上创建文件夹
    data数据存放目录
    config配置存放目录
    logs日志存放目录
    plugins插件存放目录

    mkdir -p /data/elasticsearch/data
    mkdir -p /data/elasticsearch/config
    mkdir -p /data/elasticsearch/logs
    mkdir -p /data/elasticsearch/plugins
    
    3.配置文件

    在xxx.xxx.xxx.1(es-node1)的config文件夹中新建配置文件

    cd /data/elasticsearch/config
    vi elasticsearch.yml
    

    配置文件内容:

    # 设置集群名称,集群内所有节点的名称必须一致。
    cluster.name: es-cluster
    # 设置节点名称,集群内节点名称必须唯一。
    node.name: es-node1
    # 表示该节点会不会作为主节点,true表示会;false表示不会
    node.master: true
    # 当前节点是否用于存储数据,是:true、否:false
    node.data: true
    # 需求锁住物理内存,是:true、否:false
    #bootstrap.memory_lock: true
    # 监听地址,用于访问该es
    network.host: 0.0.0.0
    network.publish_host: xxx.xxx.xxx.1
    # es对外提供的http端口,默认 9200
    http.port: 9200
    # TCP的默认监听端口,默认 9300
    transport.tcp.port: 9300
    # 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
    discovery.zen.minimum_master_nodes: 1
    # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
    discovery.seed_hosts: ["xxx.xxx.xxx.1:9300","xxx.xxx.xxx.2:9300"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5
    # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
    cluster.initial_master_nodes: ["xxx.xxx.xxx.1:9300"]
    # 是否支持跨域,是:true,在使用head插件时需要此配置
    http.cors.enabled: true
    # “*” 表示支持所有域名
    http.cors.allow-origin: "*"
    

    同理,在xxx.xxx.xxx.2(es-node2)的config文件夹中新建配置文件,内容如下

    # 设置集群名称,集群内所有节点的名称必须一致。
    cluster.name: es-cluster
    # 设置节点名称,集群内节点名称必须唯一。
    node.name: es-node2
    # 表示该节点会不会作为主节点,true表示会;false表示不会
    node.master: true
    # 当前节点是否用于存储数据,是:true、否:false
    node.data: true
    # 需求锁住物理内存,是:true、否:false
    #bootstrap.memory_lock: true
    # 监听地址,用于访问该es
    network.host: 0.0.0.0
    network.publish_host: xxx.xxx.xxx.2
    # es对外提供的http端口,默认 9200
    http.port: 9200
    # TCP的默认监听端口,默认 9300
    transport.tcp.port: 9300
    # 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
    discovery.zen.minimum_master_nodes: 1
    # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
    discovery.seed_hosts: ["xxx.xxx.xxx.1:9300","xxx.xxx.xxx.2:9300"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5
    # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
    cluster.initial_master_nodes: ["xxx.xxx.xxx.1:9300"]
    # 是否支持跨域,是:true,在使用head插件时需要此配置
    http.cors.enabled: true
    # “*” 表示支持所有域名
    http.cors.allow-origin: "*"
    
    4.启动ES

    es-node1

    docker run -d --network=host --privileged=true -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" -e TAKE_FILE_OWNERSHIP=true --name es-node1 -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch/data:/usr/share/elasticsearch/data -v /data/elasticsearch/logs:/usr/share/elasticsearch/logs -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    

    es-node2

    docker run -d --network=host --privileged=true -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" -e TAKE_FILE_OWNERSHIP=true --name es-node2 -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch/data:/usr/share/elasticsearch/data -v /data/elasticsearch/logs:/usr/share/elasticsearch/logs -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    
    5.验证

    打开浏览器访问http://xxx.xxx.xxx.1:9200/_cat/nodes?pretty
    如果显示

    xxx.xxx.xxx.1 23 68 1 0.19 0.15 0.11 dilm * es-node1
    xxx.xxx.xxx.2   9 96 4 1.21 0.48 0.28 dilm - es-node2
    

    则配置成功

    6.异常处理

    1.如果ES启动后几秒自动关闭,可以使用下面命令查看日志定位问题

    docker logs 容器id
    

    2.访问http://xxx.xxx.xxx.1:9200/_cat/nodes?pretty显示

    {
      "error": {
        "root_cause": [
          {
            "type": "master_not_discovered_exception",
            "reason": null
          }
         ],
      "type": "master_not_discovered_exception",
      "reason": null
      },
    "status": 503
    }
    
    

    原因是没有设置初始master节点,需要在配置文件中增加下面配置指定

    cluster.initial_master_nodes: ["xxx.xxx.xxx.1:9300"]
    

    相关文章

      网友评论

          本文标题:Elasticsearch Docker环境搭建集群

          本文链接:https://www.haomeiwen.com/subject/vbcpeltx.html