搭建Es集群的方案

1.现阶段单节点的Es存在的问题

Q:先理解节点是什么?

A:一个节点是一个Elasticsearch的实例

在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。

2.Es集群的优点

采用ES集群,可将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等。
ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

例如

一个索引由5个主要分片组成,而每份主要分片又有一个副本,一共10份分片。副本分片对于可靠性和搜索性能很有益处。

Q:我们需要多大规模的集群?

A:ES JVM heap 最大可以设置32G 。
30G heap 大概能处理的数据量 10 T。如果内存很大如128G,可在一台机器上运行多个ES节点实例。
备注:集群规划满足当前数据规模+适量增长规模即可,后续可按需扩展。

Q:索引应该设置多少个分片?

A:ElasticSearch推荐的最大JVM堆空间是30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算.

例如, 你认为你的数据能达到200GB, 推荐你最多分配7到8个分片。
在开始阶段, 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片. 例如,如果你有3个节点,
则推荐你创建的分片数最多不超过9(3x3)个。当性能下降时,增加节点,ES会平衡分片的放置。

Q:分片应该设置几个副本?

A:一般一个分片有1-2个副本即可保证高可用。(副本多浪费存储空间、占用资源、影响性能)

3.集群搭建简单步骤(思路)

(1)安装三个ES服务器

(2)进入elasticsearch的config目录,修改elasticsearch.yml的配置

# ================= Elasticsearch Configuration ===================
# 配置es的集群名称, es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个
属性来区分不同的集群。
cluster.name: elasticsearch
# 节点名称(要修改)
node.name: node-001
# 指定该节点是否有资格被选举成为node
node.master: true
# 指定该节点是否存储索引数据,默认为true。
node.data: true
# 设置绑定的ip地址还有其它节点和该节点交互的ip地址,本机ip
network.host: 127.0.0.1
# 指定http端口,你使用head、kopf等相关插件使用的端口 (要修改)
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300。 (要修改)
transport.tcp.port: 9300
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
#因为下两台elasticsearch的port端口会设置成9301 和 9302 所以写入两台#elasticsearch地
址的完整路径
discovery.zen.ping.unicast.hosts:
["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
#如果要使用head,那么需要解决跨域问题,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"

项目中根据EE框架:

(1)在yml配置集群连接地址

#easy-es配置
easy-es:
  enable: true #默认为true,若为false则认为不启用本框架
  address : 192.168.1.15:9200 # es的连接地址,必须含端口 若为集群,则可以用逗号隔开 例如:127.0.0.1:9200,127.0.0.2:9200

(2)设置分片以及副本(两种方式)

a.在实体类上注解设置(结合Easy-Es)

@TableName(value="daily_document",shardsNum = 3,replicasNum = 2) // 0.9.11 + 版本,索引自动托管模式下亦可通过此注解设置索引的分片数和副本数

b.在创建索引的时候wrapper设置

// 设置分片及副本信息,3个shards,2个replicas,可缺省
wrapper.settings(3,2);

值得注意:分片数指定后不可变,除非重载索引。

4.搭建时可能遇到的问题,需要哪些支持

(1)IP访问限制

network.host: 192.168.XXX.XXX

如果设置成0.0.0.0则是不限制任何IP访问。一般在生产的服务器可能会限定几台IP,通常用于管理使用。

(2)node、cluster名称

集群中的所有节点的集群名称必须一样,只有集群名称一样才能组成一个逻辑集群。

cluster.name: mycluster

配置当前节点的名称

node.name: node-1

以此类推,完成另外两个节点的配置。cluster.name的名称必须保持一样。然后分别设置node.name。

(3)脑裂问题

一般10节点以上,会分配节点角色,就会出现主节点问题。需要处理的东西太多或者网络过于繁忙会重新选出一个新的主节点B,会出现AB数据不一致问题。目前暂时不会有该问题。

5.理想的效果

提高ES查询效率,可实现ES集群负载均衡

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐