【ElasticSearch】ES集群搭建、监控、故障转移

这篇具有很好参考价值的文章主要介绍了【ElasticSearch】ES集群搭建、监控、故障转移。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、ES集群介绍

单机的ES做数据存储与搜索,必然面临两个问题:

  • 海量数据存储问题
  • 单点故障问题

因此,考虑使用ES集群:

  • 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点。如此,ES的存储能力就是所有节点存储能力的总和
    【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

  • 单点故障问题:将分片数据在不同的节点备份(replica),即主分片和副本分片不能在同一个节点
    【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

2、搭建ES集群

利用3个docker容器模拟3个es的节点:

  • 首先编写 docker-compoes.yml文件,内容:
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01  
      - cluster.name=es-docker-cluster  # 这里集群名称一样,集群名称相同的节点会形成集群
      - discovery.seed_hosts=es02,es03  # 集群中另外两个节点的IP,但这里我用容器模拟了,用容器名就能互连
      - cluster.initial_master_nodes=es01,es02,es03  # 集群有主从之分,这三个节点参与选举,产生主节点
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic  # 网络
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
	ports:
      - 9201:9200  # 宿主机9200已用,这里+1
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic
	ports:
      - 9202:9200

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge
  • es运行需要修改一些linux系统权限,修改/etc/sysctl.conf文件:
vi /etc/sysctl.conf
  • 添加内容:
vm.max_map_count=262144
  • 生效配置:
sysctl -p
  • 通过docker-compose启动集群:
docker-compose up -d

# yum install docker-compose

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

3、集群状态监控

kibana可以监控es集群,但新版需要依赖es的x-pack功能,配置复杂,这里用cerebro来监控es集群状态

# 官网
https://github.com/lmenezes/cerebro

# 网盘
链接:https://pan.baidu.com/s/1dj4HgTZsVfFSe6-hR2ydnA?pwd=9527 
提取码:9527
  • 下载完成后解压
    【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

  • 进入bin,双击cerebro.bat
    【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

  • 访问localhost:9000,输入任一节点的地址(地址后面有个/)
    【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
    【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

创建索引库

集群中,每个索引库的分片数量、副本数量都是在创建索引库时指定的,并且分片数量一旦设置以后无法修改。

语法如下:

PUT /test
{
  "settings": {
    "number_of_shards": 3, // 分片数量
    "number_of_replicas": 1 // 副本数量
  },
  "mappings": {
    "properties": {
      // mapping映射定义 ...
    }
  }
}

在cerebro中创建索引库:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

填索引库名和分片数、副本数:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

查看overview,实线为主分片,虚线为副本分片:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

4、集群职责及脑裂

集群节点职责:

ES集群中,不同的节点有不同的职责:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

以上角色的默认值都为ture,但不同的角色职责不同,对硬件的要求也不同,有的对CPU要求高,有的对硬盘要求高,因此,应该每个节点都有自己独立的角色。举个例子如下图,每个节点专门干一件事:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

脑裂:

默认情况下,每个节点都是master eligible节点,因此一旦master节点宕机,其它候选节点会选举一个成为主节点。但当主节点只是与其他节点有暂时的网络通信故障时:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

备选节点联系不上主节点,以为主节点宕机,选举出一个新的master,由此产生两个主节点,当网络恢复,就会出现数据不一致的情况。

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
为了避免脑裂,需要要求选票超过 ( eligible节点数量 + 1 )/ 2 才能当选为主,因此eligible节点数量最好是奇数。对应配置项是discovery.zen.minimum_master_nodes 。在es7.0以后,已经成为默认配置,因此一般不会发生脑裂问题

5、分布式新增和查询流程

没启动kibana,直接调接口插入三条doc:(在9201,即es01节点插入数据)

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
查询文档,不管在9201、9202、9203,三个节点都能查到数据:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
添加explain参数来看分片情况:三条数据在不同的分片

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

这是协调节点工作的结果,当新增文档时,它会将数据保存到不同分片,保证数据均衡。而coordinating node确实数据存到哪个分片是根据:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

  • _routing默认是文档的id
  • number_of_shards即分片数量,算法与分片数量有关,因此索引库一旦创建,分片数量不能修改

存储和查询都依赖这个算法,因此分片数量不能再变,否则按某个分分片数量存进去后,分片数量改变,等查的时候按这个算法计算找文档就找不到了。

新增文档流程:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
当然,根据id查询,还是这么个流程。但如果不知道文档id,该怎么查,比如match_all

ES集群的分布式查询

  • scatter phase:分散阶段,coordinating node会把请求分发到每一个分片
  • gather phase:聚集阶段,coordinating node汇总data node的搜索结果,并处理为最终结果集返回给用户

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
coordinating node可能为其中任一个节点,就像上面match_all查询,不管访问哪个节点,最终都可以拿到三条数据。

6、ES故障转移

集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,即故障转移。比如有条数据,存于三个节点的主分片分别为P-0、P-1、P-2,副本为R-0、R-1、R-2,此时node1节点宕机:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

当然R0+P1+P2还是可以凑出这条数据,但此时数据已经不安全,需要迁移:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

实际模拟一下,此时三个节点都正常,数据存在三分节点上:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

//停掉es1容器,模拟节点宕机
docker stop es01

查看集群情况:变黄了,不健康了,数据分片0有两个(主副都在),但1、2分片都只有一个了
【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

再等等,开始了数据迁移了:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎
重新启动es01,查看效果:

docker start es01

分片回去了,数据还是均衡的,但es01已不再是主节点。这倒有点想Redis的哨兵模式。

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎

总结:

【ElasticSearch】ES集群搭建、监控、故障转移,ElasticSearch,elasticsearch,大数据,搜索引擎文章来源地址https://www.toymoban.com/news/detail-560874.html

到了这里,关于【ElasticSearch】ES集群搭建、监控、故障转移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 袁庭新ES系列14节 | 搭建Elasticsearch集群

    单节点的Elasticsearch需要在处理大量数据的时候需要消耗大量内存和CPU资源,数据量大到一定程度就会产生处理瓶颈,甚至会出现宕机。 为了解决单节点ES的处理能力的瓶颈及单节点故障问题,我们考虑使用Elasticsearch集群。接下来袁老师带领大家学习如何搭建Elasticsearch的集群

    2024年04月17日
    浏览(119)
  • Elasticsearch--01.ES8.1.0集群搭建

    一、搭建ES集群 1.集群环境安装 本集群使用Centos7.5操作系统,2G 2C 60G(如果主机好点的节点配置可以搞高点) 分别修改三台集群服务器配置:  1.1.修改系统配置文件/etc/security/limits.conf 1.2.修改/etc/sysctl.conf 1.3.# sysctl -p  重新加载 集群服务器如下: 机器地址 节点名称 节点角

    2024年02月12日
    浏览(38)
  • 【ElasticSearch系列-06】Es集群架构的搭建以及集群的核心概念

    ElasticSearch系列整体栏目 内容 链接地址 【一】ElasticSearch下载和安装 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【三】ElasticSearch的高级查询Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月04日
    浏览(60)
  • 磐基2.0搭建es集群 k8s安装elasticsearch集群

    参考: k8s安装elasticsearch集群_k8s部署elasticsearch集群_MasonYyp的博客-CSDN博客 1 环境简述搭建es集群需要使用的技术如下:k8s集群、StatefulSet控制器、Service(NodePort)服务、PV、PVC、volumeClaimTemplates(存储卷申请模板)。StatefulSet控制器创建的Pod适合用于分布式存储系统,它最大的特

    2024年02月09日
    浏览(39)
  • 【Elasticsearch】从零开始搭建ES8集群并且集成到Springboot,更好的服务电商类等需要全文索引的项目(一)

    最近公司的电商项目越来越庞大,功能需求点也越来越多,各种C端对查询和检索的要求也越来越高,是时候在项目中引入全文检索了。 ElasticSearch 是一个基于 Lucene 的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,并且是基于Java 开发的,我记得很久之前ES还不

    2024年02月15日
    浏览(48)
  • [] ElasticSearch集群故障案例分析: 警惕通配符查询

    [携程旅行网: 吴晓刚]  许多有RDBMS/SQL背景的开发者,在初次踏入ElasticSearch世界的时候,很容易就想到使用(Wildcard Query)来实现模糊查询(比如用户输入补全),因为这是和SQL里like操作最相似的查询方式,用起来感觉非常舒适。然而近期我们线上一个搜索集群的故障揭示了,滥

    2024年02月07日
    浏览(44)
  • Windows故障转移集群

    Windows2012作为根域 两台Windows2008加入域 创建三台Windows 分别是Windows2012和两台Windows2008  并选择其环境   创建三个十g的卷,连接至Windows2012   清理三台主机的后台数据 然后修改三台主机的IP  本机IP要相对应 Windows2008-1主机IP 第二块网卡不需要填写网关及dns服务器IP地址 Windo

    2024年02月12日
    浏览(41)
  • ElasticSearch监控与告警:实时监控集群健康状态

    ElasticSearch是一个开源的搜索和分析引擎,它可以为应用程序提供实时的、可扩展的搜索功能。ElasticSearch是一个分布式系统,它可以在多个节点上运行,以实现高可用性和高性能。在生产环境中,监控和告警是关键的,以确保集群的健康状态和性能。 在本文中,我们将讨论

    2024年02月20日
    浏览(41)
  • MGR 主备集群实现异步连接故障转移

    MySQL 8.0.22 开始 ,支持异步连接故障切换机制,在现有主从复制连接失败后,自动建立到新主的异步复制连接。 MySQL 8.0.23 开始 ,异步连接故障切换机制还支持组复制拓扑,通过自动监视组成员身份的更改并区分主节点和从节点,在组复制主节点故障选出新主节点后,自动建

    2024年02月16日
    浏览(38)
  • 【ES专题】ElasticSearch集群架构剖析

    个人感觉集群架构其实都有点大同小异,看了这么多集群架构之后,感觉无非要考虑的地方就几点: 使用何种通信协议去同步数据,互相通信 采用何种策略同步数据(异步还是同步) 如何保证一致性,保证到什么程度(【最终一致性】 or【实时一致性 / 强一致性】) 使用何

    2024年02月04日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包