elasticsearch 集群

摘要: elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他们搭建成为一个集群 基本配置 每个节点都要进行这样的配置: cluster.name: my-cluster 这个是配置集群的名字,为了能进行自动查找 node.name: "my-node-1" 这个是配置当前节点的名字,当然每个节点的名字都应该是唯一的 node.master: false node.data: true 这两个配置有4种配置方法,表示这个节点是否可以充当主节点,这个节点是否充当数据节点。

现在假设我们有3台es机器,想要把他们搭建成为一个集群

基本配置

每个节点都要进行这样的配置:

cluster.name: my-cluster

这个是配置集群的名字,为了能进行自动查找

node.name: "my-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"]

多播是需要看服务器是否支持的,由于其安全性,其实现在基本的云服务(比如阿里云)是不支持多播的,所以即使你开启了多播模式,你也仅仅只能找到本机上的节点。
单播模式安全,也高效,但是缺点就是如果增加了一个新的机器的话,就需要每个节点上进行配置才生效了。

浅谈elasticsearch 集群的更多相关文章

  1. mongo 3.4分片集群系列之一:浅谈分片集群

    这篇为理论篇,稍后会有实践篇. 这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mong ...

  2. 浅谈MySQL集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  3. 浅谈mysql集群

    一.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committe ...

  4. 浅谈Linux集群

      集群听起来好像就是一个很高端很的技术,其实不是的,那么集群其实就是一堆计算机的集合,给用户提供同一个服务的一组计算机,就称之为集群,对于用户而言好像就是一台计算机提供的服务,集群主要分为三大类, ...

  5. Elasticsearch集群节点配置详解

    注意:如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群. 2.elasticsearch- ...

  6. 解剖 Elasticsearch 集群 - 之二

    解剖 Elasticsearch 集群 - 之二 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论 Elasticsearch 是如何处理 3C ...

  7. 解剖 Elasticsearch 集群 - 之一

    解剖 Elasticsearch 集群 - 之一 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论底层的存储模型以及 CRUD(创建.读取.更新 ...

  8. Elasticsearch集群 管理

    第7章 深入Elasticsearch集群 启动一个Elasticsearch节点时,该节点会开始寻找具有相同集群名字并且可见的主节点.如 果找到主节点,该节点加入一个已经组成了的集群:如果没有找到, ...

  9. Ubuntu 14.04中Elasticsearch集群配置

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

随机推荐

  1. easyui---基础组件:panel

    加载easyui有两种方式:1种是html方式加载,1种是js加载. 要加载内容非常多时,用js,如果加载的东西比较少,用html就可以了. panel组件:面板 就是头 身展示 ,一个滚动条,几个关 ...

  2. Numpy基础学习与总结

    Numpy类型学习 1.数组的表示 import numpy as np In [2]: #numpy核心是高维数组,库中的ndarray支持多维数组,同时提供了数值运算,可对向量矩阵进行运算 In ...

  3. laravel composer install 报错解决方法

    composer install 报错信息: 报错原因参考:http://blog.csdn.net/yicixing7/article/details/55050140 解决方法: 把compose ...

  4. memory addresses

    php.net References in PHP are a means to access the same variable content    by different names. The ...

  5. 逆向基础(一) | WooYun知识库

    逆向基础(一) | WooYun知识库               逆向基础(一) | WooYun知识库 逆向基础(一)   View on drops.wooyun... Preview by Y ...

  6. FW 常见的性能测试工具有: loadRunner/netperf/httperf/apache_ab/Apache JMeter

    常见的性能测试工具有: loadRunner/netperf/httperf/apache_ab/Apache JMeter , 其中loadRunner属于付费软件,所以在这里不做介绍 netper ...

  7. King's Quest---poj1904(连通图缩点)

    题目链接:http://poj.org/problem?id=1904 题意:国王有n个儿子,每个儿子喜欢ki个女孩,国王想让王子与他喜欢的人结婚,就让巫师做一个列表出来,但是国王想知道王子能和哪些女 ...

  8. 洛谷P3806 点分治1 & POJ1741 Tree & CF161D Distance in Tree

    正解:点分治 解题报告: 传送门1! 传送门2! 传送门3! 点分治板子有点多,,,分开写题解的话就显得很空旷,不写又不太好毕竟初学还是要多写下题解便于理解 于是灵巧发挥压行选手习惯,开始压题解(bu ...

  9. 洛谷P3166 数三角形 [CQOI2014] 数论

    正解:数论 解题报告: 传送门! 很久以前做的题了呢,,,回想方法还想了半天QAQ 然后写这题题解主要是因为看到了好像有很新颖的法子,就想着,学习一下趴,那学都学了不写博客多可惜 首先港下最常规的方法 ...

  10. 一个简单的servlet查询

    首先创建一个dynamic web project. 写一个test.jsp: 新建一个servlet: 新建一个student.jsp: 显示如图: