本文内容

  • 背景
  • ES集群中第一个master节点
  • ES slave节点

本文总结 Elasticsearch(以下简称ES)搭建集群的经验。以 Elasticsearch-rtf-2.2.1 版本为例。

我搭过三个集群:研究ELK时搭了一个;测试环境搭了一个;生产环境搭了一个。回想起来,搭建这三个集群时遇到的问题都不一样(我这么说,主要针对集群中节点发现,以及master问题,而不是es启动不起来或报错等问题)~

  • 研究ELK时,搭建ES集群倒是很顺利,原因很简单,先从一台机器开始的;
  • 可是测试环境搭建集群时,遭遇新加入节点一直不能发现 master 节点,或是集群节点出现都选举自己为 master 这两个情况,因为,节点都是陆续启动的,配置不当,是会出问题;
  • 等到在生产环境搭建集群时,遭遇无法选举出 master 节点的情况。ES head 和 kopf 两个插件都不可用,因为,既然集群没有选举出 master 节点,显然,整个集群是用不了的。而前面的情况,head 和 kopf 插件还是能用的,但能用,意义也不大~

总结起来,搭建集群,应该注意两个问题。首先,当然是 Elasticsearch.yml 配置是否正确;再就是你的操作方式。比如节点启动步骤等。

因为,如果搭建一个集群,那么必须保证集群有一个 master 节点,一般来说,第一个启动的节点,一定是 master。然后,分别启动其他节点,这些节点就会找到 master 节点,而 master 节点,也会发现这些节点。

  • 因此,配置集群中的第一个master节点,务必简单(简单到什么程度,后面再说),先启动它,它会立刻成为 master 节点。之后,再配置其他节点,最好直接告诉它们,可能的 master 节点是什么,然后启动他们,它们就会发现 master,而 master 节点,也会发现新加入的节点。
  • 否则,如果第一个启动的节点,配置过于复杂(条件苛刻),造成它不能成为 master 节点,那么,整个集群会失败。

稍后,你再配置节点时,可以采用更高级、复杂点的配置,就不会有什么问题了~

所以,我才强调,ES 集群中第一个 master 节点的配置务必简单,以后再调整。

背景


假设,我们想搭建这样一个名为 myfirstcluster 的ES集群,它有两个节点:

节点 主机名 是否为 master
192.168.1.2 es-01
192.168.1.3 es-02

ES集群中第一个master节点


最简单的 ES master 节点配置如下。该配置文件,是一个完整的 ES 配置文件,所以很长。我顺便翻译成了中文。

1: # ======================== Elasticsearch Configuration =========================

   3: # 注意: Elasticsearch 大多数设置都有默认值.
   5: #
   7: #
   9: # <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
  11: # ---------------------------------- 集群 -----------------------------------
  13: # 集群名称:
  15: cluster.name: mycluster
  17: # ------------------------------------ 节点 ------------------------------------
  19: # 节点名称:
  21: node.name: es-01
  23: node.data: true
  25: # 为节点添加自定义属性,如机架:
  27: # node.rack: r1
  29: # ----------------------------------- 路径 ------------------------------------
  31: # 存放数据的目录 (多个目录用逗号分隔):
  33: # path.data: /path/to/data
  35: # 日志文件目录:
  37: # path.logs: /path/to/logs
  39: # ----------------------------------- 内存 -----------------------------------
  41: # 启动时锁定内存:
  43: # bootstrap.mlockall: true
  45: # 确保设置了 `ES_HEAP_SIZE` 环境变量, 大小为系统内存的一半,
  47: #
  49: #
  51: #
  53: #
  55: #
  57: http.port: 9200
  59: tcp.port: 9300
  61: # 更多信息, 参见如下链接:
http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
  64: # --------------------------------- 节点发现 ----------------------------------
  66: # 当新节点加入时,传递一个主机的初始化列表以完成节点发现:
  68: #
  70: #
  72: #
  74: #
  76: # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
  78: # ---------------------------------- 网关 -----------------------------------
  80: # 当整个集群重新启动后, 只有 N 个节点启动了, 集群才会恢复,否则将阻塞:
  82: # gateway.recover_after_nodes: 2
  84: # 更多信息, 参见如下链接:
http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
  87: # ---------------------------------- 其他 -----------------------------------
  89: # 禁止在一个系统上启动多个节点:
  91: # node.max_local_storage_nodes: 1
  93: # 当删除 index 是必需显式名称:
  95: # action.destructive_requires_name: true
  96:  
  98:   analysis:
 100:       my_pinyin:
 102:         first_letter: prefix
 104:       pinyin_first_letter:
 106:         first_letter: only
 108:         type: mmseg
 110:       mmseg_complex:
 112:         seg_type: complex
 114:         type: mmseg
 116:       semicolon_spliter:
 118:         pattern: ";"
 120:         type: pattern
 122:       ngram_1_to_2:
 124:         min_gram: 1
 126:       ngram_1_to_3:
 128:         min_gram: 1
 130:     filter:
 132:         max_gram: 10
 134:         type: nGram
 136:         max_gram: 10
 138:         type: nGram
 140:         max_gram: 10
 142:         type: nGram
 144:         min: 2
 146:         type: length
 148:         min: 3
 150:         type: length
 152:         type: pinyin
 154:     analyzer:
 156:         type: custom
 158:         - lowercase
 160:       lowercase_keyword_ngram_min_size1:
 162:         filter:
 164:         - stop
 166:         - unique
 168:       lowercase_keyword_ngram_min_size2:
 170:         filter:
 172:         - min2_length
 174:         - trim
 176:         tokenizer: nGram
 178:         type: custom
 180:         - lowercase
 182:         - stop
 184:         - unique
 186:       lowercase_keyword_ngram:
 188:         filter:
 190:         - stop
 192:         - unique
 194:       lowercase_keyword_without_standard:
 196:         filter:
 198:         tokenizer: keyword
 200:         type: custom
 202:         - lowercase
 204:       ik:
 206:         - ik_analyzer
 208:       ik_max_word:
 210:         use_smart: true
 212:         type: ik
 214:       mmseg:
 216:         - mmseg_analyzer
 218:       mmseg_maxword:
 220:         filter:
 222:         tokenizer: mmseg_maxword
 224:         type: custom
 226:         - lowercase
 228:       mmseg_simple:
 230:         filter:
 232:         tokenizer: mmseg_simple
 234:         type: pattern
 236:       pct_spliter:
 238:         pattern: "[%]+"
 240:         type: snowball
 242:       simple_english_analyzer:
 244:         tokenizer: whitespace
 246:         - standard
 248:         - snowball
 250:         type: custom
 252:         filter:
 254:       pinyin_ngram_analyzer:
 256:         tokenizer: my_pinyin
 258:         - lowercase
 260:         - trim
 262:       pinyin_first_letter_analyzer:
 264:         tokenizer: pinyin_first_letter
 266:         - standard
 268:       pinyin_first_letter_keyword_analyzer:
 270:         - pinyin_first_letter_analyzer_keyword
 272:         tokenizer: keyword
 274:         - pinyin_first_letter
 276:       path_analyzer: #used for tokenize :/something/something/else
 278:         tokenizer: path_hierarchy 
 279:  
 281: index.analysis.analyzer.default.type: ik 
 282:  
 284: # rtf.filter.redis.port: 6379

说明:

  • 第15行,指定集群名称 myfirstcluster;
  • 第21行,指定节点名称,最好写主机名;
  • 第22和23行,指定该是否可能为master节点,以及是否为数据节点。ES的所说master节点,其实弱化了很多,仅仅就是为了节点发现和选举master节点而已,它甚至都可以不用来保存数据。

因此,看你的规划,完全可以让一个 master 节点,不保存任何数据;

  • 第54行,指定节点IP地址,192.168.1.2;
  • 第57行,指定HTTP端口,比如,head、kopf插件等插件,都使用该端口。事实上,你可以指定从 92开头的任何端口;
  • 第59行,指定集群内部通信的端口,比如,节点发现都使用该端口。事实上,你可以指定93开头的任何端口,该行也可以写成“transport.tcp.port: 9300”;

这7行配置,在我看来,针对集群中第一个master节点,必须配置正确的。其他配置,可以暂时不用。

其中,第57行和第59行,实际上,一台物理机,是可以运行多个 ES,只需要指定不同的配置文件即可。

  • 第69行,指定节点初始化列表,因为该节点是集群第一台机器,并且要当 master,所以写”127.0.0.1:9300”,端口号,就是你在第59行指定的端口。相关资料显示,也可以不指定端口,那是不是会93开头的所有端口扫描一下呢?;
  • 从97行开始,是配置ES的分词。

slave 节点


Slave 节点配置如下。该配置文件内容只列出了配置项,但是是完整的。

1: # ======================== Elasticsearch Configuration =========================

   3: # ---------------------------------- Cluster -----------------------------------
   5: # Use a descriptive name for your cluster:
   7: cluster.name: myfirstcluster
   9: # ------------------------------------ Node ------------------------------------
  11: # Use a descriptive name for the node:
  13: node.name: es-02
  15: node.data: true
  17: # ----------------------------------- Paths ------------------------------------
  19: # Path to directory where to store the data (separate multiple locations by comma):
  21: # path.data: /path/to/data
  23: # Path to log files:
  25: # path.logs: /path/to/logs
  27: # ----------------------------------- Memory -----------------------------------
  29: # ...
  31: # ---------------------------------- Network -----------------------------------
  33: # Set the bind address to a specific IP (IPv4 or IPv6):
  35: network.host: 192.168.1.3
  37: # Set a custom port for HTTP:
  39: http.port: 9200
  41: #
  43: #
  45: # The default list of hosts is ["127.0.0.1", "[::1]"]
  47: discovery.zen.ping.unicast.hosts: ["192.168.1.2:9300"]
  49: # ---------------------------------- Gateway -----------------------------------
  51: # ...
  53: # ---------------------------------- Various -----------------------------------
  55:  
  57:   analysis:
  59:       my_pinyin:
  61:         first_letter: prefix
  63:       pinyin_first_letter:
  65:         first_letter: only
  67:         type: mmseg
  69:       mmseg_complex:
  71:         seg_type: complex
  73:         type: mmseg
  75:       semicolon_spliter:
  77:         pattern: ";"
  79:         type: pattern
  81:       ngram_1_to_2:
  83:         min_gram: 1
  85:       ngram_1_to_3:
  87:         min_gram: 1
  89:     filter:
  91:         max_gram: 10
  93:         type: nGram
  95:         max_gram: 10
  97:         type: nGram
  99:         max_gram: 10
 101:         type: nGram
 103:         min: 2
 105:         type: length
 107:         min: 3
 109:         type: length
 111:         type: pinyin
 113:     analyzer:
 115:         type: custom
 117:         - lowercase
 119:       lowercase_keyword_ngram_min_size1:
 121:         filter:
 123:         - stop
 125:         - unique
 127:       lowercase_keyword_ngram_min_size2:
 129:         filter:
 131:         - min2_length
 133:         - trim
 135:         tokenizer: nGram
 137:         type: custom
 139:         - lowercase
 141:         - stop
 143:         - unique
 145:       lowercase_keyword_ngram:
 147:         filter:
 149:         - stop
 151:         - unique
 153:       lowercase_keyword_without_standard:
 155:         filter:
 157:         tokenizer: keyword
 159:         type: custom
 161:         - lowercase
 163:       ik:
 165:         - ik_analyzer
 167:       ik_max_word:
 169:         use_smart: false
 171:         type: ik
 173:       mmseg:
 175:         - mmseg_analyzer
 177:       mmseg_maxword:
 179:         filter:
 181:         tokenizer: mmseg_maxword
 183:         type: custom
 185:         - lowercase
 187:       mmseg_simple:
 189:         filter:
 191:         tokenizer: mmseg_simple
 193:         type: pattern
 195:       pct_spliter:
 197:         pattern: "[%]+"
 199:         type: snowball
 201:       simple_english_analyzer:
 203:         tokenizer: whitespace
 205:         - standard
 207:         - snowball
 209:         type: custom
 211:         filter:
 213:       pinyin_ngram_analyzer:
 215:         tokenizer: my_pinyin
 217:         - lowercase
 219:         - trim
 221:       pinyin_first_letter_analyzer:
 223:         tokenizer: pinyin_first_letter
 225:         - standard
 227:       pinyin_first_letter_keyword_analyzer:
 229:         - pinyin_first_letter_analyzer_keyword
 231:         tokenizer: keyword
 233:         - pinyin_first_letter
 235:       path_analyzer: #used for tokenize :/something/something/else
 237:         tokenizer: path_hierarchy
 238:  
 240: index.analysis.analyzer.default.type: ik

说明:

  • 第7行,也是指定了集群名称;
  • 第13行,指定了节点名称为 es-02(主机名)
  • 第14和15行,指定了该节点可能成为 master 节点,还可以是数据节点;
  • 第35行,指定节点IP地址为 192.168.1.3;
  • 第39行,指定http端口,你使用head、kopf等相关插件使用的端口;
  • 第40行,集群内部通信端口,用于节点发现等;

上面的配置master也是这么配置的。

  • 第47行,跟master节点配置不一样了。这里直接告诉该的节点,可能的master节点是什么。

文章摘自:http://www.cnblogs.com/liuning8023/p/5454696.html

ELK 中的elasticsearch 集群的部署的更多相关文章

  1. ELK教程1:ElasticSearch集群的部署ELK

    在分布式系统中,应用数量众多,应用调用链复杂,常常使用ELK作为日志收集.分析和展示的组件.本篇文章将讲讲解如何部署ELK,然后讲解如何使用Filebeat采集Spring Boot的日志输出到Log ...

  2. 日志分析平台ELK之搜索引擎Elasticsearch集群

    一.简介 什么是ELK?ELK是Elasticsearch.Logstash.Kibana这三个软件的首字母缩写:其中elasticsearch是用来做数据的存储和搜索的搜索引擎:logstash是数 ...

  3. elasticsearch 集群的安装部署

    一 介绍 elasticsearch 是居于lucene的搜素引擎,可以横向集群扩展以及分片,开发者无需关注如何实现了索引的备份,集群同步,分片等,我们很容易通过简单的配置就可以启动elasticse ...

  4. 搭建Elasticsearch集群常见问题

    一.ES安装方法: Linux用户登录(bae),我们用的是5.3版本的包.从官网下载: curl -L -O https://artifacts.elastic.co/downloads/elast ...

  5. Elasticsearch集群节点配置详解

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

  6. 手把手教你搭建一个Elasticsearch集群

    一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个 ...

  7. Centos8 部署 ElasticSearch 集群并搭建 ELK,基于Logstash同步MySQL数据到ElasticSearch

    Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...

  8. Centos7下ELK+Redis日志分析平台的集群环境部署记录

    之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...

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

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

随机推荐

  1. Vue项目的npm环境搭建

    Vue项目的环境搭建主要步骤如下: vue项目创建 安装NodeJS +到官网下载自己系统对应的版本,这里我们下载Windows系统的64位zip文件,下载完成后解压,可以看到里面有一个node.ex ...

  2. maximum-subarray 序列最大连续和 贪心

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  3. Android开发之使用DefaultHandler处理XML数据

    一.定义规则 XML数据结构定义 请记住上面的定义,后面我会用“标签开始”.“文本”.“标签结束”表示SAX正在处理哪部分XML数据 事件模型 为什么这里我要谈到这个,因为SAX处理XML数据是采用事 ...

  4. Mongodb下载地址

    通过官网https://www.mongodb.com/访问下载页面点击下载一直不能成功,通过如下的链接可以直接下载所有版本的安装文件. windows版本下载地址:http://dl.mongodb ...

  5. windows下命令行终端使用rz上传文件参数详解

    rz命令: (X) = option applies to XMODEM only (Y) = option applies to YMODEM only (Z) = option applies t ...

  6. m4, autoconf

    http://www.gnu.org/software/m4/m4.html GNU M4 is an implementation of the traditional Unix macro pro ...

  7. Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务

    前面我们已经完成了spring 3和quartz 2的整合以及动态添加定时任务,我们接着来完善它,使之能支持更多的操作,例如暂停.恢复.修改等. 在动态添加定时任务中其实已经涉及到了其中的一些代码,这 ...

  8. UINavigationController出现nested push animation can result in corrupted navigation bar的错误提示

    今天在測试过程中,出现了这样一个bug.分别有两种情景: (前提是:app是基于UINavigationController构建的) 1.从Controller-A中push进来B.在B中点击返回,返 ...

  9. ios中NSObject分类(2)

    #import <Foundation/Foundation.h> UIColor * rgb(int r, int g, int b); UIColor * rgbA(int r, in ...

  10. Oracle 9i 10g 11g 区别的转载

    下面看看9i.10g.11g版本的区别 Oracle 10g比9i多的新特性?        1. 10g支持网格计算,即多台结点服务器利用高速网络组成一个虚拟的高性能服务器,负载在整个 网格中衡(L ...