集群
单机的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