elasticsearch 集群
elasticsearch 集群
搭建elasticsearch的集群
现在假设我们有3台es机器,想要把他们搭建成为一个集群
基本配置
每个节点都要进行这样的配置:
cluster.name: baichebao-cluster
这个是配置集群的名字,为了能进行自动查找
node.name: "baichebao-node-1"
这个是配置当前节点的名字,当然每个节点的名字都应该是唯一的
node.master: false
node.data: true
这两个配置有4种配置方法,表示这个节点是否可以充当主节点,这个节点是否充当数据节点。
如果你的节点数目只有两个的话,为了防止脑裂的情况,需要手动设置主节点和数据节点。其他情况建议直接不设置,默认两个都为true.
network.host: "0.0.0.0"
绑定host,0.0.0.0代表所有IP,为了安全考虑,建议设置为内网IP
transport.tcp.port: 10800
节点到节点之间的交互是使用tcp的,这个设置设置启用的端口
http.port: 9700
这个是对外提供http服务的端口,安全考虑,建议修改,不用默认的9200
discovery.zen.ping.multicast.enabled: false discovery.zen.fd.ping_timeout: 100s discovery.zen.ping.timeout: 100s discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts: ["12.12.12.12:10801"]
这几个是集群自动发现机制
discovery.zen.ping.multicast.enabled 这个设置把组播的自动发现给关闭了,为了防止其他机器上的节点自动连入。 discovery.zen.fd.ping_timeout和discovery.zen.ping.timeout是设置了节点与节点之间的连接ping时长 discovery.zen.minimum_master_nodes 这个设置为了避免脑裂。比如3个节点的集群,如果设置为2,那么当一台节点脱离后,不会自动成为master。 discovery.zen.ping.unicast.hosts 这个设置了自动发现的节点。 action.auto_create_index: false
这个关闭了自动创建索引。为的也是安全考虑,否则即使是内网,也有很多扫描程序,一旦开启,扫描程序会自动给你创建很多索引。
在bin/elasticsearch里面增加两行:
ES_HEAP_SIZE=4g
MAX_OPEN_FILES=65535
这两行设置了节点可以使用的内存数和最大打开的文件描述符数。
好了,启动三个节点他们就会互相自己连起来成为集群了。
自动选举
elasticsearch集群一旦建立起来以后,会选举出一个master,其他都为slave节点。
但是具体操作的时候,每个节点都提供写和读的操作。就是说,你不论往哪个节点中做写操作,这个数据也会分配到集群上的所有节点中。
这里有某个节点挂掉的情况,如果是slave节点挂掉了,那么首先关心,数据会不会丢呢?不会。如果你开启了replicate,那么这个数据一定在别的机器上是有备份的。
别的节点上的备份分片会自动升格为这份分片数据的主分片。这里要注意的是这里会有一小段时间的yellow状态时间。
如果是主节点挂掉怎么办呢?当从节点们发现和主节点连接不上了,那么他们会自己决定再选举出一个节点为主节点。
但是这里有个脑裂的问题,假设有5台机器,3台在一个机房,2台在另一个机房,当两个机房之间的联系断了之后,每个机房的节点会自己聚会,推举出一个主节点。
这个时候就有两个主节点存在了,当机房之间的联系恢复了之后,这个时候就会出现数据冲突了。
解决的办法就是设置参数:
discovery.zen.minimum_master_nodes
为3(超过一半的节点数),那么当两个机房的连接断了之后,就会以大于等于3的机房的master为主,另外一个机房的节点就停止服务了。
对于自动服务这里不难看出,如果把节点直接暴露在外面,不管怎么切换master,必然会有单节点问题。所以一般我们会在可提供服务的节点前面加一个负载均衡。
自动发现
elasticsearch的集群是内嵌自动发现功能的。
意思就是说,你只需要在每个节点配置好了集群名称,节点名称,互相通信的节点会根据es自定义的服务发现协议去按照多播的方式来寻找网络上配置在同样集群内的节点。
和其他的服务发现功能一样,es是支持多播和单播的。多播和单播的配置分别根据这几个参数:
discovery.zen.ping.multicast.enabled: false discovery.zen.fd.ping_timeout: 100s discovery.zen.ping.timeout: 100s discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts: ["12.12.12.12:10801"]
多播是需要看服务器是否支持的,由于其安全性,其实现在基本的云服务(比如阿里云)是不支持多播的,所以即使你开启了多播模式,你也仅仅只能找到本机上的节点。
单播模式安全,也高效,但是缺点就是如果增加了一个新的机器的话,就需要每个节点上进行配置才生效了。
参考文档
http://kibana.logstash.es/content/elasticsearch/principle/auto-discovery.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-zen.html
from:http://www.cnblogs.com/yjf512/p/4865930.html
转载于:https://www.cnblogs.com/jiu0821/p/7405357.html
elasticsearch 集群相关推荐
- ELK教程1:ElasticSearch集群的部署
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 在分布式系统中,应用数量众多,应用调用链复杂,常常使用ELK作为日志收集.分析和展示的组件.本 ...
- 完美避坑!记一次Elasticsearch集群迁移架构实战
作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构.运维等方面有深入体验,实践 ...
- ElasticSearch(八):springboot集成ElasticSearch集群并使用
1. 集群的搭建 见:ElasticSearch(七) 2. springboot配置集群 2.1 创建springboot项目,使用idea创建,不过多介绍(创建项目时候建议不要勾选elastics ...
- 使用Docker搭建Elasticsearch集群环境
本篇文章首发于头条号单机如何搭建Elasticsearch集群?使用容器技术快速构建集群环境,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_te ...
- 【Elastic Stack学习】ELK日志分析平台(一)ELK简介、ElasticSearch集群
* ELK简介: ELK是Elasticsearch . Logstash.Kibana三个开源软件的缩写.ELK Stack 5.0版本之后新增Beats工具,因此,ELK Stack也改名为Ela ...
- 如何规划 ElasticSearch 集群规模和容量?
0.引言 实战中经常遇到的问题: 问题 1:请问下大家是如何评估集群的规模?比如数据量达到百万,千万,亿万,分别需要什么级别的集群,这要怎么评估? ps:自己搭建的测试环境很难达到这一级别. 问题 2 ...
- 剖析Elasticsearch集群系列第二篇 分布式的三个C、translog和Lucene段
http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part02?utm_source=infoq&utm ...
- 剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作
http://www.infoq.com/cn/articles/analysis-of-elasticsearch-cluster-part01?utm_source=infoq&utm_c ...
- 六,搭建elasticsearch集群搭建
@Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...
- 七、SpringBoot整合elasticsearch集群
@Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...
最新文章
- python 人工智能库_人工智能与Python库的关系
- python语言的翻译方式是什么-python自动翻译实现方法
- Linux运维之网络运维
- Intel Realsense D435 python 测试是否能将pipeline、config、enable、start单独提出wait for frames循环外?(不能,配置必须全部在外)
- ecplise常用快捷键
- Matlab xlim ylim zlim函数
- 堪称暴力美学的可视化大屏是怎么做的?附无代码硬核教程
- php strstr 与 str_replace区别,[PHP]strstr(),substr(),str_replace(),parse_str()
- 阿姆斯特丹大学博士招生,月薪2.3K-3K 欧,QUVA Lab 计算机视觉与机器学习方向...
- “国际贸易付款方式”汇总解读!
- js判断数组是否相等的方法
- endnote软件X9下载安装
- 测开面试题大全及答案(含测试基础|实例介绍|软件本地化测试等)
- 免费公网动态IP方案
- 人工智能、机器学习和模式识别以及神经网络
- 红帽linux7.2安装教程,RHEL 6.2安装(超级详细图解教程) | 系统运维
- 一次让人晕到吐血的接包经历
- 09 Softmax回归
- 基于Wi-Fi的室内定位在美团总部的实践和应用
- 只有自我负责,才能真正增长自己的力量
热门文章
- 为什么下拉框拉不下来_为什么分手后对方不删除拉黑你,但又不和你复合?
- 数学建模_混合赌博模型
- 信用评分卡 (part 6 of 7)
- php中级联,php级联
- 算法:Valid Parentheses(有效的括号)
- linux多进程子进程继承,Linux-fork调用后,父进程的线程是否会被子进程继承?
- 30. 与所有单词相关联的字串
- FP-growth发现频繁项集
- flask不运行主函数解决方法
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决办法