前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建ElasticSearch集群

搭建ElasticSearch集群

作者头像
兜兜转转
发布2023-03-08 13:13:15
5210
发布2023-03-08 13:13:15
举报
文章被收录于专栏:CodeTime

1 单点的问题

单台服务器,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用。单点的elasticsearch也是一样,那单点的es服务器存在哪些可能出现的问题呢?

  • 单台机器存储容量有限
  • 单服务器容易出现单点故障,无法实现高可用
  • 单服务的并发处理能力有限

所以,为了应对这些问题,我们需要对elasticsearch搭建集群。

数据分片

首先,我们面临的第一个问题就是数据量太大,单点存储量有限的问题。我们可以把数据拆分成多份,每一份存储到不同机器节点(node),从而实现减少每个节点数据量。

数据备份

数据分片解决了海量数据存储的问题,但是如果出现单点故障,那么分片数据就不再完整,这又该如何解决呢? 就像大家为了备份手机数据,会额外存储一份到移动硬盘一样。我们可以给每个分片数据进行备份,存储到其它节点,防止数据丢失,这就是数据备份,也叫数据副本(replica)。 数据备份可以保证高可用,但是每个分片备份一份,所需要的节点数量就会翻一倍,成本实在是太高了! 为了在高可用和成本间寻求平衡,我们可以这样做:

  • 首先对数据分片,存储到不同节点
  • 然后对每个分片进行备份,放到对方节点,完成互相备份

这样可以大大减少所需要的服务节点数量,如图,我们以3分片,每个分片备份一份为例:

在这个集群中,如果出现单节点故障,并不会导致数据缺失,所以保证了集群的高可用,同时也减少了节点中数据存储量。并且因为是多个节点存储数据,因此用户请求也会分发到不同服务器,并发能力也得到了一定的提升。

2 搭建集群

集群需要多台机器,我们这里用一台机器来模拟,因此我们需要在一台虚拟机中部署多个elasticsearch节点,每个elasticsearch的端口都必须不一样。 我们计划集群名称为:heima-elastic,部署3个elasticsearch节点,分别是:

  • node-01:http端口9201,TCP端口9301
  • node-02:http端口9202,TCP端口9302
  • node-03:http端口9203,TCP端口9303

接下来的所有操作,记得要使用elastic用户来操作另外,建议先对当前虚拟机进行快照,以后好恢复成单点结构。

1. 清空elasticsearch中的数据

首先把已经启动的elasticsearch关闭,然后通过命令把之前写入的数据都删除。

1

rm -rf /elasticsearch/data

2. 修改elasticsearch配置

进入/home/elastic/elasticsearch/config目录,修改elasticsearch.yml文件

1

vim elasticsearch.yml

内容修改成这样:

12345678910111213141516171819202122232425262728

# ======================== Elasticsearch Configuration =========================# 集群名称,三台服务器保持一致cluster.name: heima-elastic## 节点名称,每个节点唯一标识node.name: node-01## 数据目录path.data: /home/elastic/elasticsearch-01/data## 日志目录path.logs: /home/elastic/elasticsearch-01/logs## 绑定的ip,0.0.0.0,代表任意ip地址均可访问network.host: 0.0.0.0## http协议的对外端口http.port: 9201## TCP协议对外端口,一般是集群内部通讯使用transport.tcp.port: 9301# # 集群中其它节点的ip及端口discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301", "127.0.0.1:9302","127.0.0.1:9303"]## 选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举。官方的推荐值是(N/2)+1# 即最少具备多少个个节点还能提供服务discovery.zen.minimum_master_nodes: 2

3. 复制elasticsearch节点

回到 /home/elastic目录,将elasticsearch目录修改为ealsticsearch-01

1

mv elasticsearch elasticsearch-01

然后输入下面命令,拷贝两份elasticsearch实例:

12

cp -r elasticsearch-01 elasticsearch-02cp -r elasticsearch-01 elasticsearch-03

进入elasticsearch-02/config目录,修改elasticsearch.yml中的下列配置:

1234567891011121314

# 节点名称node.name: node-02## 数据目录path.data: /home/elastic/elasticsearch-02/data## 日志目录path.logs: /home/elastic/elasticsearch-02/logs## http协议的对外端口http.port: 9202## TCP协议对外端口transport.tcp.port: 9302

注意到,注意是把01改成了02,但不是所有,切勿自动全局替换! 同理,进入elasticsearch-3/config/,修改elasticsearch.yml文件,与上面类似,不过修改成03

4. 启动并测试

分别启动3台elasticsearch,可以用后台启动方式(要使用elastic用户来操作):

123

./elasticsearch-01/bin/elasticsearch -d./elasticsearch-02/bin/elasticsearch -d./elasticsearch-03/bin/elasticsearch -d

通过启动运行chrome的 elasticsearch-head插件,可以查看到节点信息:

5. 启动错误

启动错误1:

原因是:是因为复制的elasticsearch文件夹下包含了data文件中示例一的节点数据,需要把示例二data文件下的文件清空。删除es集群data数据库文件夹下所有文件即可。

启动错误2:

由于elasticsearch6.8默认分配jvm空间大小为1g,虚拟机内存不够大,修改jvm空间分配128m或256m、512m,最少需要128m

6. 集群健康

可以通过elasticsearch-head插件查看集群健康状态,有以下三个状态:

  • green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
  • yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果更多的分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。
  • red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

3 测试集群中创建索引库

搭建集群以后就要创建索引库了,那么问题来了,当我们创建一个索引库后,数据会保存到哪个服务节点上呢?如果我们对索引库分片,那么每个片会在哪个节点呢? 这个要亲自尝试才知道。还记得创建索引库的API吗?

  • 请求方式:PUT
  • 请求路径:/索引库名
  • 请求参数:json格式:

12345

{ "settings": { "属性名": "属性值" }}

settings:就是索引库设置,其中可以定义索引库的各种属性,目前我们可以不设置,都走默认。 这里给搭建看看集群中分片和备份的设置方式,示例:

1234567

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

这里有两个配置:

  • number_of_shards:分片数量,这里设置为3
  • number_of_replicas:副本数量,这里设置为1,每个分片一个备份,一个原始数据,共2份。

通过chrome浏览器的head查看,我们可以查看到分片的存储结构:

可以看到,heima这个索引库,有三个分片,分别是0、1、2,每个分片有1个副本,共6份。

  • node-01上保存了0号分片和1号分片的副本
  • node-02上保存了1号分片和2号分片的副本
  • node-03上保存了0号分片和2号分片的副本
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 单点的问题
    • 数据分片
      • 数据备份
      • 2 搭建集群
      • 3 测试集群中创建索引库
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档