Elasticsearch7.10集群搭建

Elasticsearch详细介绍:

Elasticsearch 是一个分布式、RESTful 风格的搜索和分析引擎。它的核心基于 Apache Lucene,能够处理海量的数据,并支持实时的全文搜索。以下是关于 Elasticsearch 的详细介绍。

一、基本概念
  1. 索引(Index):索引是 Elasticsearch 中的一个基本单位,类似于关系型数据库中的数据库。每个索引包含多种类型的文档(在 7.x 之前)。在 7.x 之后,一个索引只能包含一种类型的文档。

  2. 文档(Document):文档是 Elasticsearch 中最小的数据单元,存储在索引中,类似于关系型数据库中的行。每个文档用 JSON 格式表示,包含多个字段和对应的值。

  3. 分片(Shard):索引可以分成多个分片,每个分片是一个独立的 Lucene 实例。分片允许数据水平扩展,分布在集群中的多个节点上。

  4. 副本(Replica):每个分片可以有多个副本,副本用于提高数据的可用性和查询性能。当主分片出现故障时,副本分片可以保证数据的高可用性。

二、核心功能
  1. 全文搜索:Elasticsearch 提供强大的全文搜索能力,支持复杂的查询和过滤条件,能够处理自然语言文本,并支持分词、同义词扩展等功能。

  2. 实时数据处理:Elasticsearch 支持实时索引和查询,适用于需要快速响应的大数据处理场景。

  3. 分布式架构:通过分片和副本机制,Elasticsearch 能够在集群中分布和管理数据,提供高可用性和可扩展性。

  4. RESTful API:Elasticsearch 通过 RESTful API 提供与外部系统的交互接口,支持常见的 HTTP 方法(如 GET、POST、PUT、DELETE),方便集成。

  5. 聚合分析:支持复杂的聚合操作,如统计、分组、求和、平均等,能够对大规模数据进行实时分析。

三、主要组件
  1. Elasticsearch Core:核心组件,负责数据存储、索引、查询等基本功能。

  2. Kibana:数据可视化工具,与 Elasticsearch 集成,用于创建图表、仪表盘、报表等,方便用户进行数据分析和展示。

  3. Logstash:数据收集和处理管道,支持从多种数据源采集数据,进行过滤、变换,然后输出到 Elasticsearch。

  4. Beats:轻量级的数据采集器家族,包括 Filebeat、Metricbeat、Packetbeat 等,用于将不同类型的数据发送到 Logstash 或 Elasticsearch。

四、使用场景
  1. 日志和事件数据分析:通过 Logstash 和 Beats,Elasticsearch 可以收集和分析日志数据,提供实时监控和故障排查。

  2. 全文搜索引擎:适用于构建网站内部搜索引擎、文档管理系统等,提供快速、精准的全文搜索能力。

  3. 实时数据分析:通过 Kibana,用户可以对数据进行可视化分析,适用于各种实时数据监控和分析场景,如监控系统性能、用户行为分析等。

  4. 大数据处理:利用 Elasticsearch 的分布式架构,可以处理海量数据,并支持复杂的查询和聚合操作。

Elasticsearch各版本比较:

优缺点Elasticsearch 6.x 系列Elasticsearch 7.x 系列
优点强大的分词和搜索能力:提供多种分词器和搜索功能,适用于不同语言和需求。
滚动升级:支持从5.x到6.x的滚动升级,简化了升级过程。
跨集群复制:允许在多个Elasticsearch集群之间复制索引,增加了数据的可用性和冗余。更加优化的性能:预计在查询、索引和聚合性能方面有进一步优化。
更好的安全性:更多的安全功能和改进,使得数据更加安全。
云原生支持:对云原生环境的支持更好,方便在各种云平台上部署和管理。
自动化和简化运维:更多的自动化运维功能,减少手动干预,提高稳定性和可维护性。
缺点类型删除:Elasticsearch 6.x 开始移除了类型功能,虽然简化了映射但对某些应用造成了影响。
性能问题:与7.x相比,某些查询和索引性能较低。兼容性问题:新版本可能会引入一些不向下兼容的变更,需要在升级前进行充分的评估和测试。
学习曲线:新功能和新特性可能需要学习和适应,尤其对于现有用户来说。

Elasticsearch集群搭建:

一、环境配置
角色IP地址操作系统
master99.99.10.30CentOS Linux release 7.9.2009 (Core)
slave99.99.10.31CentOS Linux release 7.9.2009 (Core)
slave99.99.10.32CentOS Linux release 7.9.2009 (Core)
# Elasticsearch 不能以 root 用户运行,创建一个新用户并赋予适当权限。
sudo adduser es
​
sudo passwd 123456
​
sudo usermod -aG sudo es
# 调整 vm.max_map_count 参数,以满足 Elasticsearch 的需求。
sudo sysctl -w vm.max_map_count=262144
​
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
# 增加文件描述符限制。
sudo echo "elasticsearch - nofile 65535" | sudo tee -a /etc/security/limits.conf
​
sudo echo "elasticsearch - nproc 4096" | sudo tee -a /etc/security/limits.conf
# 调整内存锁定:
sudo echo "elasticsearch soft memlock unlimited" | sudo tee -a /etc/security/limits.conf
​
sudo echo "elasticsearch hard memlock unlimited" | sudo tee -a /etc/security/limits.conf
# 安装java
sudo yum install java-11-openjdk-devel -y
​
# 配置 JAVA_HOME 环境变量(在.bash_profile 文件,添加以下内容)
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
​
# 然后重新加载配置:
source ~/.bashrc
​
#检查Java版本
java -version
​
openjdk version "11.0.23" 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS, mixed mode, sharing)
二、安装elasticsearch

es官方下载地址,es和kibana尽量下载同一版本

elasticsearch各版本下载地址

    https://www.elastic.co/cn/downloads/past-releases#elasticsearch

kibana (es的可视化管理工具)

    https://www.elastic.co/cn/downloads/past-releases/#kibana
# 解压elasticsearch包到/usr/local/下面:
tar -zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz -C /usr/local/
​
#将elasticsearch-7.10.0重命名为es
cd /usr/local/
mv elasticsearch-7.10.0 es
​
# 这个文件夹用于存储 Elasticsearch 的数据,它将所有的索引数据和相关元数据存储在这个目录中
mkdir -p /data/elasticsearch_data/data
# 这个文件夹用于存储 Elasticsearch 的日志文件,记录了 Elasticsearch 的运行状态、错误信息和性能指标。
mkdir -p /data/elasticsearch_data/logs
​
sudo chown -R es:es /data/elasticsearch_data
sudo chmod -R 755 /data/elasticsearch_data
​
# 这个文件夹用于存储 Elasticsearch 的备份数据。
mkdir -p /opt/backup/es
mkdir -p /opt/backup/es1
​
sudo chown -R es:es /opt/backup/
sudo chmod -R 755 /opt/backup/
三、配置elasticsearch

1.先搭建单个节点,再复制到其他节点:

path.data: /opt/data
path.logs: /opt/logs
 
#http访问端口,程序或kibana使用
http.port: 9200
 
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# 尝试启动
./bin/elasticsearch

设置安全账号信息(ES要启动状态):

  • 执行以下命令,给各账号设置密码(演示使用的密码都为:123456), 整个集群只需要设置一次即可

  • 警告:设置账户密码切记要在单实例非集群模式时配置,不能添加任何集群的配置,否则会设置失败

./bin/elasticsearch-setup-passwords interactive

2.集群配置:

cluster.name: elasticsearch

node.name: node1

path.data: /data/elasticsearch_data/data

path.logs: /data/elasticsearch_data/logs

#数据备份和恢复使用,可以一到多个目录
path.repo: ["/opt/backup/es", "/opt/backup/es1"]

http.port: 9200

#是否可以参与选举主节点
node.master: true

#是否是数据节点
node.data: true

#允许访问的ip,4个0的话则允许任何ip进行访问
network.host: 0.0.0.0

#es各节点通信端口
transport.tcp.port: 9300

#集群每个节点IP地址。
discovery.seed_hosts: ["99.99.10.30:9300", "99.99.10.31:9300", "99.99.10.32:9300"]

#es7.x新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1", "node2", "node3"]

#配置是否压缩tcp传输时的数据,默认为false,不压缩
transport.tcp.compress: true

# 是否支持跨域,es-header插件使用
http.cors.enabled: true

# *表示支持所有域名跨域访问
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length

#集群模式开启安全 https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-minimal-setup.html
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.keystore.password: "123456"
xpack.security.transport.ssl.truststore.password: "123456"

#默认为1s,指定了节点互相ping的时间间隔。
discovery.zen.fd.ping_interval: 1s

#默认为30s,指定了节点发送ping信息后等待响应的时间,超过此时间则认为对方节点无响应。
discovery.zen.fd.ping_timeout: 30s

#ping失败后重试次数,超过此次数则认为对方节点已停止工作。
discovery.zen.fd.ping_retries: 3
四、复制elasticsearch到其他节点
scp -r /usr/local/es/ root@99.99.10.31:/usr/local/
scp -r /usr/local/es/ root@99.99.10.32:/usr/local/

sudo chown -R es:es /usr/local/es/
sudo chmod -R 755 /usr/local/es/
五、测试elasticsearch集群
# 切换到es用户
su es

# 启动es
cd /usr/local/es/
./bin/elasticsearch

# 查看集群信息
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cluster/health?pretty"
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 1,
  "active_shards" : 2,
  "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
}

这个 JSON 响应显示了 Elasticsearch 集群的健康状态及其一些关键指标。

集群基本信息

  • cluster_name: "elasticsearch"

    • 集群的名称。这是你在 elasticsearch.yml 配置文件中指定的名称。

集群健康状态

  • status: "green"

    • 集群的健康状态。可能的状态有三种:

      • green: 所有主分片和副本分片都是可用的。

      • yellow: 所有主分片都是可用的,但有一些副本分片不可用。

      • red: 有一些主分片不可用。

  • timed_out: false

    • 表示查询是否超时。false 表示查询在规定时间内完成。

节点和分片信息

  • number_of_nodes: 3

    • 集群中的节点总数。这里表示集群中有 3 个节点。

  • number_of_data_nodes: 3

    • 集群中的数据节点总数。数据节点存储数据并处理搜索请求。这里表示所有 3 个节点都是数据节点。

分片状态

  • active_primary_shards: 1

    • 当前活动的主分片数量。主分片是实际存储数据的分片。

  • active_shards: 2

    • 当前活动的总分片数量,包括主分片和副本分片。这里有 1 个主分片和 1 个副本分片。

  • 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

    • 当前活动分片占所有分片的百分比。100% 表示所有分片都是活动的,没有分片是未分配的或初始化中的。

# 创建一个索引看集群中每个节点索引数据
curl -XPUT -u elastic:123456 "http://127.0.0.1:9200/test-index"

curl -XGET -u elastic:123456  "http://localhost:9200/_cat/indices?pretty"
green open test-index  _hNfQpNqTZWAsPKrqa51XA 1 1 0 0   416b   208b
green open .security-7 L6YSY_F0Sl207ijttvv4CQ 1 1 7 0 51.5kb 25.7kb
六、安装kibana和es-header插件:
# 下载kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-linux-x86_64.tar.gz

# 解压到/usr/local/,并重命名为kibana
tar -zxvf kibana-7.10.0-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
mv kibana-7.10.0-linux-x86_64/ kibana
# 配置kibana,并加入下面的配置
vim /usr/local/kibana/config/kibana.yml
--------------------------------------
#设置为中文
i18n.locale: "zh-CN"
#允许其它IP可以访问
server.host: "0.0.0.0"
elasticsearch.username: "kibana_system"
elasticsearch.password: "elastic123"
#es集群地址,填写真实的节点地址
elasticsearch.hosts: ["http://xxx.xx.xx.xx:9200","http://xxx.xx.xx.xx:9200","http://xxx.xx.xx.xx:9200"]
--------------------------------------
# 启动kibana
cd /usr/local/kibana/

./bin/kibana

es-head安装如下面的官方文档所示:

GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster

Elasticsearch如何合理的设置分片:

一、什么是分片

在 Elasticsearch 中,索引是由一个或多个分片组成的。每个分片是一个完整的 Lucene 索引,独立存储数据并执行搜索操作。通过分片,Elasticsearch 可以将数据分布到多个节点上,从而提高系统的吞吐量和容错能力。

二、分片的类型

主分片(Primary Shard)

  • 每个索引默认包含的分片。

  • 数据首先写入主分片,然后再复制到副本分片。

  • 主分片的数量在索引创建时确定,之后不能更改。

副本分片(Replica Shard)

  • 主分片的副本,用于提高数据的高可用性和搜索性能。

  • 默认情况下,每个主分片有一份副本分片。

  • 可以动态调整副本的数量。

三、分片的工作原理

数据分布:当你向 Elasticsearch 索引文档时,Elasticsearch 会根据文档的 ID 计算一个哈希值,并根据这个哈希值决定将文档存储到哪个主分片。这种方式确保了文档在主分片间的均匀分布。

数据存储:当你向 Elasticsearch 索引文档时,Elasticsearch 会根据文档的 ID 计算一个哈希值,并根据这个哈希值决定将文档存储到哪个主分片。这种方式确保了文档在主分片间的均匀分布。

数据存储:每个分片是一个独立的 Lucene 索引,包含多个倒排索引。这些倒排索引用于高效的全文搜索。分片将文档分成多个段(segment),每个段是一个不可变的索引文件。随着文档的添加,新的段会不断创建,旧的段会被合并以优化性能和存储空间。

数据副本:副本分片存储在不同的节点上,以防止单点故障。如果一个主分片节点故障,Elasticsearch 可以将副本分片升级为主分片,并继续提供服务。副本分片不仅用于故障恢复,还可以分担搜索请求的负载,从而提高查询性能。

请求处理

  1. 写请求(Indexing Request)

    • 写请求首先发送到主分片。

    • 主分片将数据写入自身,然后将数据复制到对应的副本分片。

    • 所有分片都成功写入后,返回确认响应。

  2. 读请求(Search Request)

    • 读请求可以发送到任意一个副本分片,包括主分片。

    • 通过这种方式,读请求可以被均衡地分配到所有分片,提高查询性能。

四、分片的优点

水平扩展:通过增加分片和节点,可以轻松扩展 Elasticsearch 集群以处理更多数据和更高的查询负载。

高可用性:通过副本分片,Elasticsearch 提供了数据冗余,确保在节点故障时数据不会丢失。

高性能:分片使得搜索和索引请求可以并行处理,提高了系统的吞吐量。

五、分片如何设置
  1. 分片的官方建议

1、分片过小会导致段过小,进而致使开销增加。您要尽量将分片的平均大小控制在至少几 GB 到几十 GB 之间。
对时序型数据用例而言,分片大小通常介于 20GB 至 40GB 之间。
 
2、由于单个分片的开销取决于段数量和段大小,所以通过 forcemerge 操作强制将
较小的段合并为较大的段能够减少开销并改善查询性能。理想状况下,
应当在索引内再无数据写入时完成此操作。请注意:这是一个极其耗费资源的操作,
所以应该在非高峰时段进行。 
 
3、每个节点上可以存储的分片数量与可用的堆内存大小成正比关系,但是 Elasticsearch并未
强制规定固定限值。这里有一个很好的经验法则:确保对于节点上已配置的每个 GB,将分片数量
保持在 20 以下。如果某个节点拥有 30GB 的堆内存,那其最多可有 600 个分片,但是在此限值范围内,
您设置的分片数量越少,效果就越好。一般而言,这可以帮助集群保持良好的运行状态。
(编者按:从 8.3 版开始,我们大幅减小了每个分片的堆使用量,
因此对本博文中的经验法则也进行了相应更新。请按照以下提示了解 8.3+ 版本的 
Elasticsearch。)
  1. 在网上总结的:

每个分片的数据量不超过最大JVM堆空间设置,一般不超过32G。如果一个索引大概500G,那分片大概在16个左右比较合适。

单个索引分片个数一般不超过节点数的3倍,推荐是1.5 ~ 3倍之间。假如一个集群3个节点,根据索引数据量大小分片数在5-9之间比较合适。

主分片、副本和节点数,分配时也可以参考以下关系:节点数<= 主分片数 * (副本数 +1 )
  1. 创建索引时指定分片数量:

PUT /my_index
{
  "settings": {
    "index": {
      "number_of_shards": 3,
      "number_of_replicas": 1
    }
  }
}

Elasticsearch常用操作命令:

# es启动:

./bin/elasticsearch

# 访问地址:http://localhost:9200/ 默认9200端口

# Kibana 启动:

./bin/Kibana

# 访问地址:http://localhost:5600/ 默认5600端口
# 查看集群状态
# 检查集群运行情况: 
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cat/health?v"

# 查看集群节点列表: 
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cat/nodes"

# 查看所有索引:       
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cat/indices?v"
# 索引操作API
# 1.查询查看分片状态-Authorization方式(postman通过账密获取token)
curl -XGET ‘http://127.0.0.1:9200/_cluster/allocation/explain?pretty’ --header ‘Authorization’: Basic ZWxhc3RpYzphcDIwcE9QUzIw’
 
# 2.查询查看分片状态-账密方式
curl -XGET -u elastic "http://127.0.0.1:9200/_cluster/allocation/explain?pretty" -H ‘Content-Type:application/json’
 
# 3.查询集群状态命令
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cluster/health?pretty"
 
# 4.查询Es全局状态
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cluster/stats?pretty"
 
# 5.查询集群设置
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cluster/settings?pretty"
 
# 6.查询集群文档总数
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cat/count?v"
 
# 7.查看当前集群索引分片信息
curl -XGET -u elastic:123456 "http://127.0.0.1:9200/_cat/shards?v"
 
# 8.查看集群实例存储详细信息
curl -XGET -u elastic "http://127.0.0.1:9200/_cat/allocation?v"
 
# 9.查看当前集群的所有实例
curl -XGET -u elastic "http://127.0.0.1:9200/_cat/nodes?v"
 
# 10.查看当前集群等待任务
curl -XGET -u elastic "http://127.0.0.1:9200/_cat/pending_tasks?v"
 
# 11.查看集群查询线程池任务
curl -XGET -u elastic "http://127.0.0.1:9200/_cat/thread_pool/search?v"
 
# 12.查看集群写入线程池任务
curl -XGET -u elastic "http://127.0.0.1:9200/_cat/thread_pool/bulk?v"
 
# 13.清理ES所有缓存
curl -XPOST "http://127.0.0.1:9200/_cache/clear"
 
# 14.查询索引信息
curl -XGET -u : ‘https://127.0.0.1:9200/licence_info_test?pretty’
 
# 15.关闭索引
curl -XGET -u : ‘https://127.0.0.1:9200/my_index/_close?pretty’
 
# 16.打开索引
curl -XGET -u : ‘https://127.0.0.1:9200/my_index/_open?pretty’

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值