ELK 中的elasticsearch 集群的部署

本文内容

  • 背景
  • 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.2es-01
192.168.1.3es-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Group Box组合框的简单使用 [大三TJB_708]

http://blog.csdn.net/misskissc/article/details/9317783 Group Box组合框的简单使用 [大三TJB_708] 转载于:https://www.cnblogs.com/chuangyiyuan/p/4885637.html

.NetCore中EF Core为迁移的数据库表统一添加前缀

在项目开发的过程中我们往往需要将项目数据库中的表添加一个统一的前缀。我们为什么要添加表前缀呢&#xff1f;有的可能是公司规定&#xff0c;更多的原因是项目和业务的区分。每个项目针对不同的需求或业务场景&#xff0c;追加相应的标识。当项目到达一定规模后&#xff0c;…

Java对象生命周期

目录 1. 创建阶段(Created)2. 应用阶段(In Use)3. 不可见阶段(Invisible)4. 不可达阶段(Unreachable)5. 收集阶段(Collected)6. 终结阶段7. 对象空间的重新分配1. 创建阶段(Created) 为对象分配存储空间开始构造对象从父类到子类对static成员进行初始化父类成员变量按照顺序初始…

C和指针之动态内存分配常见问题和总结

1、动态内存分配常见问题 1) 结构体成员指针未初始化 2)为指针分配内存太小 3)内存分配成功,但是没初始化 4)内存越界,内存泄漏,free多次或者释放之后没有设置为NULL 2、测试代码 #include <stdio.h> #include <stdlib.h> #inclu…

echarty轴自定义显示不全_表格打印不全怎么办?这招超简单!

私信回复关键词【福利】~获取丰富办公资源&#xff0c;助你高效办公早下班&#xff01;大家好&#xff0c;我是小E~最近&#xff0c;秋叶 Excel 学习班花生 同学&#xff0c;从同事那里收到了一份开会要用的表格&#xff0c;需要马上就要打印出来。会议主题是&#xff0c;从五个…

Xcode命令行生成Bitcode静态库

近两三年一直在做静态库开发 1、在Xcode工程中创建静态库的Target&#xff0c;最初是手动Build出真机的.a文件&#xff0c;模拟器的.a文件&#xff0c;然后再用命令行合并 2、后来一些特殊的开发者&#xff0c;要求加入特殊的功能&#xff0c;或者开放特殊的接口和属性&#xf…

app接口开发(php)

1.JSON方式封装通信接口&#xff1a; 封装&#xff1a; response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response {// 定义一个静态方法,作用&#xff1a;按json方式产生数据 // 规范通信数据&#xff1a;参数一:状态码,参数二:消息提示(初始值为空…

如何优雅地处理 EF Core 异常

前言当我们在使用 EF Core 保存数据时&#xff0c;可能会出现问题&#xff0c;比如插入重复的值&#xff0c;这时我们会收到DbUpdateException&#xff1a;如果把内部异常信息直接返回给客户&#xff0c;这样不太友好&#xff0c;同时也会暴露数据库细节。如何更优雅地处理这些…

利用 VMware vRealize - 构建和优化云管理

2019独角兽企业重金招聘Python工程师标准>>> 利用 VMware vRealize - 构建和优化云管理 VMware vCloud Suite 5.8是新一代基于软件定义数据中心架构构建与管理vSphere私有云的一体化产品&#xff0c;可支持各企业提升效率、控制性与灵活性&#xff0c;实现关键性的I…

linux c之在终端如何依赖.o文件(静态链接库)运行C文件的命令

1、问题 比如在linux的终端&#xff0c;我们运行有个aa.c文件&#xff0c;但是这个这C文件又依赖.o文件&#xff0c;之前我不知道怎么运行&#xff0c;今天才知道,直接放后面就行了 2、命令如下 gcc -g aa.c ***.o -o aa 如果有线程记得加上phread gcc -g aa.c ***.o -o…

合流超几何函数_【初中数学大招流】从平面几何到解析几何

写在前面&#xff1a;本文适合初三学生&#xff1b;本文所讲的方法&#xff0c;可供平时的学习开拓思维&#xff0c;考试时也许可以帮你得分&#xff0c;但请慎用&#xff01;创作不易&#xff0c;喜欢的话不要只收藏呀&#xff0c;双击屏幕有惊喜哦~2019.6.2 更新了一道例题&a…

NOIP2012模拟试题【奶牛晒衣服】

1&#xff0e;奶牛晒衣服(dry) 【问题描述】 在熊大妈英明的带领下&#xff0c;时针和它的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是&#xff0c;为牛宝宝洗晒衣服就成了很不爽的事情。 圣人王担负起了这个重任。洗完衣服后&#xff0c;你就要弄干衣…

PYTHON REQUESTS的安装与简单运用

PYTHON REQUESTS的安装与简单运用 2013.07.09强烈推荐&#xff01;requests官方文档已有了中文版&#xff0c;请见http://cn.python-requests.org/zh_CN/latest/ 。 requests是python的一个HTTP客户端库&#xff0c;跟urllib&#xff0c;urllib2类似&#xff0c;那为什么要用re…

7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么

1. 前言通过上面的学习&#xff0c;我们已经了解清楚crank的职责以及作用&#xff0c;那么我们重新回来思考一下&#xff0c;crank能为我们带来什么&#xff1f;2. Crank带来了什么&#xff1f;为分布式压测提供了解决方案、可以模拟更高强度的压测单机压测最多提供65535&#…

3732: Network

3732: Network Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 179[Submit][Status]Description 给你N个点的无向图 (1 < N < 15,000)&#xff0c;记为&#xff1a;1…N。 图中有M条边 (1 < M < 30,000) &#xff0c;第j条边的长度为&#xff1a; …

Android编译出现XML or text declaration not at start of entity

1、问题 运行Android项目的时候提示出现这个XML or text declaration not at start of entity 日了狗前几天都正常2、解决办法 原来是我的一个xml文件的头部有空格&#xff0c;去掉了就好了。

我的CSDN,我的编程生涯

我的CSDN&#xff0c;我的编程生涯&#xff0c;由此开始&#xff0c;加油&#xff01;

里rust怎么找蓝图_Rust错误处理

错误处理是程序开发中必不可少的一个环节&#xff0c;在Rust中&#xff0c;错误分成两个类别&#xff1a;可恢复错误和不可恢复错误。 可恢复错误&#xff1a;比如说未找到文件&#xff0c;Rust中用Result<T,E>来实现 不可恢复错误&#xff1a;比如数组访问越界&#xff…

转载牛X文章

2019独角兽企业重金招聘Python工程师标准>>> Java中有关Null的9件事&#xff1a; http://www.importnew.com/14229.html 深入理解java异常处理机制&#xff1a; http://blog.csdn.net/hguisu/article/details/6155636 Android JNI知识简介&#xff1a; http://blog.…

Android Listview中Button按钮点击事件冲突解决办法

今天做项目时&#xff0c;ListView中含有了Button组件&#xff0c;心里一早就知道肯定会有冲突&#xff0c;因为以前就遇到过&#xff0c;并解决过&#xff0c;可惜当时没有记录下来。 今天在做的时候&#xff0c;继续被这个问题郁闷了一把&#xff0c;后来解决后&#xff0c;赶…