- ES为什么要实现集群
在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。
我们可以采用ES集群,将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等 - ES是如何解决高并发
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。
Shards 分片:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
Replicas分片:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
- ES集群核心原理分析:
每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储,每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards 主分片。
查看索引分片信息http://192.168.127.132:9200/basic/_settings
注意:索引的主分片数量定义好后,不能被修改(待会讲)
每一个主分片为了实现高可用,都会有自己对应的备分分片,主分片对应的备分片不能存放同一台服务器上,主分片可以和其他备分片存放在同一个node节点上。
- http://192.168.127.132:9200/basic/_settings
结果
"number_of_shards":"5" 主分片5个{"basic":{"settings":{"index":{"creation_date":"1567934971740","number_of_shards":"5","number_of_replicas":"1","uuid":"uwxVEjp0QoaOQAh4BFpYJw","version":{"created":"6040399"},"provided_name":"basic"}}}}
"number_of_replicas":"1" 副分片1个
- ElasticSearch集群环境搭建
准备3台服务器192.168.2.108、192.168.2.111、192.168.2.112
- 修改3台服务器配置如下
关闭防火墙 systemctl stop firewalld.servicecd /usr/local/elasticsearch6.4/config vi elasticsearch.yml ########################修改配置如下################# cluster.name: mytest ###三台服务器节点集群名称相同 node.name: node-1 #### 每个节点名称不一样 其他两台为node-2 ,node-3 network.host: 192.168.2.108 #### 当前部署的服务器ip地址 discovery.zen.ping.unicast.hosts: ["192.168.2.108", "192.168.2.111","192.168.2.112"] ###多个服务集群ip discovery.zen.minimum_master_nodes: 1 ###最小节点3台都设为1
- 启动elasticSearch
注意: 我的3台服务器是克隆过来的,/usr/local/elasticsearch6.4/data的文件也被克隆过来了,这样会导致数据不同步,一定要先删除3台服务器data目录下的nodes文件或者克隆前先删除: rm -rf nodes// 切换非root用户启动 su xiaobo // 启动 ./elasticsearch
- 测试
访问: http://192.168.2.108:9200/_cat/nodes?pretty
*号表示为master节点
在127节点添加数据
在133节点查询数据
停掉133节点测试