Elasticsearch部署
一、环境准备
- 物理机配置
数量 | 配置 | 操作系统 | 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 |
- 软件信息
JDK版本:1.8
Elasticsearch版本:7.0
二、搭建环境
- 软件环境信息
# 创建目录为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所有软件
- 系统环境准备
❗️ 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