Elasticsearch集群工作原理and配置文件说明

Elasticsearch 集群

一个节点会运行一个ES的实例,而一个集群则会包含拥有相同cluster.name的一个或者多个节点,这些节点共同工作来完成数据共享和负载分担。随着节点被添加到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。

集群中的一个节点会被选为主节点(Master Node),它负责管理整个集群的变化,如创建或者删除一个索引(Index),向集群中添加或者删除节点。主节点并不需要参与到文档级别的变化或者搜索中,这意味着虽然只有一个主节点,但它并不会随着流量的增加而成为瓶颈。任何节点都可以成为主节点。

对于用户,可以和集群中的任意节点进行通信,包括主节点。每个节点都知道每份文档的存放位置,并且能够将请求转发到持有所需数据的节点。用户通信的节点会负责将需要的数据从各个节点收集起来,然后返回给用户。以上整个过程都会由ES透明地进行管理。

Elasticsearch配置文件这给出了三种配置高性能集群拓扑结构的模式,如下:

1
2
3
4
5
6
7
8
9
10
11
A. 如果你想让节点从不选举为主节点,只用来存储数据,可作为负载器 
node.master: false
node.data: true

B. 如果想让节点成为主节点,且不存储任何数据,并保有空闲资源,可作为协调器
node.master: true
node.data: false

C. 如果想让节点既不称为主节点,又不成为数据节点,那么可将他作为搜索器,从节点中获取数据,生成搜索结果等
node.master: false
node.data: false

Elasticsearch配置文件说明

1、cluster.name: nongkaige-cluster
  • 这个是配置集群的名字,为了能进行自动查找
2、node.name: “nongkaige-node-1”
  • 这个是配置当前节点的名字,当然每个节点的名字都应该是唯一的
3、node.master: false node.data: true
1
2
3
1) 当master为false,而data为true时,会对该节点产生比较大的负荷;
2) 当master为true,而data为false时,该节点作为一个协调者;
3) 当master为false,data也为false时,该节点就变成了一个负载均衡器。
4、network.host: “192.168.10.110”
  • 绑定host,0.0.0.0代表所有IP,为了安全考虑,建议设置为内网IP
5、transport.tcp.port: 9300
  • 节点到节点之间通信时使用的tcp端口
6、http.port: 9200
  • 这个是对外提供http服务的端口,安全考虑,建议修改,不使用默认的9200
7、path.conf: /etc/elasticsearch
  • 配置文件所在位置,即elasticsearch.yml所在的位置
8、path.data: /a01/apps/elasticsearch/data
  • 分配给当前节点的索引数据所在位置(数据存放路径),可以设置多个位置,使得数据在文件级别跨越位置,这样在创建时就有更多的自由路径选择,也有利于性能提升,比如:
    path.data: /a01/apps/elasticsearch/data,/data/elasticsearch
9、path.work: /a01/apps/elasticsearch/word(不适用于elasticsearch5.0之后)
  • 临时文件存放位置
10、path.logs: /var/log/elasticsearch
  • 日志文件存放位置
11、path.plugins: /a01/apps/elasticsearch/plugins(不适用于elasticsearch5.0之后)
  • 插件安装存放位置
12、bootstrap.memory_lock: true
  • 锁定内存,不使用swap分区
13、transport.tcp.compress: true
  • 设置是否压缩TCP传输时的数据,默认为false
14、discovery.zen.ping.multicast.enabled: false(不适用于elasticsearch5.0之后)
discovery.zen.fd.ping_timeout: 100s
discovery.zen.ping.timeout: 100s(不适用于elasticsearch5.0之后)
discovery.zen.minimum_master_nodes: 2(单机ELK写1)
discovery.zen.ping.unicast.hosts:[“192.168.10.110”,”192.168.10.120”,”192.168.10.130”]
  • 这几个是集群自动发现机制

discovery.zen.ping.multicast.enabled: false

  • 这个设置把组播的自动发现给关闭了,为了防止其他机器上的节点自动连入。

discovery.zen.fd.ping_timeout和discovery.zen.ping.timeout
这个是设置了节点与节点之间的连接ping时长

discovery.zen.minimum_master_nodes: 2

  • 这个设置为了避免脑裂。比如3个节点的集群,如果设置为2,那么当一台节点脱离后,不会自动成为master。

discovery.zen.ping.unicast.hosts

  • 这个设置了自动发现的节点,单播模式

说明:

  • 多播是需要看服务器是否支持的,由于其安全性,其实现在基本的云服务(比如阿里云)是不支持多播的,所以即使你开启了多播模式,你也仅仅只能找到本机上的节点。单播模式安全,也高效,但是缺点就是如果增加了一个新的机器的话,就需要每个节点上进行配置才生效了
8、action.auto_create_index: false
  • 这个关闭了自动创建索引。为的也是安全考虑,否则即使是内网,也有很多扫描程序,一旦开启,扫描程序会自动给你创建很多索引。
9、在bin/elasticsearch里面增加两行:
1
2
ES_HEAP_SIZE=4g
MAX_OPEN_FILES=65535
  • 这两行设置了节点可以使用的内存数和最大打开的文件描述符数。
  • 好了,启动三个节点他们就会互相自己连起来成为集群了。

脑裂说明

大家都知道,elasticsearch集群有自动选主的功能,一旦集群建立,它就会自动选举出一个master,其它都为slave,如果master挂掉,集群中它们会自己决定再选举出一个master。

那么,问题来了,这里有个脑裂的问题,假设有5台机器,3台在一个机房,2台在另一个机房,当两个机房之间的联系断了之后,每个机房的节点会自己聚会,推举出一个主节点。这个时候就有两个主节点存在了,当机房之间的联系恢复了之后,这个时候就会出现数据冲突了。

解决的办法就是设置参数:

1
discovery.zen.minimum_master_nodes

为3(超过一半的节点数),那么当两个机房的连接断了之后,就会以大于等于3的机房的master为主,另外一个机房的节点就停止服务了,这时候再重启一下2台另外一个机房的elasticsearch服务即可

命令查看master节点

1
curl 192.168.10.110:9200/_cat/nodes?v

PWMltS.png

网页查看Elasticsearch集群状态

  • 浏览器访问:
  • IP:9200/_cluster/health?pretty

PWM1fg.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%