2015-10-10 09:56 by 轩脉刃, 999 阅读, 1 评论, 收藏编辑

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

 

elasticsearch 集群配置的更多相关文章

  1. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  2. elasticsearch集群配置 (Tobe Continue)

    elasticsearch集群配置 (Tobe Continue)   准备 首先需要在每个节点有可以正常启动的单节点elasticsearch   elasticsearch集群配置仅需要在elas ...

  3. ES2:ElasticSearch 集群配置

    ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...

  4. ElasticSearch(十):Elasticsearch集群配置

    我本地虚拟机配置了两台centos机器,分别安装了elasticsearch6.4.0版本,IP分别为:192.168.56.12, 192.168.56.13 分别修改两个机器上Elasticsea ...

  5. ElasticSearch集群配置

    因机器有限,本文只做单机3个节点的集群测试. 1.集群测试信息 elasticsearch版本:elasticsearch-2.4.1 windowns版本:win10 2.解压elasticsear ...

  6. Elasticsearch集群配置以及REST API使用

    ES安装与启动 在官网下载压缩包,解压后直接运行bin目录下的.bat文件即可.下载地址戳这里. ES配置集群 Elasticsearch配置集群很简单,只要配置一个集群的 名称 ,ES就会自动寻找并 ...

  7. Docker Elasticsearch 集群配置

    一:选用ES原因 公司项目有些mysql的表数据已经超过5百万了,各种业务的查询入库压力已经凸显出来,初步打算将一个月前的数据迁移到ES中,mysql的老数据就物理删除掉. 首先是ES使用起来比较方便 ...

  8. Elasticsearch集群搭建教程及生产环境配置

    Elasticsearch 是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性. 本教程将提供有关如何设置 Elasticsearch 集群的一些信息,并将添加一 ...

  9. Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)

    一.  ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...

随机推荐

  1. 初识vi编辑器

    vi基本概念既不介绍了,百度,wiki上都有.下面稍微总结下我所学的vi吧 1.vi分为三种状态:命令模式(command mode);插入模式(insert mode);底行模式(last line ...

  2. C. Polycarpus' Dice

    在每个位置讨论一下最大值最小值的取值范围就行 #include<cstdio> #include<iostream> #define maxn 200003 using nam ...

  3. ZOJ 1024 Calendar Game

    原题链接 题目大意:2001年11月4日是一个黄道吉日,有两个人做游戏,看谁先数到这个日子.可以往后数一天,比如2号到3号,30号到31号,也可以往后数一个月.给出一个起始的日子,求能否保证先开始游戏 ...

  4. C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。

    1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...

  5. leetcode 146. LRU Cache ----- java

    esign and implement a data structure for Least Recently Used (LRU) cache. It should support the foll ...

  6. spark新能优化之广播共享数据

    如果你的算子函数中,使用到了特别大的数据,那么,这个时候,推荐将该数据进行广播.这样的话,就不至于将一个大数据拷贝到每一个task上去.而是给每个节点拷贝一份,然后节点上的task共享该数据. 这样的 ...

  7. Android——网格布局仿计算器

    代码如下: <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android= ...

  8. Python 简单爬虫

    import os import time import webbrowser as web import random count = random.randint(20,40) j = 0 whi ...

  9. ExtJS4.2.1自定义主题(theme)样式详解

    (基于Ext JS 4.2.1版本) UI组件 学习ExtJS就是学习组件的使用.ExtJS4对框架进行了重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件. Ex ...

  10. java 将长度很长的字符串(巨大字符串超过4000字节)插入oracle的clob字段时会报错的解决方案

    直接很长的字符串插入到clob字段中会报字符过长的异常,相信大家都会碰到这种情况 String sql = "insert into table(request_id,table_name, ...