目录

一、为什么要搭建集群

二、Windows搭建ES集群


一、为什么要搭建集群

在搭建ElasticSearch集群之前,首先得搞明白我们为什么需要搭建集群?它有什么优势呢?ES单机部署为什么不行?

  • (1)高可用性

众所周知,搭建集群最明显的优点就是提供我们的高可用性,无论是之前学习的Redis集群,Eureka集群等等,单机版部署只适合我们自己学习使用,真正到了生产环境很少会单机部署某个服务,基本上都是集群部署,保证单台机器宕机时不会导致我们服务不可用。

Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息。所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?

它通常是指,通过设计减少系统不能提供服务的时间,假设系统一直能够提供服务,我们说系统的可用性是 100%。如果系统在某个时刻宕掉了,比如某个网站在某个时间挂掉了,那么它就是不可用的。所以,为了保证 Elasticsearch 的高可用性,我们就应该尽量减少 Elasticsearch 的不可用时间。

  • 那么怎样提高 Elasticsearch 的高可用性呢?

那就是将ElasticSearch进行集群部署,假如 Elasticsearch 只放在一台服务器上,即单机运行,假如这台主机突然断网了或者被攻击了,那么整个 Elasticsearch 的服务就不可用了。但如果改成 Elasticsearch 集群的话,有一台主机宕机了,还有其他的主机可以支撑,这样就仍然可以保证服务是可用的。

那可能有的小伙伴就会说了,那假如一台主机宕机了,那么不就无法访问这台主机的数据了吗?

为了解答这个问题,这里就引出了 Elasticsearch 的信息存储机制了。首先解答上面的问题,一台主机宕机了,这台主机里面存的数据依然是可以被访问到的,因为在其他的主机上也有备份,但备份的时候也不是整台主机备份,是分片备份的,那这里就又引出了一个概念——分片。

分片,英文叫做 Shard,顾名思义,分片就是对数据切分成了多个部分。我们知道 Elasticsearch 中一个索引(Index)相当于是一个数据库,如存某网站的用户信息,我们就建一个名为 user 的索引。但索引存储的时候并不是整个存一起的,它是被分片存储的,Elasticsearch 默认会把一个索引分成五个分片,当然这个数字是可以自定义的。分片是数据的容器,数据保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里,所以相当于一份数据被分成了多份并保存在不同的主机上

如果一台主机挂掉了,那么这个分片里面的数据不就无法访问了?别的主机都是存储的其他的分片。其实是可以访问的,因为其他主机存储了这个分片的备份,叫做副本,这里就引出了另外一个概念——副本。

副本,英文叫做 Replica,同样顾名思义,副本就是对原分片的复制,和原分片的内容是一样的,Elasticsearch 默认会生成一份副本,所以相当于是五个原分片和五个分片副本,相当于一份数据存了两份,并分了十个分片,当然副本的数量也是可以自定义的。这时我们只需要将某个分片的副本存在另外一台主机上,这样当某台主机宕机了,我们依然还可以从另外一台主机的副本中找到对应的数据。所以从外部来看,数据结果是没有任何区别的。

一般来说,Elasticsearch 会尽量把一个索引的不同分片存储在不同的主机上,分片的副本也尽可能存在不同的主机上,这样可以提高容错率,从而提高高可用性。

  • (2)健康状态

针对一个索引,Elasticsearch 中其实有专门的衡量索引健康状况的标志,分为三个等级:

  • green,绿色。这代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。

  • yellow,黄色。所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果更多的分片消失,你就会丢数据了。所以可把 yellow 想象成一个需要及时调查的警告。

  • red,红色。至少一个主分片以及它的全部副本都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

如果你只有一台主机的话,其实索引的健康状况也是 yellow,因为一台主机,集群没有其他的主机可以防止副本,所以说,这就是一个不健康的状态,因此集群也是十分有必要的。

  • (3)存储空间

另外,既然是群集,那么存储空间肯定也是联合起来的,假如一台主机的存储空间是固定的,那么集群它相对于单个主机也有更多的存储空间,可存储的数据量也更大。

综合上述所说,所以我们需要搭建es集群。

上述关于搭建ES集群的说明引用自:https://www.cnblogs.com/tianyiliang/p/10291305.html,笔者觉得写得特别赞,小伙伴们可以参考学习。

二、Windows搭建ES集群

这里笔者为了学习,只搭建两个node节点的ES集群,更多节点配置大体都类似,无非多加一个节点配置而已。下面来看一下详细的集群搭建步骤:

【a】解压缩elasticsearch-7.6.1-windows-x86_64.zip

解压完成之后复制两份,这里笔者起名为:elasticsearch-7.6.1_node1、elasticsearch-7.6.1_node2

注意:如果复制的解压缩包是之前已经使用过的es解压包并且解压包里面已经存在历史数据,那么数据一定要删除,否则集群搭建不成功。即所以如果使用之前用过的解压缩包,需要删除解压缩文件夹中的data目录。

【b】配置集群节点node0

更改elasticsearch7.6.1的配置文件elasticsearch.yml,具体修改后的文件内容如下:

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
#设置集群名称,集群内所有节点的名称必须一致
cluster.name: myEsCluster
#
# ------------------------------------ Node ------------------------------------
#
# 设置节点名称,集群内节点名称必须唯一
node.name: node0
#
# Add custom attributes to the node:
#
#node.attr.rack: r1# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true# 当前节点是否用于存储数据,是:true、否:false
node.data: true#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):# 索引数据存放的位置
#path.data: /path/to/data
#
# Path to log files:# 日志文件存放的位置
#path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:#需求锁住物理内存,是:true、否:false
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# 监听地址,用于访问该es
network.host: 127.0.0.1#
# Set a custom port for HTTP:# es对外提供的http端口,默认 9200
http.port: 9200# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 2# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5# Bootstrap the cluster using an initial set of master-eligible nodes:
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node0", "node1"]#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"

【c】配置集群节点node1

同理,另外一个节点修改elasticsearch.yml,具体修改后的文件内容如下:

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
#设置集群名称,集群内所有节点的名称必须一致
cluster.name: myEsCluster
#
# ------------------------------------ Node ------------------------------------
#
# 设置节点名称,集群内节点名称必须唯一
node.name: node1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true# 当前节点是否用于存储数据,是:true、否:false
node.data: true#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):# 索引数据存放的位置
#path.data: /path/to/data
#
# Path to log files:# 日志文件存放的位置
#path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:#需求锁住物理内存,是:true、否:false
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# 监听地址,用于访问该es
network.host: 127.0.0.1#
# Set a custom port for HTTP:# es对外提供的http端口,默认 9200
http.port: 9201# TCP的默认监听端口,默认 9300
transport.tcp.port: 9301#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 2# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5# Bootstrap the cluster using an initial set of master-eligible nodes:
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node0", "node1"]#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"

【d】 分别启动两台elasticsearch7.6.1节点

 启动es-head插件:

启动完成后,浏览器访问:http://localhost:9200/

浏览器访问:http://localhost:9201/

浏览器访问:http://localhost:9100/

如上图,我们可以看到es当前有两个节点node0和node1,说明我们集群搭建成功,我们可以查看每个节点的信息:

接着我们可以启动kibana,启动完成后,浏览器访问:http://localhost:5601/,测试往里面创建两个文档:

PUT /user/_doc/1
{"name":"张三","age": 10
}PUT /user/_doc/2
{"name":"李四","age": 20
}

执行完成后,查看索引内数据:

通过kibana还能查看集群健康信息:

GET /_cat/health?v

如上图,可以看到,当前集群有两个节点,并且节点有两个文档数据,以及主分片数量等信息。各个属性说明如下:

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

通过kibana查看集群中节点信息:

GET /_cat/nodes?v

 通过kibana查看集群中的索引信息:

GET /_cat/indices?v

 至此,我们成功搭建了两个节点的es集群。在生产环境,肯定都是在Linux系统中进行集群部署,这里为了学习方便,直接使用Windows搭建,希望对小伙伴们的学习有所帮助。

ElasticSearch全文搜索引擎之Windows集群搭建相关推荐

  1. Elasticsearch(二、高级查询+集群搭建)

    1内容概述 ElasticSearch 高级操作 ElasticSearch 集群管理 2 ElasticSearch高级操作 2.1 bulk批量操作-脚本 脚本: 测试用的5号文档 POST /p ...

  2. Day123.ElasticSearch:CAP定理、集群搭建、架构原理及分片、倒排索引、面试题

    目录 一.CAP定理 二.ES集群 1.搭建集群: 2.head 插件安装 3.集群测试 4.核心概念 二.架构原理及分片 一. ElasticSearch 分片 二. 分片控制 三. 分片原理 1. ...

  3. redis 3.x windows 集群搭建

    首先必须尊重原创,我的思路来源于简书上的文章,贴出作者原链接http://www.jianshu.com/p/22af55518f6d 一.开发环境 1.win7 2.redis 3.2.1 64位 ...

  4. ElasticSearch的基本用法与集群搭建

    一.简介 ElasticSearch和Solr都是基于Lucene的搜索引擎,不过ElasticSearch天生支持分布式,而Solr是4.0版本后的SolrCloud才是分布式版本,Solr的分布式 ...

  5. elasticsearch 在linux环境的集群搭建

    搭建集群节点前,首先了解下节点的三个角色: 主结点:master节点主要用于集群的管理及索引 比如新增结点.分片分配.索引的新增和删除等. 数据结点:data 节点上保存了数据分片,它负责索引和搜索操 ...

  6. elasticsearch集群搭建实例

    下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 elasticsearch : elasti ...

  7. 多台es服务器搭建elasticsearch集群,es单机伪集群搭建,在一台服务器上以三个不同的端口模拟三台主机完成es伪集群搭建,windows和Linux操作方法一致

    目录 (一)es单机伪集群搭建 一.准备三台elasticsearch服务器(复制三个es目录) 二.修改每台服务器的配置 1.修改es配置文件 2.配置注意 (二)多台服务器es集群搭建: 1 安装 ...

  8. elasticsearch集群搭建-windows

    1.下载elasticsearch到本地并解压 下载地址: https://www.elastic.co/cn/downloads/elasticsearch 解压之后复制两份,node1当作主节点, ...

  9. elasticsearch集群搭建及springboot集成使用

    elasticsearch集群搭建及springboot集成使用 1. ES介绍 2. 原理 2.1 核心概念 2.2 索引功能 2.3 ES特性 3. 分词器(analyzer) 4. 集群搭建 4 ...

  10. 六,搭建elasticsearch集群搭建

    @Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

最新文章

  1. 国外公司制造无需人参与的AI训狗机器
  2. php判断单选框是否被选中,jquery怎么判断radio是否选中
  3. 软件工程概论 课堂练习【空调维修系统 类图】
  4. Vue 2.0 v-for 响应式key, index及item.id参数对v-bind:key值造成差异研究
  5. django虚拟环境搭建
  6. jsx后缀的是什么文件_React核心特性-从JSX到虚拟DOM
  7. 一文读懂特征值分解EVD与奇异值分解SVD
  8. 哈理工OJ 1289 对数问题
  9. CSDN博客——修改字体、字号与颜色
  10. keil5选择ST-Link Debugger时候setting点击不了问题
  11. IEEEtran Latex模板五作者排版问题
  12. 2020腾讯校园实习生招聘面经(Offer):系统技术运维岗和后台开发岗
  13. Codeforces Global Round 21 E. Placing Jinas
  14. 写给区块链初创者的一封信
  15. 陆道培医疗冲刺香港上市:持续亏损,毛利率下滑,陆佩华为董事长
  16. 如何把新加的分区挂载到 根目录
  17. thx是什么意思_THX是什么意思
  18. 先写数据库还是先写缓存
  19. mapinfo 软件将 TAB 格式文件转 shp 图层
  20. 基于人脸识别的课堂签到管理系统2020,7,21

热门文章

  1. 自动驾驶7-4 自动驾驶汽车简介全面总结 Congratulations on Completing Course 1
  2. 容器技术Docker K8s 41 Serverless Kubernetes(ASK)详解-ASK集群管理
  3. 偏微分方程的引入及概述
  4. mysql让数据-1_mysql数据库基本操作1
  5. NLP Prompt范式,两种主要类型:填充文本字符串空白的完形填空(Cloze)prompt,和用于延续字符串前缀的前缀 (Prefix) prompt。
  6. admin is not in the sudoers file. This incident will be reported
  7. Axure实操笔记之axure炫酷的作者信息设置
  8. 做Data Mining,其实大部分时间都花在清洗数据
  9. 最大熵模的理解与最大熵模型逻辑回归相似转换条件
  10. “按字典序输出方案” 解决方法