Elasticsearch7.8.1集群安装手册

1. 部署说明

elasticsearch集群规划为三个节点,elasticsearch版本为7.8.1

2. 下载安装包

1)下载 Elasticsearch7.8.1安装包

复制代码
# cd /opt
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz

3. Elasticsearch安装

3.1 解压

复制代码
cd elasticsearch-7.8.1
# tar -zxvf elasticsearch-7.8.1-linux-x86_64.tar.gz

3.2 修改配置

1)jvm.options调整内存大小

复制代码
# vi config/jvm.options
#-Xms4g
#-Xmx4g
-Xms1g
-Xmx1g

2)修改elasticsearch.yml

集群规划为三个节点,三个节点的配置,只有node.name: es-node1 不同,请分别配置

复制代码
node1:
node.name: es-node1
transport.tcp.port: 9300
node2:
node.name: es-node2
transport.tcp.port: 9301
node3:
node.name: es-node3
transport.tcp.port: 9302

具体配置如下

复制代码
# vi config/elasticsearch.yml

#集群名称,三台集群,要配置相同的集群名称
cluster.name: es-cluster
#节点名称
node.name: es-node1
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 3
# 数据和日志存储路径
path.data: /opt/elasticsearch-7.8.1/data
path.logs: /opt/elasticsearch-7.8.1/logs
# 三个节点配置备份路径白名单,此处如果不指定,在备份索引的时候会报错
path.repo: ["/opt/elasticsearch-7.8.1/backup", "/data/esbackup"]
#⽹关地址
network.host: 0.0.0.0
#端⼝
http.port: 9200
#内部节点之间沟通端⼝
transport.tcp.port: 9300
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["10.3.9.202:9300", "10.3.9.203:9301", "10.3.9.204:9302"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]

##末尾添加
indices.memory.index_buffer_size: 40%
thread_pool.write.size: 3
thread_pool.write.queue_size: 1000
indices.fielddata.cache.size:  40%

#允许跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

3.3 创建用户

复制代码
#创建es用户,adduser会在/home目录下会自动创建同名文件夹
# adduser es
#修改es用户密码,接着输入两次密码123456
# passwd es
#给新用户文件夹权限
# chown -R es /opt/elasticsearch-7.8.1

3.4 启动

复制代码
#切换成新建的es用户
# su es
$ cd elasticsearch-7.6.2/
$ ./bin/elasticsearch

3.4.1 排错

cmd 复制代码
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

#修改系统内核参数
#切换到root用户
$ su
#修改limits.conf
# vi /etc/security/limits.conf 
#es : 表示用户,* 表示所有用户
#soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
#hard xxx : 代表严格的设定,不允许超过这个设定的值
#nofile : 是每个进程可以打开的文件数的限制
#nproc  : 是操作系统级别对每个用户创建的进程数的限制
es soft nofile 65536  #es用户可打开的文件描述符的最大数(超过会警告)
es hard nofile 65536  #es用户可打开的文件描述符的最大数(超过会报错)
es soft nproc  4096   #es用户可用的最大进程数量(超过会警告)
es hard nproc  4096   #es用户可用的最大进程数量(超过会报错)

编辑 /etc/security/limits.conf,追加以下内容;
* soft nofile 65536
* hard nofile 65536
此文件修改后需要重新登录用户,才会生效


#修改sysctl.conf,在末尾追加
# vi /etc/sysctl.conf 
vm.max_map_count=262144
#使修改立即生效
# sysctl -p

3.4.2 后台启动

es三个节点配置完成后,分别启动三个节点的elasticsearch进程

cmd 复制代码
#切换成es用户来启动
# su es
$ nohup ./bin/elasticsearch &
#查看控制台
# tail -f nohup.out

#关闭
# ps aux |grep elasticsearch
# kill -9 2382(进程号)

3.5 访问

浏览器请求http://10.3.9.202:9200/、http://10.3.9.203:9200/、http://10.3.9.204:9200/

复制代码
{
  "name" : "es-node1",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "QhAtHT6XQ7yvZAYw8I7qaw",
  "version" : {
    "number" : "7.8.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "b5ca9c58fb664ca8bf9e4057fc229b3396bf3a89",
    "build_date" : "2020-07-21T16:40:44.668009Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

3.5.1 查看es状态

浏览器访问或者curl命令

1)查看集群状态信息

复制代码
http://10.3.9.202:9200/_cluster/stats?pretty
  1. 查看集群健康状态

    http://10.3.9.202:9200/_cluster/health?pretty
    {
    "cluster_name" : "es-cluster",
    "status" : "green",
    "timed_out" : false,
    "number_of_nodes" : 3, ##集群节点数
    "number_of_data_nodes" : 3, ##数据节点数量
    "active_primary_shards" : 0, ##主分片数量
    "active_shards" : 0, ##可用的分片数量
    "relocating_shards" : 0, ##正在重新分配的分片数量,在新加或者减少节点的时候会发生
    "initializing_shards" : 0, ##正在初始化的分片数量,新建索引或者刚启动会存在,时间很短
    "unassigned_shards" : 0, ##没有分配的分片,一般就是那些名存实不存的副本分片。
    "delayed_unassigned_shards" : 0,
    "number_of_pending_tasks" : 0,
    "number_of_in_flight_fetch" : 0,
    "task_max_waiting_in_queue_millis" : 0,
    "active_shards_percent_as_number" : 100.0
    }

集群三种状态

复制代码
green 所有主要分片和复制分片都可用
yellow 所有主要分片可用,但不是所有复制分片都可用。高可用不牢靠。但不会丢失数据
red 不是所有的主要分片都可用。数据有极大风险。数据不能用

3)查看集群状态查看集群将康状态

复制代码
http://10.3.9.202:9200/_cat/health?v

4)集群状态查询

##索引级别集群状态,可以细致查看到底是哪个索引引起集群的故障的

复制代码
GET _cluster/health?level=indices

##分片级别集群状态,可以细致查看到底是哪个分片引起的集群故障

复制代码
GET _cluster/health?level=shards

##阻塞查看集群状态,适用于自动化脚本。当状态变为指定状态或者更好就返回继续执行。

复制代码
GET _cluster/health?wait_for_status=yellow

5)##监控单个节点状态信息,各部分节点数据的解释请参看网址

复制代码
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_monitoring_individual_nodes.html
GET _nodes/stats
  1. 集群状态信息,比第一个更详细

    GET _cluster/stats

7)索引级别的统计信息,比节点级别的统计信息详细。但是并不很实用

复制代码
GET my_index/_stats
GET my_index,another_index/_stats
GET _all/_stats

8)统计 my_index 索引。

使用逗号分隔索引名可以请求多个索引统计值。

使用特定的 _all 可以请求全部索引的统计值

9)单机集群颜色为yellow:

复制代码
curl -XPUT 'http://90.11.35.127:9200/_settings' -H 'content-Type:application/json' -d'
{
"number_of_replicas": 0
}'

4. es集群备份和恢复

4.1 es索引index备份

参考官网文档:

备份集群:https://www.elastic.co/guide/cn/elasticsearch/guide/current/backing-up-your-cluster.html

备份集群使用 snapshot API,集群里当前的状态和数据然后保存到一个共享仓库里。第一个快照会是一个数据的完整拷贝,但是所有后续的快照会保留的是已存快照和新数据之间的差异。

1) 备份前首先创建一个保存数据的仓库。

有多个仓库类型可以选择:

  • 共享文件系统,比如 NAS
  • Amazon S3
  • HDFS (Hadoop 分布式文件系统)
  • Azure Cloud

本次备份方案使用NFS共享存储
2) 挂载nfs存储

所有节点安装nfs-utils

复制代码
# yum install nfs-utils -y
# mkdir -p /data/esbackup/
# mount -t nfs 10.3.9.70:/nfsdata /data/esbackup/
添加到开机启动命令
# vi /etc/fstab
10.3.9.70:/nfsdata      /data/esbackup          nfs     defaults        0 0

修改权限

复制代码
# chown -R es /data/esbackup/

3) 创建snapshot仓库

复制代码
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2021-12-28 -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/esbackup"
    }
}'

参数说明:

  1. 给仓库取一个名字,在本例它叫2021-12-28
  2. 指定仓库的类型是共享文件系统。type:fs // 仓库类型为共享文件系统
  3. 提供一个已挂载的设备作为目的地址。
    注意:共享文件系统路径必须确保集群所有节点都可以访问到。

上述命令会在挂载点创建仓库和所需的元数据。还可以配置节点、网络的性能状况和仓库位置:

复制代码
max_snapshot_bytes_per_sec

当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认是每秒 20mb 。

复制代码
max_restore_bytes_per_sec

当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认是每秒 20mb。

假设有一个非常快的网络,而且对额外的流量带宽很高,那可以增加这些默认值:

复制代码
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2021-12-28 -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/esbackup",
        "max_snapshot_bytes_per_sec": "50mb",
        "max_restore_bytes_per_sec": "50mb"
    }
}'

#列出仓库

复制代码
curl -XGET http://127.0.0.1:9200/_snapshot/*

#删除仓库

复制代码
curl -XDELETE http://127.0.0.1:9200/_snapshot/2021-12-28

创建索引的快照

1、快照的创建

创建快照,默认为异步执行,添加参数wait_for_completion则为同步等待,如下:

复制代码
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
my_backup:仓库名称
snapshot_1:快照名称

2、索引配置

由于es集群环境中一般除了业务数据索引外还会有kibana或监控的索引,所以一般会指定需要快照的索引,如下:

复制代码
PUT _snapshot/my_backup/snapshot_2{
    "indices": "index_1,index_2"
}

3、获取快照相关信息

获取某仓库下的一个或索引的快照信息,如下:

复制代码
GET _snapshot/my_backup/snapshot_2

复制代码
GET _snapshot/my_backup/_all

4、具体创建快照命令

复制代码
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2021-12-28/xx_app_event-2021-12-28?wait_for_completion=true -d '
{
    "indices": "xx_app_event"
}'

备注:请求体中indices指定需要备份的索引(多个用逗号隔开),也可以不指定,这样会备份所有的es索引库数据。

执行后最终返回如下信息表示备份创建成功:

复制代码
{
    "accepted": true
}

#列出快照

复制代码
curl -XGET http://127.0.0.1:9200/_snapshot/2021-12-28/*

#删除快照

复制代码
curl -XDELETE http://127.0.0.1:9200/_snapshot/2021-12-28/xx_app_event-2021-12-28
curl -XDELETE http://127.0.0.1:9200/_snapshot/2021-12-28/xx_app_startup-2021-12-28
curl -XDELETE http://127.0.0.1:9200/_snapshot/2021-12-28/xx_app_switch_menu-2021-12-28

索引恢复

从镜像中恢复快照数据

  1. 查询2021-12-28仓库下的快照信息

    curl -XGET "http://127.0.0.1:9200/_snapshot/2021-12-28/_all?pretty"

    "snapshots" : [
    "snapshot" : "xx_app_event-2021-12-28",
    "snapshot" : "xx_app_startup-2021-12-28",
    "snapshot" : "xx_app_switch_menu-2021-12-28",

  2. 恢复快照数据

  • 为本机恢复
    本机节点恢复数据直接执行如下请求即可

  • 为其他节点恢复
    如果需要对其他节点机器上的es进行数据恢复,
    如果使用nfs共享文件系统,需要在新集群创建仓库 ,然后执行索引还原 即可
    如果不使用nfs共享文件系统,需要将备份出来的索引复制到新集群的服务器 上,然后创建仓库 ,最后执行索引还原命令
    还原命令如下:

    curl -H "Content-Type: application/json" -XPOST 'http://127.0.0.1:9200/_snapshot/2021-12-28/xx_app_event-2021-12-28/_restore' -d '{
    "indices": "xx_app_event"
    }'
    -d 可选参数:
    "rename_pattern": "index_(.+)",
    "rename_replacement": "restored_xx_app_event_index_2021-12-28",
    "index_settings": {
    "index.number_of_replicas": 1
    },
    "ignore_index_settings": [
    "index.refresh_interval"
    ]

可以使用wait_for_completion=true同步获取结果,并且可以使用indices参数指定需要恢复的索引的名称。

使用rename_replacement参数重命名恢复后的索引名称。

4.2索引自动备份脚本

1)索引备份脚本说明

首先在/data/esbackup创建仓库路径、创建snapshot仓库,循环创建三个索引xx_app_event xx_app_startup xx_app_switch_menu的备份

2)具体脚本内容如下

复制代码
#!/bin/bash
ES_BACKUP_DIR=/data/esbackup
DATE_TODAY=`date -d "0 day" +%Y-%m-%d`
INDEX=(xx_app_event xx_app_startup xx_app_switch_menu)
if [[ ! -d ${ES_BACKUP_DIR}/${DATE_TODAY} ]];then
  mkdir -p ${ES_BACKUP_DIR}/${DATE_TODAY}
fi
chown -R es ${ES_BACKUP_DIR}/${DATE_TODAY}
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/${DATE_TODAY} -d '
{
    "type": "fs",
    "settings": {
        "location": "'${ES_BACKUP_DIR}'/'${DATE_TODAY}'",
        "max_snapshot_bytes_per_sec": "50mb",
        "max_restore_bytes_per_sec": "50mb"
    }
}'

if [[ $? == 0 ]];then
  echo "${DATE_TODAY} REPOSITORY CREATE SUCCESS!"
fi

for i in ${INDEX[@]}
do
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/${DATE_TODAY}/${i}-${DATE_TODAY}?wait_for_completion=true -d '
{
    "indices": "'${i}'"
}'
if [[ $? == 0 ]];then
  echo "${i}-${DATE_TODAY} INDEX CREATE SUCCESS!"
fi
done

#--------------snap data compress--------------
cd ${ES_BACKUP_DIR}
tar czvf ${DATE_TODAY}.tg.gz ${DATE_TODAY}
rm -rf ${DATE_TODAY}
cd -
echo "End time: `date +%Y-%m-%d_%H:%m:%S`"

3)执行脚本

复制代码
./es_index_backup.sh 
{"acknowledged":true}2021-12-28 REPOSITORY CREATE SUCCESS!
{"snapshot":{"snapshot":"xx_app_event-2021-12-28","uuid":"vseR_GeyR3WG3CEXAYTiWA","version_id":7080199,"version":"7.8.1","indices":["xx_app_event"],"include_global_state":true,"state":"SUCCESS","start_time":"2021-12-28T15:29:58.640Z","start_time_in_millis":1640705398640,"end_time":"2021-12-28T15:29:58.840Z","end_time_in_millis":1640705398840,"duration_in_millis":200,"failures":[],"shards":{"total":3,"failed":0,"successful":3}}}xx_app_event-2021-12-28 INDEX CREATE SUCCESS!
{"snapshot":{"snapshot":"xx_app_startup-2021-12-28","uuid":"ZfMxQHjsSUKzHAswnsAfVg","version_id":7080199,"version":"7.8.1","indices":["xx_app_startup"],"include_global_state":true,"state":"SUCCESS","start_time":"2021-12-28T15:29:59.040Z","start_time_in_millis":1640705399040,"end_time":"2021-12-28T15:29:59.040Z","end_time_in_millis":1640705399040,"duration_in_millis":0,"failures":[],"shards":{"total":3,"failed":0,"successful":3}}}xx_app_startup-2021-12-28 INDEX CREATE SUCCESS!
{"snapshot":{"snapshot":"xx_app_switch_menu-2021-12-28","uuid":"vt9LZ48USm2eO3b-bVdk6w","version_id":7080199,"version":"7.8.1","indices":["xx_app_switch_menu"],"include_global_state":true,"state":"SUCCESS","start_time":"2021-12-28T15:29:59.240Z","start_time_in_millis":1640705399240,"end_time":"2021-12-28T15:29:59.240Z","end_time_in_millis":1640705399240,"duration_in_millis":0,"failures":[],"shards":{"total":3,"failed":0,"successful":3}}}xx_app_switch_menu-2021-12-28 INDEX CREATE SUCCESS!

4)设置定时任务

定时任务设置每天的23点01分执行

编辑定时任务

复制代码
crontab -e
写入如下内容
01 23 * * *

4.3 配置优化,修改search.max_buckets

通过 API 调用的方式动态进行配置

复制代码
# curl  -XPUT "http://10.3.9.202:9200/_cluster/settings" -H "Content-Type:application/json" -d   "{\"persistent\":{\"search.max_buckets\":100000}}"

调整es集群三个节点的max_buckets配置

复制代码
curl  -XPUT "http://90.11.35.182:9200/_cluster/settings" -H "Content-Type:application/json" -d   "{\"persistent\":{\"search.max_buckets\":524288}}"

curl  -XPUT "http://90.11.35.71:9200/_cluster/settings" -H "Content-Type:application/json" -d   "{\"persistent\":{\"search.max_buckets\":524288}}"

curl  -XPUT "http://90.11.35.56:9200/_cluster/settings" -H "Content-Type:application/json" -d   "{\"persistent\":{\"search.max_buckets\":524288}}"
相关推荐
yongui4783417 小时前
CentOS系统如何查看当前内存容量
linux·运维·centos
xzq_java17 小时前
CentOS操作系统虚拟机安装以及连接工具下载和远程连接工具远程连接
linux·运维·centos
赵孝正17 小时前
GitLab 分支管理与 Push 问题全解析
大数据·elasticsearch·gitlab
ZLRRLZ18 小时前
【Docker】Docker安装
运维·docker·容器
逐梦吧!旅行者18 小时前
Linux之环境变量(内容由浅入深,层层递进)
linux·运维
挨踢攻城18 小时前
Linux 应急响应实操 Checklist
linux·运维·linux命令·rhce·rhca·厦门微思网络·linux 应急响应
wanhengidc18 小时前
什么是云手机?
运维·网络·安全·游戏·智能手机
optiz19 小时前
细菌基因组genome二代测序数据分析
linux·运维·服务器
一刀到底21119 小时前
springboot3.3.5 集成elasticsearch8.12.2 ssl 通过 SSL bundle name 来实现
网络·elasticsearch·ssl·springboot3
Elasticsearch19 小时前
Elasticsearch:智能搜索的 MCP
elasticsearch