1. elasticsearch基本配置
elasticsearch集群重要的配置文件有两个:elasticsearch.yml
:elasticsearch集群的基本配置jvm.options
:jvm选项配置
1.1 elasticsearch.yml
es集群层级的配置仅由推选为主节点的elasticsearch.yml配置文件决定(优先级低于url动态配置),当主节点发生改变时,集群的配置也会随之改变,所以通常集群层面的配置,每个节点的yml文件都做相同设置。
Cluster:集群配置cluster.name
:elasticsearch集群名
Node:节点配置node.name
:节点名
node.master
:是否允许成为主节点:true/false,默认为true
node.data
:是否允许成为数据节点:true/false,默认为true
Paths:路径配置path.data
:数据存放路径
path.logs
:日志存放路径
Memory:内存配置bootstrap.memory_lock
:是否锁定内存空间:true/false
Network:网络配置network.host
:用于同时设置bind_host和publish_host两个参数
network.bind_host
:设置绑定的ip地址,支持ipv4和ipv6,默认为0.0.0.0
network.publish_host
:设置该节点与其它节点交互的ip地址,通常为vpcIP,如果不设置程序会自动判断
http.enabled
:设置是否使用http协议对外提供服务:true/false,默认为true,开启
http.port
:设置对外服务的http端口,默认为9200
http.max_content_length
:设置内容的最大容量,默认100mb
transport.tcp.port
:设置节点之间交互的tcp端口,默认是9300
transport.tcp.compress
:设置是否压缩tcp传输时的数据:true/false,默认为false,不压缩
Discovery:路由发现配置discovery.seed_hosts
:节点路由表
cluster.initial_master_nodes
:创建集群时的初始主节点列表,创建完成后失效
Various:杂项配置
1.2 jvm.options
jvm.options需要配置的地方主要是:
##JVM heap size
-Xms2g
-Xmx2g
根据机器内存的实际大小进行配置,标准建议是:
(1)把50%的内存分配给elasticsearch;
(2)分配的内存不超过32G(jvm在内存小于32G时会采用一个内存对象指针压缩技术,可以占用较少带宽)
2. 通过api配置集群(优先级高于elasticsearch.yml的配置)
elasticsearch允许通过RESTful api的settings来动态设置集群属性,包括transient和persistent两种方式:
- transient 临时:这些设置在集群重启之前一直会生效。一旦整个集群重启,这些设置就被清除;
- persistent 永久:这些设置永久保存,除非再次被手动修改。是将修改持久化到文件中,重启之后也不影响。
允许api动态配置的参数有:PUT /_cluster/settings { "persistent" : { "discovery.zen.minimum_master_nodes" : 2 //这个永久设置会存在索引里,全集群重启时依然生效。 }, "transient" : { "indices.store.throttle.max_bytes_per_sec" : "50mb" // 这个临时设置会在下一次全集群重启后被移除。 } }
cluster.max_shards_per_node
: es集群允许存放的最大分片数量,默认为1000
3. 节点发现机制
3.1 集群形成机制
elasticsearch是以主节点群(node.master=true)为核心构成的集群,主节点会保存所有其他主节点信息(存放在data目录),且所有主节点记录的主节点信息一致
在初始创建集群(即data目录为空)时,每个节点的主节点记录由参数cluster.initial_master_nodes
决定,由discovery.seed_hosts
找到其他主节点。
注意:
-
一个或多个主节点形成集群满足的条件为:在形成集群的等待时间里,相互之间通过
discovery.seed_hosts
找到了对方,且其中一个主节点找到的主节点数占该节点cluster.initial_master_nodes
列表的比例大于1/2(其中一个满足了条件就会形成集群,其他节点节点自动加入!!!) -
若每个节点配置的
cluster.initial_master_nodes
包含discovery.seed_hosts
无法找到的节点且无法找到的节点数目大于等于1/2,则该节点再也不能形成集群(即使之后有机会满足条件也不能形成集群),只能以add的形式加入其他集群 -
若在创建集群时同时形成了两个集群,若在形成集群阶段有连接两个集群的中间主节点加入,则该节点只能加入其中一个集群,且两个集群将相互独立;若超过等待时间后有中间主节点加入,则两个集群同时报错
-
cluster.initial_master_nodes
在elasticsearch节点未加入任何集群的时候才发挥作用,形成集群后,该参数须保持不变或跟集群主机点一致(cluster.initial_master_nodes允许添加多余的无用节点,但不能删除有用的节点)
3.2 节点加入机制
节点通过discovery.seed_hosts
找到在该集群中的主节点,即可加入集群(每个主机点会先经历形成集群的过程,
在形成集群后,如果某个节点重启:
-
主节点:以
data
目录下的集群主节点信息为依据构建主节点群 -
若该节点是通过
discovery.seed_hosts
列表的中间节点加入集群的,且discovery.seed_hosts
列表中的中间节点已经关闭,则该节点无法加入集群 -
若该节点是初始主节点,其他主节点通过add方式加入集群,当该节点关闭集群依旧没问题时,当该节点启动时,若
discovery.seed_hosts
无中间节点连接其加入集群,则该节点依旧无法加入集群