ES集群
1.为什么需要集群
1)单点故障
2)高并发
3)海量数据
2.ES集群相关概念
ES 的1个集群中放多个节点,放多个shard(shard又分成主的shard和从shard)
ES cluster(1)—Node()-Shard()
ES节点类型Node有三种节点:
master Node:主节点,维护集群信息 索引库操作
data node:数据节点, 文档crud
client node:只负责处理用户请求
1、默认情况下,每个节点都有成为主节点的资格,也会存储数据,还会处理客户端的请求。- 在生产环境下,如果不修改ElasticSearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题
2、在一个生产集群中我们可以对这些节点的职责进行划分。建议集群中设置3台以上的节点作为master节点【node.master: true node.data: false】,这些节点只负责成为主节点,维护整个集群的状态。
3、再根据数据量设置一批data节点【node.master: false node.data: true】,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。
4、在集群中建议再设置一批client节点【node.master: false node.data: false】,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。
3.集群理解
3.1、shard&replica机制再次梳理以及单node环境中创建index图解①图解单node环境下创建index是什么样子的
(1)单node环境下,创建一个index,有3个primary shard,3个replica shard
(2)集群status是yellow
(3)这个时候,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的
(4)集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求
3.2、图解2个node环境下replica shard是如何分配的
(1)replica shard分配:3个primary shard,3个replica shard,2 node
(2)primary —> replica同步
(3)读请求:primary/replica
3.3、图解横向扩容过程,如何超出扩容极限,以及如何提升容错性
(1)primary&replica自动负载均衡,6个shard,3 primary,3 replica
(2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好
(3)扩容的极限,6个shard(3 primary,3 replica),最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最好
(4)超出扩容极限,动态修改replica数量,9个shard(3primary,6 replica),扩容到9台机器,比3台机器时,拥有3倍的读吞吐量
(5)3台机器下,9个shard(3 primary,6 replica),资源更少,但是容错性更好,最多容纳2台机器宕机;
(6)这里的这些知识点,你综合起来看,就是说,一方面告诉你扩容的原理,怎么扩容,怎么提升系统整体吞吐量;另一方面要考虑到系统的容错性,怎么保证提高容错性,让尽可能多的服务器宕机,保证数据不丢失。
3.4、图解Elasticsearch容错机制:master选举,replica容错,数据恢复
(1)6 shard,3 node
(2)master node宕机,自动master选举,red
(3)replica容错:新master将replica提升为primary shard,yellow
(4)重启宕机node,master copy replica到该node,使用原有的shard并同步宕机后的修改,green
4.搭建
4.1、环境准备
真实环境 – 虚拟 3 台电脑centos
NodeName | Web端口,客户端端口 |
---|---|
node-1 --es1 | 172.168.1.1:9200 172.168.1.1:9300 |
node-2 --es2 | 172.168.1.2:9200 172.168.1.2:9300 |
node-3 --es3 | 172.168.1.3:9200 172.168.1.3:9300 |
模拟环境
NodeName | Web端口,客户端端口 |
---|---|
node-1 | 127.0.0.1:9201 127.0.0.1:9301 |
node-2 | 127.0.0.1:9202 127.0.0.1:9302 |
node-3 | 127.0.0.1:9203 127.0.0.1:9303 |
使用新解压的es服务,开启跨域
步骤:
(1)拷贝三份ES服务
(2)修改每个内存配置1g
(3)修改三个节点配置
4.2、修改三个节点配置
配置参数详解:
cluster.name
集群名,自定义集群名,默认为elasticsearch,建议修改,因为低版本多播模式下同一网段下相同集群名会自动加入同一集群,如生产环境这样易造成数据运维紊乱。
node.name
节点名,同一集群下要求每个节点的节点名不一致,起到区分节点和辨认节点作用
node.master
是否为主节点,选项为true或false,当为true时在集群启动时该节点为主节点,在宕机或任务挂掉之后会选举新的主节点,恢复后该节点依然为主节点
node.data
是否处理数据,选项为true或false。负责数据的相关操作
http.port
对外访问的端口号,默认为9200,所以外界访问该节点一般为http://ip:9200/
transport.tcp.port
集群间通信的端口号,默认为9300
[“192.168.1.101”,“192.168.1.102”]
discovery.zen.minimum_master_nodes
最少的主节点个数,为了防止脑裂,最好设置为(总结点数/2 + 1)个
4.3、启动并测试
分别启动,创建索引,创建类型,插入文档
来源:CSDN
作者:脚板心
链接:https://blog.csdn.net/weixin_45546279/article/details/103651048