ElasticSearch集群搭建

安装部署

单机部署

  • 去Elastic官网 Download Elastic Products | Elastic ,下载页有所有Elastic的产品

  • 解压tar包

    将tar包上传到Linux服务器 /usr/appdata/ 路径下
    tar -zxvf elasticsearch-6.5.4.tar.gz
  • 主要配置文件详解

    # 存放数据的路径
    path.data: /usr/appdata/elasticsearch-6.5.4/data
    ​
    # 日志路径
    path.logs: /usr/appdata/elasticsearch-6.5.4/logs
    ​
    # 设置为 0.0.0.0 可以使用外网访问,
    network.host: 0.0.0.0
    ​
    # 配置es端口
    http.port: 9200
    ​
    # elasticsearch的集群名称,默认是elasticsearch
    cluster.name: my-application
    ​
    # 节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理
    node.name: node-1
    ​
    # 集群间通讯端口
    transport.tcp.port: 9300
    ​
    # 指定该节点是否有资格被选举成为master结点,默认是true,如果原来的master宕机会重新选举新的master
    node.master: true 
    ​
    # 是否作为数据结点存储数据,默认为true
    node.data: true
    ​
    # 设置集群中master节点的初始列表
    discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301", "0.0.0.0:9302"]
    ​
    # 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些
    discovery.zen.ping.timeout: 3s 
    ​
    # 主结点数量的最少值,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2
    discovery.zen.minimum_master_nodes: 1 
    ​
    #设置为true可以锁住ES使用的内存,避免内存与swap分区交换数据
    bootstrap.memory_lock: true 
    ​
    # 单机允许的大存储结点数,通常单机启动一个结点建议设置为1,开发环境如果单机启动多个节点可设置大于1. 
    node.max_local_storage_nodes: 1     
    ​
    #开启cors跨域访问支持
    http.cors.enabled: true
    # 跨域访问允许的域名地址,(以下配置允许所有域名,使用用正则) 
    http.cors.allow-origin: /.*/
    ​
    注意:将config/elasticsearch.yml另存为utf-8编码格式
  • 修改配置文件

    vim /usr/appdata/elasticsearch-6.5.4/config/elasticsearch.yml
    ​
    path.data: /usr/appdata/elasticsearch-6.5.4/data
    path.logs: /usr/appdata/elasticsearch-6.5.4/logs
    network.host: 0.0.0.0
    http.port: 9200
    ​
    在Elasticsearch中,如果network.host不是localhost或者127.0.0.1的,就会认为是生产环境,对环境的要求比较高,测试环境不一定能够满足,需要修改2处配置,
    1:修改jvm启动参数 (根据自己机器情况修改)
        vim /usr/appdata/elasticsearch-6.5.4/config/jvm.options
        -Xms128m 
        -Xmx128m
    2:单个进程中的大线程数
        vim /etc/sysctl.conf 
        vm.max_map_count=655360
        执行命令 sysctl -p 生效
  • 创建一个用户(es不能使用root用户启动)

    创建用户命令
    adduser elsearch
    passwd airport
    ​
    给用户授权
    cd /usr/appdata/elasticsearch-6.5.4/bin
    chmod +x elasticsearch
    chown elsearch /usr/appdata/elasticsearch-6.5.4 -R
  • 启动

    切换用户
    su elsearch
    cd /usr/local/appdata/elasticsearch-6.5.4/bin/
    ./elasticsearch 或 ./elasticsearch -d(后台启动)
    访问 http://ip:9200 看到es的相应版本信息就说明启动成功了
  • 问题解决

    [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 
        意思是说你的进程不够用了
        解决方案: 切到root 用户执行命令 vi /etc/security/limits.conf 
        在文件的末尾添加下面的参数值:
        * soft nofile 65536
        * hard nofile 131072
        * soft nproc 65536
        * hard nproc 65536
        * hard memlock unlimited
        * soft memlock unlimited
        前面的*符号必须带上,然后重新启动就可以了。执行完成后可以使用命令 ulimit -n 查看进程数      
    [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]  
        需要修改系统变量 单个进程中的大线程数
        解决方案:切换到root用户执行命令 vi /etc/sysctl.conf
        增加配置值: vm.max_map_count=655360  
        执行命令 sysctl -p   
        然后重新启动ES服务 
    [3]: ERROR: [1] bootstrap checks failed
        [1]: memory locking requested for elasticsearch process but memory is not locked
        修改/etc/systemd/system.conf
        DefaultLimitNOFILE=65536
        DefaultLimitNPROC=32000
        DefaultLimitMEMLOCK=infinity
        执行以下操作,立即生效 
        /bin/systemctl daemon-reload
        
    [4]: [elsearch@pkx-eureka appdata]$ ./elasticsearch-6.5.4/bin/elasticsearch -d
    Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied
    [elsearch@pkx-eureka appdata]$ Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/appdata/elasticsearch-6.5.4/config/elasticsearch.keystore
    Likely root cause: java.nio.file.AccessDeniedException: /usr/appdata/elasticsearch-6.5.4/config/elasticsearch.keystore
            at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
            at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
            at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
            at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
            at java.nio.file.Files.newByteChannel(Files.java:361)
            at java.nio.file.Files.newByteChannel(Files.java:407)
            at org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:77)
            at org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:215)
            at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:230)
            at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:295)
            at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136)
            at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127)
            at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
            at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
            at org.elasticsearch.cli.Command.main(Command.java:90)
            at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)
            at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86)
            
    上面的错误表示没有权限     chown elsearch /usr/appdata/elasticsearch-6.5.4 -R
    ​
    ​
    the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
    ERROR: Elasticsearch did not exit normally - check the logs at /usr/appdata/elasticsearch-7.13.4/logs/elasticsearch.log
    配置以下参数
    node.name: node-1
    cluster.initial_master_nodes: ["node-1"]

关闭防火墙

查看防火墙状态 systemctl status firewalld.service
关闭防火墙 systemctl stop firewalld.service

集群部署

  • 集群概念

    1. 节点

      集群由多个节点组成,每台物理服务器为一个节点(一台物理服务器只部署一个es进程)

    2. 分片

      当文档量很大时,为了提高es的处理能力、容错能力、高可用能力,将索引分成若干分片,每个分片放在不同的节点上,这样多台服务器可以同时对外提供索引及搜索服务。一个搜索请求过来,会分别从各各分片去查询,将查询到的数据合并返回给用户

    3. 副本

      为了提高ES的高可用同时也为了提高搜索的吞吐量,我们将分片复制一份或多份存储在其它的服务器,这样即使当 前的服务器挂掉了,拥有副本的服务器照常可以提供服务

    4. 主节点

      一个集群中会有一个或多个主结点,主结点的作用是集群管理,比如增加节点,移除节点等,主结点挂掉后ES会重 新选一个主结点。

    5. 节点转发

      每个结点都知道其它结点的信息,我们可以对任意一个结点发起请求,接收请求的结点会转发给其它结点查询数 据。

  • 节点的角色

    1. 主节点(master)

      主节点主要用于集群的管理,比如新增结点、分片分配、索引的新增和删除等

    2. data节点

      data 节点上保存了数据分片,它负责索引和搜索操作

    3. client节点

      client 节点仅作为请求客户端存在,client的 作用也作为负载均衡器,client 节点不存数据,只是将请求均衡转发到其它结点。

  • 节点配置

    node.master: #是否允许为主结点 
    node.data: #允许存储数据作为数据结点 
    node.ingest: #是否允许成为协调节点
    ​
    四种组合方式:
    master=true,data=true:即是主结点又是数据结点
    master=false,data=true:仅是数据结点 
    master=true,data=false:仅是主结点,不存储数据 
    master=false,data=false:即不是主结点也不是数据结点,此时设置ingest为true表示它是一个客户端。
  • 集群配置

    1. 节点1配置(172.16.10.101)

      path.data: /usr/local/appdata/elasticsearch-6.5.4/data
      path.logs: /usr/local/appdata/elasticsearch-6.5.4/logs
      network.host: 0.0.0.0
      http.port: 9200
      http.cors.enabled: true
      http.cors.allow‐origin: /.*/
      ​
      cluster.name: my-application
      node.name: node-1
      transport.tcp.port: 9300
      node.master: true 
      node.data: true
      node.ingest: true
      discovery.zen.ping.unicast.hosts: ["172.16.10.101:9300", "172.16.10.102:9300", "172.16.10.103:9300"]
      discovery.zen.minimum_master_nodes: 1 
      node.max_local_storage_nodes: 1  
    2. 节点2配置(172.16.10.102)

      path.data: /usr/local/appdata/elasticsearch-6.5.4/data
      path.logs: /usr/local/appdata/elasticsearch-6.5.4/logs
      network.host: 0.0.0.0
      http.port: 9200
      http.cors.enabled: true
      http.cors.allow‐origin: /.*/
      ​
      cluster.name: my-application
      node.name: node-2
      transport.tcp.port: 9300
      node.master: true 
      node.data: true
      node.ingest: true
      discovery.zen.ping.unicast.hosts: ["172.16.10.101:9300", "172.16.10.102:9300", "172.16.10.103:9300"]
      discovery.zen.minimum_master_nodes: 1 
      node.max_local_storage_nodes: 1  
    3. 节点3配置(172.16.10.103)

      path.data: /usr/local/appdata/elasticsearch-6.5.4/data
      path.logs: /usr/local/appdata/elasticsearch-6.5.4/logs
      network.host: 0.0.0.0
      http.port: 9200
      http.cors.enabled: true
      http.cors.allow‐origin: /.*/
      ​
      cluster.name: my-application
      node.name: node-3
      transport.tcp.port: 9300
      node.master: true 
      node.data: true
      node.ingest: true
      discovery.zen.ping.unicast.hosts: ["172.16.10.101:9300", "172.16.10.102:9300", "172.16.10.103:9300"]
      discovery.zen.minimum_master_nodes: 1 
      node.max_local_storage_nodes: 1  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

起个昵称不容易1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值