首页 > 其他分享 >elasticsearch 集群

elasticsearch 集群

时间:2025-01-22 09:55:01浏览次数:1  
标签:name cluster 集群 分片 elasticsearch 节点

集群

单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。

  • 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点
  • 单点故障问题:将分片数据在不同节点备份(replica )

ES集群相关概念:

  • 集群(cluster):一组拥有共同的 cluster name 的 节点。

  • 节点(node) :集群中的一个 Elasticearch 实例

  • 分片(shard):索引可以被拆分为不同的部分进行存储,称为分片。在集群环境下,一个索引的不同分片可以拆分到不同的节点中

    解决问题:数据量太大,单点存储量有限的问题。

  • 主分片(Primary shard):相对于副本分片的定义。

  • 副本分片(Replica shard)每个主分片可以有一个或者多个副本,数据和主分片一样。

数据备份可以保证高可用,但是每个分片备份一份,所需要的节点数量就会翻一倍,成本实在是太高了!

为了在高可用和成本间寻求平衡,可以这样做:

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

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

现在,每个分片都有1个备份,存储在3个节点:

  • node0:保存了分片0和1
  • node1:保存了分片0和2
  • node2:保存了分片1和2

搭建ES集群

首先编写一个docker-compose.yml文件,内容如下:
 1 version: '2.2'
 2 services:
 3   es01:
 4     image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
 5     container_name: es01
 6     environment:
 7       - node.name=es01
 8       - cluster.name=es-docker-cluster
 9       - discovery.seed_hosts=es02,es03
10       - cluster.initial_master_nodes=es01,es02,es03
11       - bootstrap.memory_lock=true
12       - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
13     ulimits:
14       memlock:
15         soft: -1
16         hard: -1
17     volumes:
18       - data01:/usr/share/elasticsearch/data
19     ports:
20       - 9200:9200
21     networks:
22       - elastic
23   es02:
24     image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
25     container_name: es02
26     environment:
27       - node.name=es02
28       - cluster.name=es-docker-cluster
29       - discovery.seed_hosts=es01,es03
30       - cluster.initial_master_nodes=es01,es02,es03
31       - bootstrap.memory_lock=true
32       - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
33     ulimits:
34       memlock:
35         soft: -1
36         hard: -1
37     volumes:
38       - data02:/usr/share/elasticsearch/data
39     networks:
40       - elastic
41   es03: // 定义了集群的服务名称
42     image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
43     container_name: es03 // 定义了容器的名称
44     environment: // 定义了集群的环境
45       - node.name=es03 // 定义了节点的名称
46       - cluster.name=es-docker-cluster // 定义了集群的名称
47       - discovery.seed_hosts=es01,es02 // 定义了集群的种子节点
48       - cluster.initial_master_nodes=es01,es02,es03 // 定义了集群的初始主节点
49       - bootstrap.memory_lock=true // 锁定内存
50       - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
51     ulimits: // 定义了容器中进程的资源限制
52       memlock: // 指定了对内存锁定(locked memory)的限制
53         soft: -1 // 设置了内存锁定的软限制为无限制
54         hard: -1 // 设置了内存锁定的硬限制为无限制
55     volumes:
56       - data03:/usr/share/elasticsearch/data
57     networks:
58       - elastic
59 
60 volumes: // 定义数据卷
61   data01: // 定义了一个名为data01的数据卷
62     driver: local // 使用本地驱动, 意味着卷的数据将存储在宿主机的本地文件系统中,但具体的存储路径由 Docker 管理
63   data02:
64     driver: local
65   data03:
66     driver: local
67 
68 networks: // 自定义网络
69   elastic: // 定义了一个名为elastic的网络
70     driver: bridge // 桥接网络(bridge)
View Code

运行docker-compose.yml文件

docker-compose up -d

集群状态监控

kibana可以监控es集群,不过新版本需要依赖es的x-pack 功能,配置比较复杂。

这里推荐使用cerebro来监控es集群状态,官方网址:https://github.com/lmenezes/cerebro

解压即可使用,非常方便。

解压好的目录如下:

进入对应的bin目录:

双击其中的cerebro.bat文件即可启动服务。

访问http://localhost:9000 即可进入管理界面:

输入你的elasticsearch的任意节点的地址和端口,点击connect即可:

绿色的条,代表集群处于绿色(健康状态)。

创建索引库

1)利用kibana的DevTools创建索引库

在DevTools中输入指令:

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

2)利用cerebro创建索引库

利用cerebro还可以创建索引库:

填写索引库信息:

查看分片效果

回到首页,即可查看索引库分片效果:

 

标签:name,cluster,集群,分片,elasticsearch,节点
From: https://www.cnblogs.com/WarBlog/p/18683772

相关文章

  • es8 通过 rpm 部署集群
    系统配置ulimit设置echo"*softnofile65535">>/etc/security/limits.confecho"*hardnofile65535">>/etc/security/limits.confubuntu系统vim/etc/pam.d/susessionrequiredpam_limits.soelasticsearch.servicesed......
  • elasticsearch 数据同步
    数据同步elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的数据同步。异步通知流程如下:hotel-admin对mysql数据库数据完成增、删、改后,发送MQ消息hotel-demo监听MQ,接收到消息后完成elasti......
  • 安装集群的过程有哪些?
    Kubernetes(K8s)安装过程的步骤,概述如下:1.准备环境集群节点:确保至少有两台或更多的服务器,这些节点可以是物理机或云主机。集群需要至少一个控制平面节点和多个工作节点。操作系统:选定合适的操作系统(如Ubuntu、CentOS等)。容器运行时环境:安装Docker或其他容器运行时(如cont......
  • Kubernetes 集群中安装和配置 Kubernetes Dashboard
    前言上篇成功部署Kubernetes集群后,为了方便管理和监控集群资源,安装KubernetesDashboard显得尤为重要。KubernetesDashboard是一个通用的、基于Web的UI,旨在让用户轻松地部署容器化应用到Kubernetes集群,并对这些应用进行故障排查以及管理集群资源。通过Dashboard,你......
  • InfluxDB:单节点与集群部署实操及 java.lang.RuntimeException 报错的高效解决方案
    前言:在当今数据驱动的时代,时序数据的管理和分析变得愈发重要。InfluxDB作为一款高性能、开源的时序数据库,凭借其强大的写入性能、灵活的查询功能以及对大规模数据的高效处理能力,成为了众多开发者的首选工具。无论是用于监控系统、物联网设备数据存储,还是日志分析,InfluxDB......
  • MySQL不香吗,为啥还要Elasticsearch?
    一、先说说MySQL有啥优点MySQL这玩意,咱们都熟。行存储的代表,关系型数据库的中流砥柱。它有啥好处?老铁,太多了:数据一致性:事务支持那是杠杠的,ACID四大天王保护你数据不丢失。结构化查询:SQL语句一出,啥复杂查询都能搞定,分组、排序、子查询,随便玩。成熟稳健:发展几十年,社区大,文档多,踩......
  • ElasticSearch 学习课程入门(一)
    ​引子前文已经介绍了windows下如何安装ES,接下来的文章我会边学习边记录。OK,那就让我们开始吧。一、ES基础操作1、预备知识(1)RESTfulREST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。Web应用程序最重要的REST原则是,客户端和服务......
  • 太香了!一款轻量级的 Elasticsearch 可视化管理工具!
    大家好,我是Java陈序员。今天,给大家介绍一款轻量级的Elasticsearch可视化管理工具,可替代Kibana!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍Elasticvue——一个免费且开源的Elasticsearch在线可视化客户端,用于......
  • ElasticSearch Python 使用
    目录依赖下载连接elasticsearch配置忽略响应状态码示例ElasticsearchforPython之操作结果过滤ElasticSearch(es对象)Indices(es.indices)Cluster(集群相关)Node(节点相关)Cat(一种查询方式)Snapshot(快照相关)Task(任务相关)依赖下载pipinstallelasticsearch#豆瓣源pipinstall-ihtt......
  • ElasticSearch Java 使用
    目录创建工程,导入坐标创建索引index创建映射mapping建立文档document建立文档(通过XContentBuilder)建立文档(使用Jackson转换实体)1)添加jackson坐标2)创建Article实体3)代码实现查询文档操作关键词查询字符串查询使用文档ID查询文档查询文档分页操作批量插入数据分页查询查询......