elasticsearch集群安装与部署


Elasticsearch部署

一、环境准备

  1. 物理机配置
数量 配置 操作系统 IP地址
6 处理器:56核心
内存:512GB
系统盘:1T * 2 SSD固态盘
数据盘:8T * 10机械盘
Linux CentOS 7.5 192.168.70.130
192.168.70.131
192.168.70.132
192.168.70.133
192.168.70.134
192.168.70.135
  1. 软件信息

    JDK版本:1.8

    Elasticsearch版本:7.0

二、搭建环境

  1. 软件环境信息
    # 创建目录为elasticsearch安装做准备
    $ mkdir -p /opt/elastic
    $ mkdir -p /opt/elastic/node-01
    $ mkdir -p /opt/elastic/node-02
    $ mkdir -p /opt/elastic/node-03
    $ mkdir -p /opt/elastic/node-04
    $ mkdir -p /opt/elastic/node-05
    $ mkdir -p /opt/elastic/node-client
    # 创建目录用于下载文件,可以根据自己习惯操作
    $ mkdir -p /home/software
    $ cd /home/software
    # 下载JDK
    $ wget https://download.oracle.com/otn/java/jdk/8u351-b10/10e8cce67c7843478f41411b7003171c/jdk-8u351-linux-x64.tar.gz?AuthParam=1670730205_7f2b9f799e119cf35d27add28a8187cf
    # 解压jdk文件 tar
    $ tar -zxvf jdk-8u351-linux-x64.tar.gz
    # 查看当前机器是否安装过jdk
    $ rpm -qa |grep java
    # 删除以java开头的文件
    $ rpm -e --nodeps java*
    # 删除完毕后可以输入以下命令确认是否还存在,如果提示command找不到,说明移除完成
    $ java -version
    # 配置JDK
    $ vim /etc/profile
    # 在最后一行添加如下内容
    export JAVA_HOME=/home/local/java/jdk1.8.0_271
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    # 保存内容
    按下esc键,操作:wq保存文件内容
    # 重新加载文件,使其生效
    $ source /etc/profile
    # 验证安装是否成功,如果命令正常说明已经成功
    $ java -version 
    # 下载elasticsearch
    $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz
    # 解压Elasticsearch
    $ tar -zxvf elasticsearch-7.0.0-linux-x86_64.tar.gz
    $ cp /home/software/elasticsearch /opt/elastic/node-01
    $ cp /home/software/elasticsearch /opt/elastic/node-02
    $ cp /home/software/elasticsearch /opt/elastic/node-03
    $ cp /home/software/elasticsearch /opt/elastic/node-04
    $ cp /home/software/elasticsearch /opt/elastic/node-05
    $ cp /home/software/elasticsearch /opt/elastic/node-client

    节点分配

    node-01为即是master节点也是data节点

    node-02~node-05为data节点

    node-client为客户端节点,不充当master节点和data节点,仅作为对外客户端连接

    说明:

    此处client可以省略,也可以放到node-01上

  • 客户端节点配置
    # 这种组合表示这个节点即不会成为主节点,也不会存储数据,这个节点的意义是作为一个client(客户端)节点,主要是针对海量请求的时候可以进行负载均衡。
    cluster.name: elastic-cluster
    cluster.name: 130-node-client
    network.host: 192.168.70.130
    http.port: 9200
    transport.port: 9300
    # 是否为master节点
    node.master: false
    # 是否为data节点
    node.data: false
    cluster.initial_master_nodes: ["130-node-01", "131-node-01","132-node-01","133-node-01","134-node-01","135-node-01"]
    discovery.seed_hosts: ["192.168.70.130:9201", "192.168.70.131:9201", "192.168.70.132:9201", "192.168.70.133:9201", "192.168.70.134:9201", "192.168.70.135:9201"]
    # 锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高
    bootstrap.memory_lock: true
    # 跨域配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    # 超出限制,清除内存已有的fielddata
    indices.fielddata.cache.size: 30%
  • Master节点配置
    # 这种组合表示这个节点即有成为主节点的资格,又存储数据。这个时候如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。elasticsearch默认每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,这样相当于主节点和数据节点的角色混合到一块了
    cluster.name: elastic-cluster
    cluster.name: 130-node-01
    network.host: 192.168.70.130
    http.port: 9201
    transport.port: 9301
    # 是否为master节点
    node.master: true
    # 是否为data节点
    node.data: true
    cluster.initial_master_nodes: ["130-node-01", "131-node-01","132-node-01","133-node-01","134-node-01","135-node-01"]
    discovery.seed_hosts: ["192.168.70.130:9201", "192.168.70.131:9201", "192.168.70.132:9201", "192.168.70.133:9201", "192.168.70.134:9201", "192.168.70.135:9201"]
    # 锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高
    bootstrap.memory_lock: true
    # 跨域配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    # 超出限制,清除内存已有的fielddata
    indices.fielddata.cache.size: 30%
  • Data节点配置(node-02~node-05)此处以node-02为例
    # 这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。这个节点我们称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据,后期提供存储和查询服务。
    cluster.name: elastic-cluster
    cluster.name: 130-node-02
    network.host: 192.168.70.130
    http.port: 9202
    transport.port: 9302
    # 是否为master节点
    node.master: false
    # 是否为data节点
    node.data: true
    cluster.initial_master_nodes: ["130-node-01", "131-node-01","132-node-01","133-node-01","134-node-01","135-node-01"]
    discovery.seed_hosts: ["192.168.70.130:9201", "192.168.70.131:9201", "192.168.70.132:9201", "192.168.70.133:9201", "192.168.70.134:9201", "192.168.70.135:9201"]
    # 锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高
    bootstrap.memory_lock: true
    # 跨域配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    # 超出限制,清除内存已有的fielddata
    indices.fielddata.cache.size: 30%

    备注:

    其他服务器配置一致

    JDK下载地址:jdk1.8

    OPEN JDK9及以后版本下载地址:JDK9及以后版本

    Elasticsearch下载地址:Elasticsearch7.0.0

    ElasticStack所有软件下载地址:Elastic Stack所有软件

  1. 系统环境准备

    ❗️ Elasticsearch部署需要在Linux中单独创建一个用户供其使用

    # 创建组
    $ groupadd elastic
    # 创建用户及设置密码 -g将新建用户添加到指定分组 -p设置用户密码
    $ useradd elastic -g elastic -p elastic
    # 给目录添加权限
    $ chown -R elastic:elastic /opt/elastic
    # 关闭系统swap交换,发生系统swapping的时候ES节点的性能会非常差,也会影响节点的稳定性。所以要不惜一切代价来避免swapping。swapping会导致Java GC的周期延迟从毫秒级恶化到分钟,更严重的是会引起节点响应延迟甚至脱离集群
    $ swapoff -a
    # 设置操作系统可以无限制分配内存一个进程
    $ ulimit -l unlimited
    # 配置限制
    $ vim /etc/security/limits.conf
    # allow user 'XXX' mlockall
    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 32000
    * hard nproc 32000
    elastic soft memlock unlimited
    elastic hard memlock unlimited
    # 切换用户
    $ su elastic
    # 启动elastisearch
    $ /opt/elastic/node-01/elasticsearch7.0.0/bin/elasticsearch -d
    $ /opt/elastic/node-02/elasticsearch7.0.0/bin/elasticsearch -d
    $ /opt/elastic/node-03/elasticsearch7.0.0/bin/elasticsearch -d
    $ /opt/elastic/node-04/elasticsearch7.0.0/bin/elasticsearch -d
    $ /opt/elastic/node-05/elasticsearch7.0.0/bin/elasticsearch -d
    $ /opt/elastic/node-client/elasticsearch7.0.0/bin/elasticsearch -d

文章作者: 会编程的吕洞宾
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 会编程的吕洞宾 !
  目录