首页 > 系统相关 >ElasticSearch-03-集群核心概念(Windows集群)

ElasticSearch-03-集群核心概念(Windows集群)

时间:2023-06-24 18:11:35浏览次数:34  
标签:node 03 Windows 集群 分片 master data 节点

Windows集群安装(es版本7.10.1)

1.安装

1,解压elasticsearch-7.10.1-windows-x86_64.zip,复制出3个文件夹,重命名为node01、node02、node03

2,修改配置文件elasticsearch.yml

注意:7.10.1版本和之前集群配置不一样,在网上搜的可能是老版本配置会导致集群搭建失败
node01:

#集群名称,节点之间要保持一致
cluster.name: lhy-es
#节点名称,集群内要唯一
node.name: node-1

#http 端口
http.port: 9200
#ip 地址
network.host: 127.0.0.1
#tcp 监听端口
transport.tcp.port: 9300
#
#默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
#这些功能是由两个属性控制的:node.master和node.data,默认情况下这两个属性的值都是true。
node.master: true
node.data: true
#
#主机发现,这里配置其他的节点主机名称或者IP,不需要配置自己这台主机的IP,只需要提供其他节点的IP或主机名
#例如: discovery.seed_hosts: ["192.168.0.128", "192.168.0.129", "192.168.0.130"]
discovery.seed_hosts: ["127.0.0.1:9301", "127.0.0.1:9302"]
#
# 可选选举为主节点的节点主机名
# 这里需要填入所有主机名称,这里填入了所有的节点
# 表示集群中任何一个节点都可以选举称为主节点
cluster.initial_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]

node02

#集群名称,节点之间要保持一致
cluster.name: lhy-es
#节点名称,集群内要唯一
node.name: node-2

#http 端口
http.port: 9201
#ip 地址
network.host: 127.0.0.1
#tcp 监听端口
transport.tcp.port: 9301
#
#默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
#这些功能是由两个属性控制的:node.master和node.data,默认情况下这两个属性的值都是true。
node.master: true
node.data: true
#
#主机发现,这里配置其他的节点主机名称或者IP,不需要配置自己这台主机的IP,只需要提供其他节点的IP或主机名
#例如: discovery.seed_hosts: ["192.168.0.128", "192.168.0.129", "192.168.0.130"]
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9302"]
#
# 可选选举为主节点的节点主机名
# 这里需要填入所有主机名称,这里填入了所有的节点
# 表示集群中任何一个节点都可以选举称为主节点
cluster.initial_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]

node03

#集群名称,节点之间要保持一致
cluster.name: lhy-es
#节点名称,集群内要唯一
node.name: node-3

#http 端口
http.port: 9202
#ip 地址
network.host: 127.0.0.1
#tcp 监听端口
transport.tcp.port: 9302
#
#默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
#这些功能是由两个属性控制的:node.master和node.data,默认情况下这两个属性的值都是true。
node.master: true
node.data: true
#
#主机发现,这里配置其他的节点主机名称或者IP,不需要配置自己这台主机的IP,只需要提供其他节点的IP或主机名
#例如: discovery.seed_hosts: ["192.168.0.128", "192.168.0.129", "192.168.0.130"]
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
#
# 可选选举为主节点的节点主机名
# 这里需要填入所有主机名称,这里填入了所有的节点
# 表示集群中任何一个节点都可以选举称为主节点
cluster.initial_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]


写一个启动脚本 start.bat

start D:\Z_lhy\ES\es-cluster\node01\bin\elasticsearch.bat
start D:\Z_lhy\ES\es-cluster\node02\bin\elasticsearch.bat
start D:\Z_lhy\ES\es-cluster\node03\bin\elasticsearch.bat

配置文件注意事项
**1. 集群名称cluster.name 和 节点名称node.name **

集群名称默认情况下集群名为elasticsearch,为了区分不同集群,在生产环境需要进行修改。每个节点需要配置相同的集群名才能加入同一个集群中,

节点名称默认情况下节点名称是操作系统的主机名,在Linux下使用hostname -f可查看主机名。也可通过elasticsearch.yml 配置文件显示的配置,使可读性更好。
2. 在单台windows上安装集群,http.port 和 transport.tcp.port 要修改的不一样。

3. node.master、node.data是elasticsearch节点的角色信息

  默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的。node.master和node.data默认情况下这两个属性的值都是true。

下面详细介绍一下这两个属性的含义以及不同组合可以达到的效果。
node.master:这个属性表示节点是否具有成为主节点的资格,注意:此属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。所以,这个属性只是代表这个节点是不是具有主节点选举资格。
node.data:这个属性表示节点是否存储数据。

这两个属性可以有四种组合:
● 第一种:主节点和数据节点的角色混合
■ node.master: true
■ node.data: true
这种组合表示这个节点即有成为主节点的资格,又存储数据,
这个时候如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。
elasticsearch默认每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,
这样相当于主节点和数据节点的角色混合到一块了。

● 第二种:data(数据)节点
○ node.master: false
○ node.data: true
这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。
这个节点我们称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务。
● 第三种:master节点
○ node.master: true
○ node.data: false
这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。
这个节点我们称为master节点
● 第四种:client(客户端)节点
○ node.master: false
○ node.data: false
这种组合表示这个节点即不会成为主节点,也不会存储数据,
这个节点的意义是作为一个client(客户端)节点,主要是针对海量请求的时候可以进行负载均衡。

默认情况下,每个节点都有成为主节点的资格,也会存储数据,还会处理客户端的请求。
在一个生产集群中我们可以对这些节点的职责进行划分。
建议集群中设置3台以上的节点作为master节点【node.master: true node.data: false】
这些节点只负责成为主节点,维护整个集群的状态。
再根据数据量设置一批data节点【node.master: false node.data: true】
这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大
所以在集群中建议再设置一批client节点【node.master: false node.data: true】
这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。
● master节点:普通服务器即可(CPU 内存 消耗一般) data节点:主要消耗磁盘,内存 client节点:普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)

4.discovery.seed_hosts

主机发现,这里只配置其他的节点主机名称或者IP,不需要配置自己这台主机的IP,只需要提供其他节点的IP或主机名,配置方式有几种:
discovery.seed_hosts:

  • 192.168.1.10:9300 ①
  • 192.168.1.11 ②
  • seeds.mydomain.com ③
  • [2001:0db8:85a3:0000:0000:8a2e:0370:7334]:9300 ④
    其中①直接指定主机ip和端口;
    ②指定了主机ip,使用默认的端口。默认端口的设置由transport.profiles.default.port和transport.port端口设置,前者优先级高于后者;
    ③指定了主机hostname,需要使用dns解析成ip地址,并使用默认端口;
    ④ip v6地址形式
    本次安装是用一台机器,所以用带有端口好的配置方式。

5.cluster.initial_master_nodes:初始主节点是哪些

可选选举为主节点的节点主机名,这里需要填入所有主机名称,这里填入了所有的节点,表示集群中任何一个节点都可以选举称为主节点
当开启一个全新的集群时,会有一个集群的引导步骤,这步骤用来确定哪些节点参与第一次的主节点选举。在开发模式下,这个步骤由节点自动完成,这种模式本质上是不安全的,因为不是所有节点都适合做主节点,主节点关系到集群的稳定性。因此在生产模式下,集群第一次启动时,需要有一个适合作为主节点的节点列表,这个列表就是通过cluster.initial_master_nodes来配置,在配置中需要写出具体的节点名称,对应node.name配置项。配置示例如下

cluster.initial_master_nodes: 
   - master-node-a
   - master-node-b
   - master-node-c

6.本地实验,先不配置data和log目录。这两个配置的目录分别用来存放索引数据和日志,它们的默认路径位于$_ES_HOME的子文件夹内。这样有很大风险,特别是在升级Elasticsearch版本时,这些数据很可能被删除,在生产环境中可参考下面的配置
path: logs: /var/log/elasticsearch data: /var/data/elasticsearch

另外path.data支持配置多个目录,每个目录都会用来存放数据,但是单个分片会存放在同一个目录内,多目录配置参考

path:  data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3

7.网络地址 network.host

启动验证

运行批处理文件 startup.bat,启动集群,看到nodeX started 启动成功

用Header插件看

由于此时节点中一个索引都还没有,所以它的健康值是green (0 of 0).

2.Elasticsearch集群架构介绍

对于用户来说, ES是一个无中心化的集群,ES集群内部运行原理是对外面来说是透明的。你操作一个节点跟操作一个集群是一样的。也就是说,ES集群没有中心节点,任何一个节点出现故障都不会影响其它节点。这是由ES本身特性所决定的。这是它的典型特征。但是通过集群内部来看ES是有节点的。

在ElasticSearch的架构中,有三类角色,分别是Client Node、Data Node和Master Node,搜索查询的请求一般是经过Client Node来向Data Node获取数据,而索引查询首先请求Master Node节点,然后Master Node将请求分配到多个Data Node节点完成一次索引查询。

Master Node:可以理解为主节点,用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等,以及管理集群各个节点的状态包括集群节点的协调、调度。elasticsearch集群中可以定义多个主节点,但是,在同一时刻,只有一个主节点起作用,其它定义的主节点,是作为主节点的候选节点存在。当一个主节点故障后,集群会从候选主节点中选举出新的主节点。也就是说,主节点的产生都是由选举产生的。Master节点它仅仅是对索引的管理、集群状态的管理。像其它的对数据的存储、查询都不需要经过这个Master节点。因此在ES集群中。它的压力是比较小的。所以,我们在构建ES的集群当中,Master节点可以不用选择太好的配置,但是我们一定要保证服务器的安全性。因此,必须要保证主节点的稳定性。
Data Node: 存储数据的节点,数据的读取、写入最终的作用都会落到这个上面。数据的分片、搜索、整合等 这些操作都会在数据节点来完成。因此,数据节点的操作都是比较消耗CPU、内存、I/O资源。所以,我们在选择data Node数据节点的时候,硬件配置一定要高一些。高的硬件配置可以获得高效的存储和分析能力。因为最终的结果都是需要到这个节点上来。
Client Node:可选节点。作任务分发使用。它也会存储一些元数据信息,但是不会对数据做任何修改,仅仅用来存储。它的好处是可以分担datanode的一部分压力。因为ES查询是两层汇聚的结果,第一层是在datanode上做查询结果的汇聚。然后把结果发送到client Node 上来。Cllient Node收到结果后会再做第二次的结果汇聚。然后client会把最终的结果返回给用户。
那么从上面的结构图我们可以看到ES集群的工作流程:
1,搜索查询,比如Kibana去查询ES的时候,默认走的是Client Node。然后由Client Node将请求转发到datanode上。datanode上的结构返回给client Node.然后再返回给客户端。
2,索引查询,比如我们调用API去查询的时候,走的是MasterNode,然后由master 将请求转发到相应的数据节点上,然后再由Master将结果返回。
3,最终我们都知道,所有的服务请求都到了datanode上。所以,它的压力是最大的。

集群节点角色

每个节点就是一个Elasticsearch的实例,一个节点≠一台服务器

● master:候选节点
● data:数据节点
● data_content:数据内容节点
● data_hot:热节点
● data_warm:索引不再定期更新,但仍可查询
● data_code:冷节点,只读索引
● Ingest:预处理节点,作用类似于Logstash中的Filter
● ml:机器学习节点
● remote_cluster_client:候选客户端节点
● transform:转换节点
● voting_only:仅投票节点

主节点(Master node)

● 负责集群层面的相关操作,管理集群变更,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。
● 主节点也可以作为数据节点
● 主节点是全局唯一的,将从有资格成为Master的节点中选举,通过配置node.master:true(默认)使节点具有被选举为Master的资格。
○ node.master:true
○ node.data:false

数据节点

● 数据节点主要是存储索引数据的节点,执行数据相关操作:CRUD、搜索,聚合操作等。数据节点对cpu,内存,I/O要求较高, 在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
● 通过配置node.data:true(默认)
○ node.master:false
○ node.data:true
○ node.ingest:false

预处理节点

预处理操作运行在索引文档之前,即写入数据之前,通过事先定义好的一系列processors(处理器)和pipeline(管道),对数据进行某种转换、富化。processors和pipeline拦截bulk和index请求,在应用相关操作后将文档传回给index或bulk API。
默认情况下,在所有的节点启用ingest。如果想在某个节点上禁用ingest,则可以田间配置node.ingest:false,也可以通过下面的配置创建一个仅用于预处理的节点:
○ node.master:false
○ node.data:false
○ node.ingest:true

数据分片

● 一个索引包含一个或多个分片,在7.0之前默认五个主分片,每个主分片一个副本;在7.0之后默认一个主分片。副本可以在索引创建之后修改数量,但是主分片的数量一旦确定不可修改,只能创建索引
● 每个分片都是一个Lucene实例,有完整的创建索引和处理请求的能力
● ES会自动再nodes上做分片均衡
● 一个doc不可能同时存在于多个主分片中,但是当每个主分片的副本数量不为一时,可以同时存在于多个副本中。
● 每个主分片和其副本分片不能同时存在于同一个节点上,所以最低的可用配置是两个节点互为主备。

实验

1,新建一个3个分片,每个分片有1个副本的索引

五角星代表是Master节点,数字外粗边框【1】代表是主分片,细边框代表是副本分片

每个节点内数据分布如下:

2,新建一个2个分片,每个分片2个副本的索引

node03是Master节点,两个分片【0】【1】,每个分片除了自己,有两个副本,分散在其他节点。

集群的健康值检查

shopping有 3 个主分片,0个副本,都被分配在 node-1 ,绿色表示主分片和副本分片都健康。
集群健康状况:

(1) 健康值状态
① Green:所有Primary和Replica均为active,集群健康
② Yellow:至少一个Replica不可用,但是所有Primary均为active,数据仍然是可以保证完整性的。
③ Red:至少有一个Primary为不可用状态,数据不完整,集群不可用。
(2) 健康值检查
① _cat/health?v
② _cluster/health

primary shard:主分片,每个文档都存储在一个分片中,当你存储一个文档的时候,系统会首先存储在主分片中,然后会复制到不同的副本中。你可以在事先制定分片的数量,当分片一旦建立,分片的数量则不能修改。

replica shard:副本分片,每一个分片有零个或多个副本。副本主要是主分片的复制,可以 增加高可用性,提高性能。
默认情况下,一个主分配有一个副本,但副本的数量可以在后面动态的配置增加。
副本必须部署在不同的节点上,不能部署在和主分片相同的节点上。

实践
http://localhost:9200/_cat/health?v

含义如下:
前两个是时间戳,不过多介绍。其余如下:

cluster ,集群名称
status,集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
node.total,代表在线的节点总数量
node.data,代表在线的数据节点的数量
shards, active_shards 存活的分片数量
pri,active_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍。
relo, relocating_shards 迁移中的分片数量,正常情况为 0
init, initializing_shards 初始化中的分片数量 正常情况为 0
unassign, unassigned_shards 未分配的分片 正常情况为 0
pending_tasks,准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time,任务最长等待时间
active_shards_percent,正常分片百分比 正常情况为 100%

集群状态查询GET _cluster/health

{
 "cluster_name" : "lhy-es",
 "status" : "green",
 "timed_out" : false,
 "number_of_nodes" : 3,
 "number_of_data_nodes" : 3,
 "active_primary_shards" : 6, #集群中的主分片数量
 "active_shards" : 12,#所有索引的所有分片的汇总值,即包括副本分片。
 "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
}

标签:node,03,Windows,集群,分片,master,data,节点
From: https://www.cnblogs.com/lihaoyang/p/17501443.html

相关文章

  • Hadoop中HDFS集群启停命令
    一键启停脚本#一键启动hdfs集群start-dfs.sh#一键关闭hdfs集群stop-dfs.sh单进程启停$HADOOP_HOME/sbin/hadoop-daemon.sh,此脚本可以单独控制所在机器的进程的启停用法:hadoop-daemon.sh(start|status|stop)(namenode|secondarynamenode|datanode) $HADOOP_HOME/bin......
  • Windows电脑为例,设置minio文件服务分布式部署
    前言关于分布式文件存储,之前我也是使用fastdfs,那为什么突然选择minio?1、它可以多平台部署2、搭建起来不是很复杂3、github近30K的star什么是minio?构建高性能的云原生数据机器学习,大数据分析,海量存储的基础架构MinIO支持各种应用程序数据工作负载在中国:阿里巴巴、腾讯、百......
  • Windows(Server)、Linux服务器如何修改用户名和密码?
    开通服务器后,为了安全起见,应及时修改默认账户名和密码,不熟悉的人也建议不要随意提供服务器信息给对方,以防对方进入服务器修改数据,养成定期修改密码可以提高服务器的安全性,今天给大家分享一下服务器修改用户名和密码的方法,修改方法如下:一、WindowsServer2003、20081、远程登录服务......
  • Windows NT和Linux,采用了混合内核的设计模式 混合内核(Hybrid Kernel)是一种操作系统内
    混合内核(HybridKernel)是一种操作系统内核设计模式,它结合了微内核和宏内核两种设计理念的特点。混合内核旨在提供高性能和灵活性,同时保持较强的安全性和稳定性。混合内核在内核设计中将一些关键的服务和功能放在内核空间中,同时将其他非关键的服务和功能封装成独立的用户空间进程......
  • "快速访问"(Quick Access)是 Windows 操作系统中一个常用的功能,它允许用户快速访问最近
    "快速访问"(QuickAccess)是Windows操作系统中一个常用的功能,它允许用户快速访问最近使用的文件和常用的文件夹。它在资源管理器中的左侧导航窗格中显示,并提供了便捷的方式来查找和打开文件。在Windows10中,"快速访问"默认显示用户最近访问的文件和常用的文件夹。它会根据用户......
  • "ntoskrnl"代表"NT Operating System Kernel",它是Windows操作系统的主要核心模块之一,
    Windows内核是微软Windows操作系统的核心组件,它负责管理操作系统的核心功能和提供关键的系统服务。Windows内核是运行在计算机硬件上的软件,它与硬件交互并管理资源分配、进程管理、设备驱动程序和系统安全等任务。Windows内核采用了一种称为“混合内核”的设计,结合了传统的单内核......
  • 最近项(Recent Items)功能在不同版本的 Windows 操作系统中可能会有一些差异和功能更新
    最近项(RecentItems)功能在不同版本的Windows操作系统中可能会有一些差异和功能更新。以下是几个常见的Windows版本的最近项功能的更新情况:WindowsXP:在WindowsXP中,最近项功能也被称为"最近文档"(MyRecentDocuments)。你可以从开始菜单中直接访问最近文档列表,它位于"文......
  • MongoDB负载均衡集群(第8章节选)​
    MongoDB自身可组成分片加复制的集群,在这个集群的前端加上负载均衡器(比如HAProxmy+Keepalived),就可组建成一个无单点故障、十分完美的高可用负载均衡集群(如图8-1所示)。图8-1整个MongDB高可用体系结构中,存在四个应用集群:入口路由集群Mongos、配置集群“ConfigServer”、分片集群1......
  • 在Windows11平台安装JDK11(双11)
    前言本文主要是详细讲解在Windows11系统上安装JDK11,安装时有一些注意事项需要说明。与JDK8的安装过程有少许不一样。一、安装前说明1.系统要求在微软Windows11平台上安装JDK11,首先我们看一下在64位Windows平台上安装JDK的系统要求,如下图:这里的信息很少,可......
  • Windows操作系统磁盘碎片整理程序的作用
    Windows操作系统磁盘碎片整理程序的作用是优化硬盘的存储和访问效率,提升系统的整体性能。磁盘碎片是指文件在硬盘上分散存储的情况,导致文件的不连续存储,从而增加了文件读取和写入的时间。磁盘碎片整理程序通过重新组织文件的存储位置,将文件片段整理成连续的空间,以减少磁盘访问的时......