es配置项解释以及脑裂问题的解决方案
来源:互联网 发布:c语言数组循环左移 编辑:程序博客网 时间:2024/05/17 23:21
elasticsearch重要配置项解释:
- 集群的名字
cluster.name: test-elasticsearch
- 配置当前节点的名字,每个节点的名字都应该是唯一的
node.name: "node1"
- es存储数据的地方
path.data:: "/opt/elasticsearch/data"
- es存储日志的地方
path.logs: "/opt/elasticsearch/logs"
- 这两个配置有4种配置方法,表示这个节点是否可以充当主节点,以及点是否充当数据节点。具体的解释在 es迁移分片,重置主节点这个博客中有具体的介绍。
node.master: truenode.data: false
- 绑定host,0.0.0.0代表当前节点的ip
network.host: "0.0.0.0"
- 这个是对外提供http服务的端口
http.port: 9200
discovery.zen.ping.multicast.enabled: falsediscovery.zen.fd.ping_timeout: 100sdiscovery.zen.ping.timeout: 100sdiscovery.zen.minimum_master_nodes: 3discovery.zen.ping.unicast.hosts: - 172.18.1.22:9300 - 172.18.1.23:9300 - 172.18.1.24:9300 - 172.18.1.25:9300 - 172.18.1.26:9300
discovery.zen.ping.multicast.enabled 这个设置把组播的自动发现给关闭了,为了防止其他机器上的节点自动连入。discovery.zen.fd.ping_timeout和discovery.zen.ping.timeout是设置了节点与节点之间的连接ping时长discovery.zen.minimum_master_nodes 这个设置为了避免脑裂。比如5个节点的集群,如果设置为3,那么当一台节点脱离后,按照上面的情况重新选择master要超过3个投票才可以成为master节点,并不会出现脑裂现象。discovery.zen.ping.unicast.hosts 这个设置了自动发现的节点。action.auto_create_index: false 这个设置了自动发现的节点。
elasticsearch选举master机制
对所有可以成为master的节点根据nodeId排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。
如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举。
注意:这里理解的是有机会成为master节点的机器拥有投票权,如果仅仅是数据节点应该不具备选举权。
脑裂现象的产生
由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况称为集群脑裂(split-brain)现象。这个问题非常危险,因为两个新形成的集群会同时索引和修改集群的数据,这个时候就会出现数据冲突了。
可能产生“脑裂”的原因?
网络原因
内网一般不会出现此问题,可以监控内网流量状态。外网的网络出现问题的可能性大些。节点负载
由于master节点与data节点都是混合在一起的,所以当工作节点的负载较大(确实也较大)时,导致对应的ES实例停止响应,而这台服务器如果正充当着master节点的身份,那么一部分节点就会认为这个master节点失效了,故重新选举新的节点,这时就出现了脑裂;
这里最好是master节点和数据节点分开。回收内存
由于data节点上ES进程占用的内存较大,较大规模的内存回收操作也能造成ES进程失去响应。
脑裂现象的解决办法
- 推测出原因应该是由于节点负载导致了master进程停止响应,继而导致了部分节点对于master的选择出现了分歧。为此,一个直观的解决方案便是将master节点与data节点分离。
可以用上面说到的配置来限制其角色:
node.master: true node.data: false
其他节点设置,这样master节点和data节点就分开了
node.master: false node.data: true
discovery.zen.ping_timeout(默认值是3秒,可以设置为120s):默认情况下,一个节点会认为,如果master节点在3秒之内没有应答,那么这个节点就是死掉了,而增加这个值,会增加节点等待响应的时间,从一定程度上会减少误判。
discovery.zen.minimum_master_nodes(默认是1):这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1(向下取整),其中N是具有master资格的节点的数量。
- es配置项解释以及脑裂问题的解决方案
- es配置项解释以及脑裂问题
- .htaccess 配置以及相关问题的解释
- Git配置过程中出现的问题,以及解决方案
- 配置xampp中遇到的问题以及解决方案
- es配置中防止脑裂的配置
- hibernate 的一些基本配置以及解释
- ES以及ES插件的安装
- ES的JVM配置
- CentOS下Mysql数据库的安装与配置以及遇到的问题及其解决方案
- VS2005+DirectX 9平台配置出现的问题以及解决方案--Game Scripting Mastery
- 配置asp.net IIS服务器遇到的问题以及详细图例解决方案
- 配置asp.net IIS服务器遇到的问题以及详细图例解决方案
- 配置asp.net IIS服务器遇到的问题以及详细图例解决方案
- Debian7/ubuntu 配置cocos2d-x-3.5 以及遇到的问题及其解决方案
- 配置ssh无密码登录docker container以及遇到问题的解决方案
- es遇到的问题
- iis 经常出现的问题以及解决方案
- AngularJS基础知识
- 打造自己的JavaScript武器库
- 对播放内容的获取的处理
- Java反射简单篇
- window下python3里pip安装mysql-python失败问题回答解决
- es配置项解释以及脑裂问题的解决方案
- JDK不同操作系统的FileSystem(Windows)上篇
- Android系统版本与API等级对应关系表-到7.0
- 浅谈js函数继承模式之一:常规模式
- 6.14
- CheckBox的一些相关操作
- 代理模式
- target 安装 服务端和客户端 centos7 debian
- 宏常量与宏替换