一、ES集群管理
ES是如何解决高并发
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心内容 分片机制、集群发现、分片负载均衡请求路由。
二、ES基本概念名词
Cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
Shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。(会根据取模算法进行存放分片,所以不能更改)
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
Recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
三、ES集群核心原理分析:
数据存储。
1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储。
每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards。
注意:索引的主分片primary shards定义好后,后面不能做修改。
documnet routing(数据路由)
当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。
路由算法:shard = hash(routing) % number_of_primary_shards
如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据
2、为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡。
注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。,主分片primary shards可以和其他replics shards存放在同一个node节点上。
四、环境搭建
1、首先准备三台虚拟机:
192.168.112.138
192.168.112.139
192.168.112.140
2、在机器上安装Elasticsearch环境
可以参考之前的博客:Linux环境下Elasticsearch6.4.3安装
3、三台服务器配置如下:
cd /usr/local/elasticsearch-6.4.3/config
vi elasticsearch.yml
cluster.name: myes ###保证三台服务器节点集群名称相同
node.name: node-1 #### 每个节点名称不一样 其他两台为node-1 ,node-2
network.host: 192.168.112.138 #### 实际服务器ip地址
discovery.zen.ping.unicast.hosts: ["192.168.112.138", "192.168.112.139","192.168.112.140"]##多个服务集群ip
discovery.zen.minimum_master_nodes: 1
另外两台需要修改node.name和network.host
192.168.112.139:
node.name: node-2
network.host: 192.168.112.139
192.168.112.140:
node.name: node-3
network.host: 192.168.112.140
由于之前启动过es,需要删除每台机器上面的data文件夹下的节点信息,不然数据不会同步
关闭防火墙:systemctl stop firewalld.service
使用普通用户启动es即可。
五、查看集群信息
浏览器访问:http://192.168.112.138:9200/_cat/nodes?pretty
显示结果如下:
可以看到138后面是*号,代表138为主节点,另外两台是从节点。
当主节点挂掉后,会从两台从节点中选取一个当主节点
把138停掉,然后访问:http://192.168.112.139:9200/_cat/nodes?pretty