ElasticSearch第2篇(1.4万字记录ElasticSearch集群摆设、节点、分片、副本 ...

打印 上一主题 下一主题

主题 1741|帖子 1741|积分 5223

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
前置衔接文章:ElasticSearch第1讲(4万字详解 Linux下安装、原生调用、API调用超全总结、Painless、IK分词器、4种和数据库同步方案、高并发下一致性办理方案、Kibana、 ELK)
ElasticSearch集群


  • 极简概括:多个ES节点组成的一个系统。
  • 办理问题:

    • 防止单点故障。
    • 算力和容量负载均衡,用更多的节点来扩展集群的容量和性能。

  • 实用场景:涉及大数据检索的系统,无固定场景,有需求就用。
  • 优点:

    • 防止单点故障,当集群内一个节点挂掉后,不影响集群使用,若master节点挂掉,ES集群也会自动选举master,并持续对外提供服务(主节点规复后就可能不在是主节点了,类似Redis的哨兵模式)
    • 算力和容量负载均衡,用更多的节点来扩展集群的容量和性能。
    • 高可用性:通过分片(Sharding)和副本(Replication)机制,ES可以或许包管数据的高可用性和容错性。即使某个节点出现故障,数据依然可以从其他副本中规复。
    • 具有强大的分片与副本分布算法,开发人员不消刻意去维护。

  • 缺点:

    • 集群配置:对于配置集群,ES默认的配置文件并未提供充分的预留配置项,使得配置集群困难。
    • 运维成本:多个节点不可避免的增长运维成本。

ES集群搭建(version 8.14.1)


  • 搭建目标:192.168.0.183(master & data),192.168.0.183(data),192.168.0.183(data)。
  • 系统配置:
  1. 都要做集群的,推荐修改以下配置,用于Linux系统对es性能优化。
  2. vim  /etc/security/limits.conf
  3. 文末添加两行配置,优化文件描述符软硬限制,对提高性能非常重要,文件描述符用于标识和管理每个进程都可以打开文件的数量
  4. es soft nofile 65536
  5. es hard nofile 65536
  6. vim /etc/security/limits.d/20-nproc.conf
  7. 文末添加两行配置,优化文件描述符软硬限制,对提高性能非常重要,文件描述符用于标识和管理每个进程都可以打开文件的数量
  8. es soft nofile 65536
  9. es hard nofile 65536
  10. vim /etc/sysctl.conf
  11. 定义系统中可以同时打开的最大文件描述符数量。
  12. fs.file-max=655350
  13. 定义Linux内核中进程可以拥有的最大内存映射区域数量
  14. vm.max_map_count=262144
  15. 重启
  16. sysctl -p
复制代码

  • 节点1配置
  1. 注意配置格式,key: value之间要留出空格,否则ES不识别对应的值。
  2. 通过上一章,已经安装好了ES,并能跑起来。可在这个基础上配置ES集群
  3. vim ES根目录/config/elasticsearch.yml
  4. 找到---------------------------------- Cluster -----------------------------------段,修改以下内容
  5. 集群名称,一个集群下的节点,需要保持一致
  6. cluster.name: zs_es_cluster
  7. 找到------------------------------------ Node ------------------------------------段,修改以下内容
  8. 节点名称,每个节点名称必须不一样
  9. node.name: node_01
  10. 设置节点的角色,推荐只设置一个主节点
  11. node.roles: [master, data]
  12. 找到---------------------------------- Network -----------------------------------段,修改以下内容
  13. 配置IP
  14. network.host: 192.168.0.183
  15. 并添加一行端口
  16. transport.tcp.port: 9300
  17. 将光标指针移至文末,添加跨域配置
  18. http.cors.enabled: true
  19. http.cors.allow-origin: "*"
  20. http.max_content_length: 200MB
  21. 3行指令用于配置相关节点,以供服务发现
  22. discovery.seed_hosts: ["1节点IP:主节点集群端口",2节点IP:主节点集群端口,3节点IP:主节点集群端口]
  23. 这个设置启用TCP连接的keep-alive机制。启用keep-alive后,Elasticsearch会定期向连接的另一端发送探测包,以检查连接是否仍然有效。这有助于保持长时间未活动的连接处于活动状态,从而防止连接由于超时被意外关闭。
  24. network.tcp.keep_alive: true
  25. 这个选项禁用Nagle算法。Nagle算法用于减少网络上的小数据包的数量,但在实时系统中,它可能导致延迟。将network.tcp.no_delay设置为true可以确保数据包尽快发送,而不经过Nagle算法的延迟处理,有助于提高网络通信的实时性。
  26. network.tcp.no_delay: true
  27. 在----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------段,
  28. 若设置了
  29. xpack.security.enabled: true
  30. 请打开
  31. xpack.security.transport.ssl:
  32.   enabled: true
  33. 否则报错bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch
  34. Esc wq保存并退出。
  35. chown -R es:es ES根目录
  36. 随后启动或重启ES,注意防火墙要打开指定的端口。
  37. 期间可用ps aux命令查看ES是否跑得起来。
  38. 通过curl访问ES,可直接查看对应的ES配置情况。
  39. curl IP:9200/_cluster/health
  40. 结果:
  41. {
  42.     "cluster_name": "zs_es_cluster",
  43.     "status": "green",
  44.     "timed_out": false,
  45.     "number_of_nodes": 3,
  46.     "number_of_data_nodes": 3,
  47.     "active_primary_shards": 7,
  48.     "active_shards": 14,
  49.     "relocating_shards": 0,
  50.     "initializing_shards": 0,
  51.     "unassigned_shards": 0,
  52.     "delayed_unassigned_shards": 0,
  53.     "number_of_pending_tasks": 0,
  54.     "number_of_in_flight_fetch": 0,
  55.     "task_max_waiting_in_queue_millis": 0,
  56.     "active_shards_percent_as_number": 100.0
  57. }
  58. 1. cluster_name
  59. 含义:集群名称。
  60. 示例值:"zs_es_cluster"
  61. 用途:用于标识集群的名称,方便在管理和监控时识别。
  62. 2. status
  63. 含义:集群状态。
  64. 示例值:"green"
  65. 用途:指示集群的健康状态:
  66. green:所有主分片和副本分片都正常。
  67. yellow:所有主分片正常,但有副本分片未分配。
  68. red:有主分片未分配。
  69. 3. timed_out
  70. 含义:查询是否超时。
  71. 示例值:false
  72. 用途:指示查询请求是否因超时而失败。
  73. 4. number_of_nodes
  74. 含义:集群中的节点总数。
  75. 示例值:3
  76. 用途:显示集群中的总节点数。
  77. 5. number_of_data_nodes
  78. 含义:集群中的数据节点总数。
  79. 示例值:3
  80. 用途:显示处理数据存储和搜索的节点数。
  81. 6. active_primary_shards
  82. 含义:活跃的主分片数量。
  83. 示例值:7
  84. 用途:显示当前活跃的主分片总数。
  85. 7. active_shards
  86. 含义:活跃的分片总数(包括主分片和副本分片)。
  87. 示例值:14
  88. 用途:显示集群中活跃的所有分片的总数。
  89. 8. relocating_shards
  90. 含义:正在迁移的分片数量。
  91. 示例值:0
  92. 用途:显示当前正在迁移的分片数。迁移通常发生在节点故障或集群扩展时。
  93. 9. initializing_shards
  94. 含义:正在初始化的分片数量。
  95. 示例值:0
  96. 用途:显示正在初始化的分片数。初始化分片通常是在刚刚创建索引时发生的。
  97. 10. unassigned_shards
  98. 含义:未分配的分片数量。
  99. 示例值:0
  100. 用途:显示未分配的分片数。这通常表示在集群启动或索引创建时需要分配的分片。
  101. 11. delayed_unassigned_shards
  102. 含义:延迟未分配的分片数量。
  103. 示例值:0
  104. 用途:显示因延迟而未分配的分片数量。
  105. 12. number_of_pending_tasks
  106. 含义:待处理任务的数量。
  107. 示例值:0
  108. 用途:显示当前待处理的集群管理任务数量,例如分片分配或设置更改。
  109. 13. number_of_in_flight_fetch
  110. 含义:当前进行中的获取请求数量。
  111. 示例值:0
  112. 用途:显示当前正在进行的搜索请求数量。
  113. 14. task_max_waiting_in_queue_millis
  114. 含义:任务在队列中等待的最大时间(毫秒)。
  115. 示例值:0
  116. 用途:显示任务在队列中等待的最长时间。值为 0 表示没有任务等待。
  117. 15. active_shards_percent_as_number
  118. 含义:活跃分片的百分比。
  119. 示例值:100.0
  120. 用途:显示当前活跃的分片占总分片数的百分比。值为 100.0 表示所有分片都在正常工作中。
  121. 或者使用如下方式查看
  122. curl IP:9200/_cat/nodes?v
  123. 结果:
  124. ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
  125. 192.168.0.184           30          94   0    0.16    0.11     0.22 cdfhilmrstw -      node_02
  126. 192.168.0.183           50          94   0    0.29    0.33     0.30 cdfhilmrstw *      node_01
  127. 192.168.0.185           63          93   0    0.79    7.42     5.21 cdfhilmrstw -      node_03
  128. 1. heap.percent
  129. 含义:JVM 堆内存的使用百分比。
  130. 用途:显示当前 JVM 堆内存的使用情况。高使用率可能表示需要增加内存或优化查询/索引操作。
  131. 2. ram.percent
  132. 含义:系统内存的使用百分比。
  133. 用途:显示节点系统内存的使用情况。用于监控内存压力,确保系统有足够的可用内存以避免性能问题。
  134. 3. cpu
  135. 含义:节点的 CPU 使用情况。
  136. 用途:显示节点的 CPU 使用情况。高 CPU 使用率可能表示节点在处理大量请求或需要优化配置。
  137. 4. load_1m
  138. 含义:过去 1 分钟的系统负载。
  139. 用途:显示系统的负载情况。负载值超过 CPU 核心数量可能表示系统负载较高,可能需要进一步调查。
  140. 5. load_5m
  141. 含义:过去 5 分钟的系统负载。
  142. 用途:显示系统的负载趋势。可以帮助识别长期的负载变化情况。
  143. 6. load_15m
  144. 含义:过去 15 分钟的系统负载。
  145. 用途:显示系统负载的长期趋势。可以用于分析系统负载的稳定性和变化趋势。
  146. 7. node.role
  147. 含义:节点角色。
  148. 用途:显示节点在集群中的角色,例如主节点(m)、数据节点(d)、协调节点(c)等。这帮助理解节点的功能和在集群中的作用。
  149. 8. master
  150. 含义:是否为主节点。
  151. 用途:显示节点是否是当前的主节点。主节点负责集群的管理和协调任务。
  152. 9. name
  153. 含义:节点名称。
复制代码

  • 节点2、3配置基本同上,IP和节点名称需更改,并清空ES根目录/data,否则亲测节点无法发现,记得密码配置的要一致,客户端调用要输入用户名密码的,不一致会报错。
ES Head插件

  1. 原本是想通过Chrome加载该文件成为插件,但是报错,那就通过网页的形式使用。
  2. cd 插件目录
  3. npm i
  4. 然后手动打开插件目录下的index.html
复制代码
节点脚色(主节点、数据节点)


  • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
  • 极简概括节点:就是每个服务器上的ES实例,在集群环境下的称呼。
  • 极简概括节点脚色:集群环境下每个ES实例的工作侧重点,是通过脚色控制的。
  • 分类:master、data、data_content、data_hot、data_warm、data_cold、data_frozen、ingest
    、ml、remote_cluster_client、transform。这么多种类,目前可以或许用到的,就只有master、data节点。
  • 主节点:就是master节点,用于控制集群。
  • 主节点作用:

    • 集群管理:主节点负责集群状态的管理和维护,包罗节点的加入和退出、索引的创建和删除等。
    • 元数据管理:主节点管理集群的元数据,包罗索引和映射的信息。
    • 和谐操作:主节点和谐分片的分配和再分配,确保数据的均衡和容错性。
    • 处理集群状态更新:主节点负责更新集群状态,并将这些更新广播到所有数据节点。

  1. 若要把节点,配置为主节点,需要再elasticsearch.yml中配置
  2. node.roles: [master]
复制代码

  • 数据节点:具有多个数据脚色之一的节点。数据节点生存数据并执行与数据干系的操作,如CRUD、搜索和聚合。具有泛型的节点data脚色可以担任任何专门的数据节点脚色。
  1. node.roles: [master, data]
复制代码
分片


  • 极简概括:是将索引拆分成多个小的独立部分的过程。
  • 类比MySQL:分表。
  • 办理问题:

    • 容量问题:几十亿的索引,单个节点装不下,就须要拆分。
    • 性能提升:将数据分布到多个分片上,多个节点可以并行处理查询哀求,从而进步查询性能。
    • 副本备份:防止单点故障引发的数据丢失问题。

  • 实用场景:大数据下因存储问题(办理存储的问题),和高并发下因算力问题(办理性能的问题)。
  • 优点:如上。
  • 缺点:

    • 不可避免的增长运维成本。
    • 数据倾斜:因算法,大概数据本身的特点,让分片之间分布不均,从而造成负载不均衡。这种不均衡可能会影响整体性能和资源利用服从。
    • 主分片:拆分后的分片数据,并非主节点的分配数据。留意分片数目,创建索引时就已经确定,默认是1个,之后也无法更改。

副本(或叫副本分片)


  • 极简概括:分片的备份,分片的冗余。
  • 对比分片:不是一个东西,分片是将源数据拆分成小部分,副本分片的备份。
  • 分布模式:当有两台及以上数目的实例时,分片和对应的副本会放置在不同的服务器上,用来避免单节点故障引起的数据丢失。
节点扩容带来的问题


  • 为什么要扩容:因存储不足大概算力不足的环境下,想通过扩容节点来办理。
  • 问题:由于分片数目在创建索引时就已经确定(默认是1个,可手动更改),之后也无法更改。这会导致扩容会受节点数目牵制。
  • 办理:分片数目无法热增长,但是副本分片却可以热增长(增大索引的number_of_replicas参数)。因为副本即分片,以是ES访问分片或副本可以。将副本分布在更多的节点上,吞吐量,就上来了。
  • 换个说法:在增长节点的期间,增长副本数目,让更多的副本,均派在更多的节点上,从而增长算力并减轻存储压力。
  • 留意:过多的副本,在ES写入数据时须要更长时间的同步,这会消耗肯定的资源。
节点、分片、副本的盘算、分布与演进


  • 背景:我把他拿出来讲,是因为轻易肴杂。创建索引时,若设置number_of_shards为3,number_of_replicas为1。
  • 则表示:

    • number_of_shards为3:表示这个索引设置3个分片。起个名:也就是分片1,分片2,分片3。
    • number_of_replicas为1:定义每个主分片有1个副本。3个分片,就会有3个副本,起个名:也就是副本1,副本2,副本3。

  • 当节点数目为1时,则表示:

    • 分片数目:3。
    • 副本数目:3。
    • 分片分布环境:分片1,分片2,分片3全部在这个单一节点上。
    • 副本分布环境:副本1,副本2,副本3全部在这个单一节点上。若节点挂掉,源数据和备份有丢失风险,因此存在单点故障。
    • 分布如图

  1. |--------节点1--------|
  2. | 分片1、分片2、分片3  |
  3. | 副本1、副本2、副本3  |
  4. |---------------------|
复制代码

  • 演进,当节点数目为2时,则表示:

    • 分片数目:3。
    • 副本数目:3。
    • 分片分布环境:分片1,分片2,分片3可能全部在这个节点1上,因为这样变动动用资源较少。
    • 副本分布环境:副本1,副本2,副本3可能全部在这个节点2上,总之,分片和这个分片对应的副本,不能出现在同一个节点上,谨防单点故障。
    • 分布如图

  1. 只要节点数量>=2,就不能再同一节点上出现存储分片n,又存储副本n的情况。
  2. |--------节点1--------|
  3. | 分片1、分片2、分片3  |
  4. |---------------------|
  5. |--------节点2--------|
  6. | 副本1、副本2、副本3  |
  7. |---------------------|
复制代码

  • 演进,当节点数目为3时,则表示:

    • 分片数目:3。
    • 副本数目:3。这个3,表示的3个分片各会有1个副本,则产生3份副本。
    • 分片分布环境:分片1和分片2可能在节点1上,分片3可能在节点3上。
    • 副本分布环境:副本1和副本3可能在节点2上,副本2可能在节点3上。
    • 分布如图:

  1. 只要节点数量>=2,就不能再同一节点上出现存储分片n,又存储副本n的情况。
  2. |-----节点1----|
  3. | 分片1、分片2  |
  4. |--------------|
  5. |-----节点2----|
  6. | 副本1、副本3  |
  7. |--------------|
  8. |-----节点3----|
  9. | 副本2、 分片3 |
  10. |--------------|
复制代码

  • 当节点数目大于6时:

    • 3个分片,那么加上3个分片对应的3份副本,一共就是6份数据,最多使用6个节点,以是节点不能超过6个,否则会产生多余的节点。

  • 演进:number_of_replicas为2,number_of_shards为3,且节点数目为3,则表示:

    • 分片数目:3。
    • 副本数目:6。
    • 分片分布环境:可能分片1,分片2在节点1上,分片3在节点3上。
    • 副本分布环境:可能副本3_1在节点1,副本1、副本2、副本3_1在节点2,副本1_1、副本2_1、分片3在节点3。
    • 分布如图

  1. 只要节点数量>=2,就不能再同一节点上出现存储分片n,又存储副本n的情况。
  2. |----------节点1----------|
  3. | 分片1、分片2、副本3     |
  4. |------------------------|
  5. |----------节点2----------|
  6. | 副本1、副本2、副本3_1    |
  7. |-------------------------|
  8. |----------节点3----------|
  9. | 副本1_1、副本2_1、分片3 |
  10. |------------------------|
复制代码

  • 节点数目增长后,还可以接着演进……。
路由


  • 极简概括:指的是如何将文档定位到详细的分片上的策略。
  • 作用:帮忙在读写时快速定位详细的分片。
  • 过程:文档的ID颠末哈希盘算,并通过固定的分片数目取模,根据得到的值决定用哪个分片。
  • 策略:默认是用轮询节点的方式进行路由。
  • 分类:

    • 内置路由:ES使用文档ID的哈希值取模分片数目来盘算其存储的分片位置,并自动定位分片。
    • 自定义路由:用户提供一个routing参数,这个参数可以是任意的字符串值,ES将使用这个值j颠末哈希后取模来进行路由盘算。

集群内数据的读写流程


  • 写流程

    • 客户端发送写哀求:客户端向ES集群中的某个节点发送写哀求,这个节点会作为本次哀求的和谐节点(Coordinating Node)。
    • 路由到准确的分片:和谐节点使用文档ID的哈希值来确定文档属于哪个分片,并通过集群状态中的内容路由表信息获知该分片的主分片位置。
    • 主分片写入:和谐节点将写哀求转发到主分片所在的节点,由主分片执行现实的写操作。
    • 主从复制:如果主分片写入成功,它会将哀求并行转发到所有的副本分片(Replica Shard)所在的节点,等候副本分片写入成功。这是为了包管数据的冗余和一致性。
    • 确认写入成功:一旦所有副本分片都成功写入了数据,主分片节点会向和谐节点报告成功,随后和谐节点向客户端返回写入成功的相应(有例外)。

  • 读流程

    • 客户端发送读哀求:客户端向ES集群中的某个节点发送读哀求,这个节点同样会作为本次哀求的和谐节点。
    • 确定数据和副本信息:和谐节点使用文档ID的哈希值来确定文档属于哪个分片,并通过集群状态中的内容路由表信息获知该分片的副本信息。
    • 转发哀求到副本节点:和谐节点可以将读哀求转发到有副本分片的任意节点进行读取。在现实操作中,为了负载均衡,和谐节点可能会采用轮询的方式将哀求分发到不同的副本节点。
    • 返回数据给客户端:处理读哀求的节点将数据返回给和谐节点,随后和谐节点将数据返回给客户端。

  • 和谐节点:负责处理集群内哀求并将其分发到合适数据节点的节点。和谐节点不直接存储数据或索引,而是负责处理哀求的路由。
故障转移带来的影响


  • 增补:这里的故障转移,指的是某个节点挂掉后,对集群本身和调用端的影响。
  • 脚色:若master挂掉,集群会从其他可用的节点中选出来一个作为master,若老master规复,则不在是master脚色。
  • 分片与副本分布:节点挂掉后,意味着节点数目发生了变革,就算再次启动,分片与副本分布可能会与原先的不一样。
  • 调用端:只要节点不全部挂掉,访问速度会变慢,但支持正常访问。
客户端调用集群的方案

  1. composer require elasticsearch/elasticsearch
  2. 新建PHP文件,以下代码数据为公共部分。
  3. include './vendor/autoload.php';
  4. use Elastic\Elasticsearch\ClientBuilder;
  5. //连接ES主节点
  6. $client = ClientBuilder::create()->setHosts(['192.168.0.183:9200', '192.168.0.184:9200', '192.168.0.185:9200'])
  7. ->build();
  8. //若es有密码,则需要添加一个setBasicAuthentication()方法,各节点密码须一致。
  9. $client = ClientBuilder::create()->setHosts(['192.168.0.183:9200', '192.168.0.184:9200', '192.168.0.185:9200'])
  10. ->setBasicAuthentication('elastic', '123456')->build();
复制代码
分片与副本设置指标

<ul>容量考虑:控制每个分片占用的硬盘容量,不超过ES最大JVM的堆空间设置(一般设置不超过32G),如果索引的总容量在500G大小,那分片设置16个即可。
节点考虑:避免让单个节点存储多个分片,一旦出现了故障(参考上文 “演进,当节点数目为3时”(不知道这句话在那里直接Ctrl F搜))仍旧有丢失数据的可能,一般的分片数目,不会超过节点数的3倍。
公式:节点数  'shards_test',    'body'  => [        'settings' => [            'number_of_shards' => 3, //创建3个分片            'number_of_replicas' => 1 //每个分片有1个副本        ]    ]];$response = $client->indices()->create($params);dd($response->asBool());[/code]

  • 删:不支持的操作,可通过建立新的索引去实现。
  • 改:不支持的操作,可通过建立新的索引去实现。
  • 查:
  1. 返回bool
  2. $params = [
  3.     'index' => 'shards_test',
  4.     'body'  => [
  5.         'settings' => [
  6.             'number_of_shards' => 3, //创建3个分片
  7.             'number_of_replicas' => 1 //每个分片有1个副本
  8.         ]
  9.     ]
  10. ];
  11. $response = $client->indices()->create($params);
  12. dd($response->asBool());
复制代码
副本增删改查


  • 增:
  1. 返回array
  2. $params = [
  3.     'index' => 'shards_test',
  4.     'format' => 'json'
  5. ];
  6. $response = $client->cat()->shards($params);
  7. dd($response->asArray());
  8. array:6 [
  9.   0 => array:9 [
  10.     "index" => "shards_test"
  11.     "shard" => "0"
  12.     "prirep" => "r"
  13.     "state" => "STARTED"
  14.     "docs" => "0"
  15.     "store" => "227b"
  16.     "dataset" => "227b"
  17.     "ip" => "192.168.0.185"
  18.     "node" => "node_03"
  19.   ]
  20.   1 => array:9 [
  21.     "index" => "shards_test"
  22.     "shard" => "0"
  23.     "prirep" => "p"
  24.     "state" => "STARTED"
  25.     "docs" => "0"
  26.     "store" => "227b"
  27.     "dataset" => "227b"
  28.     "ip" => "192.168.0.183"
  29.     "node" => "node_01"
  30.   ]
  31.   2 => array:9 [
  32.     "index" => "shards_test"
  33.     "shard" => "1"
  34.     "prirep" => "p"
  35.     "state" => "STARTED"
  36.     "docs" => "0"
  37.     "store" => "227b"
  38.     "dataset" => "227b"
  39.     "ip" => "192.168.0.185"
  40.     "node" => "node_03"
  41.   ]
  42.   3 => array:9 [
  43.     "index" => "shards_test"
  44.     "shard" => "1"
  45.     "prirep" => "r"
  46.     "state" => "STARTED"
  47.     "docs" => "0"
  48.     "store" => "227b"
  49.     "dataset" => "227b"
  50.     "ip" => "192.168.0.184"
  51.     "node" => "node_02"
  52.   ]
  53.   4 => array:9 [
  54.     "index" => "shards_test"
  55.     "shard" => "2"
  56.     "prirep" => "p"
  57.     "state" => "STARTED"
  58.     "docs" => "0"
  59.     "store" => "227b"
  60.     "dataset" => "227b"
  61.     "ip" => "192.168.0.184"
  62.     "node" => "node_02"
  63.   ]
  64.   5 => array:9 [
  65.     "index" => "shards_test"
  66.     "shard" => "2"
  67.     "prirep" => "r"
  68.     "state" => "STARTED"
  69.     "docs" => "0"
  70.     "store" => "227b"
  71.     "dataset" => "227b"
  72.     "ip" => "192.168.0.183"
  73.     "node" => "node_01"
  74.   ]
  75. ]
  76. index: 索引的名称。在这个例子中,索引名称是 shards_test。
  77. shard: 分片的编号。"0"表示这是索引的第一个主分片。
  78. prirep: 分片的类型。"r"表示这是一个副本分片(“r” 是“replica”的缩写)。主分片的标识是 "p"。
  79. state: 分片的状态。"STARTED"表示该分片已成功启动并处于活动状态。
  80. docs: 分片中的文档数量。"0"表示当前分片中没有文档。
  81. store: 分片占用的存储空间大小。"227b"表示这个分片的大小为227字节。
  82. dataset: 这个字段通常不在标准的 _cat/shardsAPI输出中,可能是某个自定义的监控系统中的字段。在这里它和 store 的值相同,即 227b。
  83. ip: 托管该分片的节点的IP地址。在这个例子中是192.168.0.185。
  84. node: 托管该分片的节点名称。在这个例子中是node_03。
复制代码

  • 删:
  1. 返回bool
  2. $params = [
  3.     'index' => 'shards_test',
  4.     'body'  => [
  5.         'settings' => [
  6.             'number_of_shards' => 3, //创建3个分片
  7.             'number_of_replicas' => 1 //每个分片有1个副本
  8.         ]
  9.     ]
  10. ];
  11. $response = $client->indices()->create($params);
  12. dd($response->asBool());
复制代码

  • 改:
  1. 返回bool
  2. $params = [
  3.     'index' => 'shards_test',
  4.     'body'  => [
  5.         'settings' => [
  6.             'number_of_replicas' => 0
  7.         ]
  8.     ]
  9. ];
  10. $response = $client->indices()->putSettings($params);
  11. dd($response->asBool());
复制代码

  • 查:
  1. $params = [
  2.     'index' => 'shards_test',
  3.     'body'  => [
  4.         'settings' => [
  5.             'number_of_replicas' => 2 //自定义数量
  6.         ]
  7.     ]
  8. ];
  9. $response = $client->indices()->putSettings($params);
  10. dd($response->asBool());
复制代码
自定义路由干系增删改查


  • 不妨先创建一个索引及其映射与分片副本配置
  1. 返回array
  2. 同节点查看操作
  3. $params = [
  4.     'index' => 'shards_test',
  5.     'format' => 'json'
  6. ];
  7. $response = $client->cat()->shards($params);
  8. dd($response->asArray());
复制代码

  • 增:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有添加的意义,可参与创建数据。
  1. $params = [
  2.     'index' => 'route_test',
  3.     'body'  => [
  4.         'mappings' => [
  5.             'properties' => [
  6.                 'test_field' => [
  7.                     'type' => 'text',
  8.                     'index' => true
  9.                 ]
  10.             ]
  11.         ],
  12.         'settings' => [
  13.             'number_of_shards' => 3,
  14.             'number_of_replicas' => 1
  15.         ]
  16.     ]
  17. ];
  18. $response = $client->indices()->create($params);
  19. dd($response->asBool());
复制代码

  • 删:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有删除的意义,可参与删除数据。
  1. 返回bool
  2. $params = [
  3.     'index' => 'route_test',
  4.     'id'    => '1',
  5.     'body'  => [
  6.         'test_field' => 'C语言是世界上最好的编程语言',
  7.     ],
  8.     'routing' => 'share_01' //自定义路由标识
  9. ];
  10. $response = $client->index($params);
  11. dd($response->asBool());
复制代码

  • 改:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有更改的意义,可参与更新数据。
  1. $params = [
  2.     'index' => 'route_test',
  3.     'id'    => '1',
  4.     'routing' => 'share_01'  //若使用其它的路由,则无法命中,导致删除出现异常报错
  5. ];
  6. try {
  7.     $response = $client->delete($params);
  8. } catch (\Exception $exception) {
  9.     //异常兜底操作
  10.     dd($exception->getMessage());
  11. }
  12. dd($response->asBool());
复制代码

  • 查:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有查询的意义,可参与查询数据。
  1. 返回bool
  2. $params = [
  3.     'index' => 'route_test',
  4.     'id'    => '1',
  5.     'body'  => [
  6.         'doc' => [
  7.             'test_field' => 'C是世界上最好的编程语言'
  8.         ]
  9.     ],
  10.     'routing' => 'share_01' //若使用其它的路由,则无法命中,导致更新出现异常报错
  11. ];
  12. try {
  13.     $response = $client->update($params);
  14. } catch (\Exception $exception) {
  15.     //异常兜底操作
  16.     dd($exception->getMessage());
  17. }
  18. dd($response->asBool());
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表