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集群

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)
导航到包含 docker-compose.yml
文件的目录,运行docker-compose.yml文件
docker-compose up -d
docker compose up -d
docker-compose和docker compose 的区别
-
安装方式:
docker-compose up
需要单独安装 Docker Compose。docker compose up
是 Docker CLI 的内置插件,无需单独安装。
-
命令命名空间:
docker-compose up
使用独立的命名空间docker-compose
。docker compose up
使用docker
命令下的子命令compose
。
-
功能和行为:
- 两者在大多数情况下功能相似,但在某些高级用法或新特性上可能有所不同。
docker compose
通常会包含更多的改进和优化。 docker compose
可能支持更多的 Docker CLI 标准化选项和参数。
- 两者在大多数情况下功能相似,但在某些高级用法或新特性上可能有所不同。
集群状态监控
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还可以创建索引库:
填写索引库信息:
查看分片效果
回到首页,即可查看索引库分片效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-01-22 JavaWeb学习之HttpServletRequest 和 HttpServletResponse