ElasticSearch为什么要实现集群
在单台ElasticSearch服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。
我们可以采用ElasticSearch集群,将单个索引的分片到多个不同分布式物理机器上存储,从而实现高可用、
容错性等。ElasticSearch会自动选举实现主备服务器。
ElasticSearch如何解决高并发
ElasticSearch是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用分片机制、集群发现、分片负载
均衡请求路由。
Shards分片:代表索引分片,ElasticSearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个
大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引
创建后不能更改。
Replicas分片:代表索引副本,ElasticSearch可以设置多个索引的副本,副本的作用一是提高系统的容错性,
当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高ElasticSearch的查询效率,ElasticSearch
会自动对搜索请求进行负载均衡。
ElasticSearch集群核心原理分析
1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储,每个分片都会分布式
部署在多个不同的节点上,该分片成为primary shards主分片。
查看索引分片信息http://192.168.86.130:9200/mytest/_settings
注意:索引的主分片数量定义好后,不能修改
2、每一个主分片为了实现高可用,都会有自己对应的备份分片,主分片对应的备份分片不能存放同一台服务器上。
这就说明单台ElasticSearch服务器上是没有备份分片的。
document routing(数据路由)
当客户端发起创建document的时候,ElasticSearch需要确定这个document放在该索引哪个shard上。这个过
程就是数据路由。
路由算法:分片位置shard=hash(routing) % number_of_primary_shards
如果number_of_primary_shards在查询的时候取余发生变化,则无法获取到该数据。即:在查询的时候,底层
根据文档id%主分片数量获取分片位置
ElasticSearch集群搭建
第一步 准备三台服务器
服务器名称 IP地址
node-1 192.168.86.130
node-2 192.168.86.131
node-3 192.168.86.132
第二步 服务器集群配置
在/opt/application/es6.7.0下执行cd config命令后,再执行vi elasticsearch.yml命令,然后修改:
1、cluster.name: myes ###保证三台服务器节点集群名称相同
2、node.name: node-1 ###每个节点名称不一样,其他两台为node-2,node-3
3、network.host: 192.168.86.130 ###实际服务器的ip地址
4、discovery.zen.ping.unicast.hosts: ["192.168.86.130", "192.168.86.131","192.168.86.132"] ###多个服务集群ip
5、discovery.zen.minimum_master_nodes:1
6、关闭防火墙 systemctl stop firewalld.service
三台服务器都做同样的配置步骤,只有2和3不一样,其他一模一样。
注意
如果另两台服务器是克隆第一台服务器所得,那么data文件会导致数据不同步,报错误为:
failed to send join request to master ,因为克隆导致data文件也克隆啦,直接清除每台服务器data文件。即:在/opt/application/es6.7.0/data目录下执行rm -rf nodes,然后再重新启动每一台服务器。