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.2 | es-01 | 是 |
192.168.1.3 | es-02 | 否 |
ES集群中第一个master节点
最简单的 ES master 节点配置如下。该配置文件,是一个完整的 ES 配置文件,所以很长。我顺便翻译成了中文。
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 节点配置如下。该配置文件内容只列出了配置项,但是是完整的。
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 集群的部署的更多相关文章
- ELK教程1:ElasticSearch集群的部署ELK
在分布式系统中,应用数量众多,应用调用链复杂,常常使用ELK作为日志收集.分析和展示的组件.本篇文章将讲讲解如何部署ELK,然后讲解如何使用Filebeat采集Spring Boot的日志输出到Log ...
- 日志分析平台ELK之搜索引擎Elasticsearch集群
一.简介 什么是ELK?ELK是Elasticsearch.Logstash.Kibana这三个软件的首字母缩写:其中elasticsearch是用来做数据的存储和搜索的搜索引擎:logstash是数 ...
- elasticsearch 集群的安装部署
一 介绍 elasticsearch 是居于lucene的搜素引擎,可以横向集群扩展以及分片,开发者无需关注如何实现了索引的备份,集群同步,分片等,我们很容易通过简单的配置就可以启动elasticse ...
- 搭建Elasticsearch集群常见问题
一.ES安装方法: Linux用户登录(bae),我们用的是5.3版本的包.从官网下载: curl -L -O https://artifacts.elastic.co/downloads/elast ...
- Elasticsearch集群节点配置详解
注意:如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群. 2.elasticsearch- ...
- 手把手教你搭建一个Elasticsearch集群
一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个 ...
- Centos8 部署 ElasticSearch 集群并搭建 ELK,基于Logstash同步MySQL数据到ElasticSearch
Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...
- Centos7下ELK+Redis日志分析平台的集群环境部署记录
之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...
- Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)
一. ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...
随机推荐
- word2013总是出现未响应卡一下如何解决?
最近在记笔记,word很烦很烦,总是会卡一下,过一会卡一下.本来以为是自动保存后来发现跟自动保存没有关系. 解决方法:禁用硬件图形加速就好了,不行的话再在硬件加速下面有个"使用子像素定位平滑 ...
- llvm -O 经历过那些pass
https://stackoverflow.com/questions/15548023/clang-optimization-levels
- form表单提交,Servlet接收并读取Excel文件
首先是jsp页面: <body scroll=no style="overflow-y:hidden;" onselectstart="return false&q ...
- linux tftp 服务
TFTP(Trivial File Transfer Protocol)是基于UDP协议开发,用来在客户机与server之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务. 一.改动/et ...
- phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
统一登陆还是非常有必要的,安全,放心.代码 /*cordov 微信自己定义插件*/ (function (cordova) { var define = cordova.define; define( ...
- jqPlot图表插件学习之数据节点高亮和光标提示
一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...
- 激光数据匹配(MATLAB Robotics System Toolbox)
正态分布变换算法是一个配准算法,它应用于三维点的统计模型,使用标准最优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快.算法细节可以参考:NDT ...
- java 怎么打印变量
//Test.java public class Test16{ public static void main(String args[]){ int age=28; System.out.prin ...
- 不能添加重复的Contact到RecipientBox中
不能添加重复的Contact到RecipientBox中 在开始添加的操作时,判断是否已在RecipientBox中,如果已经在返回值为null的TextView. 再根据TextView判断是否nu ...
- 颜色传感器TCS230及颜色识别电路(转)
摘要 TCS230是美国TAOS公司生产的一种可编程彩色光到频率的传感器.该传感器具有分辨率高.可编程的颜色选择与输出定标.单电源供电等特点:输出为数字量,可直接与微处理器连接.文中主要介绍TCS23 ...