- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解ElasticSearch6.4.0集群搭建由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近在学习es相关内容,为了方便自己使用,在本地虚拟机上搭建了一个3节点的es集群,在搭建过程中,遇到了许多坑,网上的资料也比较分散,所以详细整理一下搭建过程发出来供参考。搭建过程中,由于是两台虚拟机,所以有一种很快速的办法,搭建一台,然后通过克隆虚拟机然后修改可以迅速完成,但是为了更熟悉整个过程,本过程是每台虚拟机都逐一去操作.
1、软件及环境准备 。
服务器环境 。
centos6.9_64位两台 。
es-master:192.168.0.11 。
es-slave:192.168.0.12 。
注意:内存允许的情况下,稍微给大一点内存,否则启动会失败,本地测试可以使用1.5-2g内存,es-master上准备搭建两个节点,所以内存最好给到2g以上. 。
es软件 。
最新版elasticsearch6.4.0 。
下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz 。
jdk软件 。
jdk-8u161-linux-x64.tar.gz 。
下载地址:http://download.oracle.com/errors/download-fail-1505220.html 。
环境规划 。
es-master包括两个节点:elasticesearch-node1,elasticesearch-node3 。
es-slave包括一个节点:elasticesearch-node2 。
修改服务器主机名称,方便后续操作 。
(1)服务器192.168.0.11上操作:
1
2
3
4
5
6
|
[root
@localhost
~]# hostname es-master
[root
@localhost
~]# vim /etc/sysconfig/network
#修改以下内容:
hostname=es-master
#退出重新登录
[root
@localhost
~]# logout
|
(2)服务器192.168.0.12上操作:
1
2
3
4
5
6
|
[root
@localhost
~]# hostname es-slave
[root
@localhost
~]# vim /etc/sysconfig/network
#修改以下内容:
hostname=es-slave
#退出重新登录
[root
@localhost
~]# logout
|
(3)为了后续操作方便,分别关闭es-master和es-slave服务器的防火墙 。
1
2
|
[root
@es
-master ~]# service iptables stop
[root
@es
-slave ~]# service iptables stop
|
注意:生产环境不能直接关防火墙,可以添加防火墙规则,使得es的tcp端口对远程指定主机开放.
2、jdk安装配置 。
主机es-master上操作 。
下载,并解压到指定目录 。
1
2
3
|
[root
@es
-master ~]# mkdir -pv /home/software
[root
@es
-master ~]# cd /home/software/
[root
@es
-master software]# wget http:
//download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
|
注意:如果没有网络,可以手动下载,然后上传即可.
1
2
|
[root
@es
-master software]# mkdir -pv /usr/local/java
[root
@es
-master software]# tar xf jdk-8u181-linux-x64.tar.gz -c /usr/local/java
|
主机es-slave上操作同上,略. 。
配置环境变量,es-master和es-slave上配置过程相同,如下 。
1
2
3
4
5
6
|
[root
@es
-master software]# vim /etc/profile
#在末尾添加如下内容:
java_home=/usr/local/java/jdk1.
8
.0_181
export path=$path:$java_home/bin
#使环境变量生效
[root
@es
-master ~]# source /etc/profile
|
测试是否安装完成 。
1
2
3
|
[root
@es
-master ~]# java -version
java version
"1.8.0_161"
#输出版本号,表示配置成功.
|
3、elasticsearch安装及配置 。
es-master上的操作如下:
下载及解压elasticsearch6.4.0 。
1
2
3
4
5
6
|
[root
@es
-master ~]# cd /home/software/
[root
@es
-master ~]# wget https:
//artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz
[root
@es
-master software]# tar xf elasticsearch-
6.2
.
4
.tar.gz -c /usr/local/
[root
@es
-master local]# mv elasticsearch-
6.4
.
0
elasticsearch-node1/
#复制一份作为第二个es节点
[root
@es
-master local]# cp -r elasticsearch-node1/ elasticsearch-node3
|
创建elk用户,并将elasticsearch-node1和elasticsearch-node3授权给elk 。
注意:由于elasticsearch启动的时候不能直接用root用户启动,所以需要创建普通用户 。
1
2
|
[root
@es
-master local]# useradd elk
[root
@es
-master local]# chown -r elk:elk elasticsearch-node1/ elasticsearch-node3/
|
分别创建两个elasticsearch节点的数据目录和日志目录 。
1
2
|
[root
@es
-master local]# mkdir -pv /data/{elasticsearch1,elasticsearch3}/{data,logs}
[root
@es
-master local]# chown -r elk:elk /data/{elasticsearch1,elasticsearch3}
|
修改操作系统的内核配置文件sysctl.conf 。
1
2
3
|
[root
@es
-master local]# vim /etc/sysctl.conf
#在配置文件最后面添加如下内容
vm.max_map_count=
655360
|
解释:max_map_count文件包含限制一个进程可以拥有的vma(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域.
在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。 当进程达到了vma上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误.
1
2
|
#使修改之后的配置文件生效
[root
@es
-master local]# sysctl -p
|
修改limits.conf文件 。
1
2
3
4
5
6
7
|
#limits.conf:用来保护系统的资源访问,和sysctl.conf很像,但是limits.conf是针对于用户,而sysctl.conf是针对于操作系统.
[root
@es
-master local]# vim /etc/security/limits.conf
#在文件末尾添加如下内容:
elk soft nofile
65536
elk hard nofile
131072
elk soft nproc
4096
elk hard nproc
4096
|
修改elasticsearch-node1节点的配置文件jvm.options 。
1
2
|
[root
@es
-master local]# cd elasticsearch-node1/config/
[root
@es
-master config]# vim jvm.options
|
修改如下两个选项:
注意:如果内存足够大,可以不用修改,默认为1g 。
修改elasticsearch-node1节点的配置文件elasticsearch.yml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root
@es
-master local]# vim elasticsearch-node1/config/elasticsearch.yml
#修改以下项
#表示集群标识,同一个集群中的多个节点使用相同的标识
cluster.name: elasticsearch
#节点名称
node.name:
"es-node1"
#数据存储目录
path.data: /data/elasticsearch1/data
#日志目录
path.logs: /data/elasticsearch1/logs
#节点所绑定的ip地址,并且该节点会被通知到集群中的其他节点
network.host:
192.168
.
0.11
#绑定监听的网络接口,监听传入的请求,可以设置为ip地址或者主机名
network.bind_host:
192.168
.
0.11
#发布地址,用于通知集群中的其他节点,和其他节点通讯,不设置的话默认可以自动设置。必须是一个存在的ip地址
network.publish_host:
192.168
.
0.11
#对外提供服务的http端口,默认为
9200
http.port:
9200
#集群中主节点的初始列表,当主节点启动时会使用这个列表进行非主节点的监测
discovery.zen.ping.unicast.hosts: [
"192.168.0.11"
,
"192.168.0.12"
,
"192.168.0.11:9301"
]
#下面这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方推荐值是(n/
2
)+
1
;
#其中n是具有master资格的节点的数量(我们的情况是
3
,因此这个参数设置为
2
)
#但是:但对于只有
2
个节点的情况,设置为
2
就有些问题了,一个节点down掉后,肯定连不上
2
台服务器了,这点需要注意
discovery.zen.minimum_master_nodes:
2
#es默认开启了内存地址锁定,为了避免内存交换提高性能。但是centos6不支持seccomp功能,启动会报错,所以需要将其设置为
false
bootstrap.memory_lock:
false
bootstrap.system_call_filter:
false
|
修改elasticsearch-node3节点的配置文件jvm.options 。
1
2
|
[root
@es
-master local]# cd elasticsearch-node3/config/
[root
@es
-master config]# vim jvm.options
|
修改如下两个选项:
修改elasticsearch-node3节点的配置文件elasticsearch.yml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root
@es
-master local]# vim elasticsearch-node3/config/elasticsearch.yml
#修改以下项
cluster.name: elasticsearch
node.name:
"es-node3"
path.data: /data/elasticsearch3/data
path.logs: /data/elasticsearch3/logs
network.host:
192.168
.
0.11
network.bind_host:
192.168
.
0.11
network.publish_host:
192.168
.
0.11
#节点间的通信端口,接收单值或者一个范围。如果指定一个范围,该节点将会绑定范围的第一个可用顶点
transport.tcp.port:
9301
http.port:
9201
discovery.zen.ping.unicast.hosts: [
"192.168.0.11"
,
"192.168.0.12"
,
"192.168.0.11:9301"
]
discovery.zen.minimum_master_nodes:
2
bootstrap.memory_lock:
false
bootstrap.system_call_filter:
false
|
至此,es-master上的配置操作完成.
es-slave上的操作如下:
上传elasticsearch的安装包,然后解压重命名,可以直接从es-master上远程拉取 。
1
2
3
|
[root
@es
-slave ~]# cd /home/software/
[root
@es
-slave software]# scp
192.168
.
0.11
:/home/software/elasticsearch-
6.4
.
0
.tar.gz ./
[root
@es
-slave software]# tar xf elasticsearch-
6.4
.
0
.tar.gz -c /usr/local/
|
创建elk用户,并将elasticsearch-node2授权给elk 。
1
2
|
[root
@es
-slave local]# useradd elk
[root
@es
-slave local]# chown -r elk:elk elasticsearch-node2
|
创建数据目录,并将目录的属主和属组改为elk用户,elk组 。
1
2
|
[root
@es
-slave local]# mkdir -pv /data/elasticsearch2/{data,logs}
[root
@es
-slave local]# chown -r elk:elk /data/elasticsearch2
|
修改操作系统的内核配置文件sysctl.conf 。
1
2
3
4
|
[root
@es
-slave local]# vim /etc/sysctl.conf
#在配置文件最后面添加如下内容
vm.max_map_count=
655360
[root
@es
-slave local]# sysctl -p
|
修改limits.conf文件,可以直接从es-master的配置中复制过来 。
1
2
3
4
5
6
|
[root
@es
-master local]# vim /etc/security/limits.conf
#在文件末尾添加如下内容:
elk soft nofile
65536
elk hard nofile
131072
elk soft nproc
4096
elk hard nproc
4096
|
修改elasticsearch-node2节点的配置文件jvm.options 。
1
2
|
[root
@es
-slave local]# cd elasticsearch-node2/config/
[root
@es
-slave config]# vim jvm.options
|
修改如下两个选项:
修改elasticsearch-node2节点的配置文件elasticsearch.yml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root
@es
-slave local]# vim elasticsearch-node2/config/elasticsearch.yml
#修改以下项
cluster.name: elasticsearch
node.name:
"es-node2"
path.data: /data/elasticsearch2/data
path.logs: /data/elasticsearch2/logs
network.host:
192.168
.
0.12
network.bind_host:
192.168
.
0.12
network.publish_host:
192.168
.
0.12
discovery.zen.ping.unicast.hosts: [
"192.168.0.11"
,
"192.168.0.12"
,
"192.168.0.11:9301"
]
discovery.zen.minimum_master_nodes:
2
bootstrap.memory_lock:
false
bootstrap.system_call_filter:
false
|
至此es-slave上的elasticsearch节点配置完成.
4、启动es集群 。
首先切换为elk用户,并启动es-slave服务器上的elasticsearch-node2节点 。
1
2
3
|
[root
@es
-slave local]# su - elk
[elk
@es
-slave ~]$ cd /usr/local/elasticsearch-node2/bin/
[elk
@es
-slave bin]$ ./elasticsearch -d
|
注意:-d参数表示以后台进程启动,默认情况下会在控制台输出日志.
查看是否启动成功,可以通过查看进程及端口来确定是否启动成功,如果启动失败,可以通过查看日志来排查原因 。
1
2
|
[elk
@es
-slave bin]$ ps -ef| grep elasticsearch
[elk
@es
-slave bin]$ lsof -i:
9200
|
注意:日志文件在elasticsearch.yml配置文件中所指定的目录下 。
测试是否可以访问 。
1
2
3
4
5
6
7
8
9
10
11
|
[elk
@es
-slave ~]$ curl
192.168
.
0.12
:
9200
如果返回类似如下结果,表示启动正常:
{
"name"
:
"es-node2"
,
"cluster_name"
:
"elasticsearch"
,
"cluster_uuid"
:
"gczyfnkrte2ybeqmlg7-nw"
,
"version"
: {
...
},
"tagline"
:
"you know, for search"
}
|
切换到es-master服务器上,然后切换到elk身份,分别启动elasticsearch-node1节点和elasticsearch-node3节点 。
1
2
3
4
5
|
[root
@es
-master ~]# su - elk
[elk
@es
-master ~]$ cd /usr/local/elasticsearch-node1/bin/
[elk
@es
-master bin]$ ./elasticsearch -d
[elk
@es
-master bin]$ cd /usr/local/elasticsearch-node3/bin/
[elk
@es
-master bin]$ ./elasticsearch -d
|
查看进程及端口,确定是否启动成功 。
1
2
3
4
5
6
7
|
#查看进程,可以看到有两个节点的进程
[elk
@es
-master bin]$ ps -ef| grep elasticsearch
[elk
@es
-master bin]$ lsof -i:
9200
[elk
@es
-master bin]$ lsof -i:
9300
使用curl测试节点是否可以正常访问,方法同上,需要验证elasticsearch-node1和elasticsearch-node3节点
[elk
@es
-master ~]$ curl
192.168
.
0.11
:
9200
[elk
@es
-master ~]$ curl
192.168
.
0.11
:
9300
|
验证完毕之后,es集群就启动完毕.
5、安装及配置es前端图形化操作工具 。
下载kibana,并上传到es-master服务器上 。
下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz 。
解压,重命名 。
1
2
3
4
|
[root
@es
-master software]# wget https:
//artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz
[root
@es
-master software]# tar xf kibana-
6.4
.
0
-linux-x86_64.tar.gz -c /usr/local
[root
@es
-master software]# cd /usr/local
[root
@es
-master local]# mv kibana-
6.4
.
0
-linux-x86_64 kibana-
6.4
.
0
|
修改kibana的配置文件kibana.yml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root
@es
-master local]# cd kibana-
6.4
.
0
/config
[root
@es
-master config]# vim kibana.yml
#修改如下内容:
#对外服务监听端口
server.port:
5601
#绑定可以访问
5601
端口服务的ip地址,
0.0
.
0.0
表示任何地址在没有防火墙限制的情况下都可以访问,生产环境别这样设置,不安全。
server.host:
"0.0.0.0"
#默认值为主机名称,表示kibana实例绑定的主机,可以是ip地址或者主机名称.
server.name:
"es-master"
#用来处理es请求的服务url
elasticsearch.url:
"http://192.168.0.11:9200"
#用来控制证书的认证,可选的值为full,none,certificate。此处由于没有证书,所以设置为
null
,否则启动会提示错误.
elasticsearch.ssl.verificationmode: none
|
启动kibana 。
1
2
3
4
5
|
[root
@es
-master config]# cd /usr/local/kibana-
6.4
.
0
/bin
#以后台进程启动,kibana默认是控制台方式启动,ctrl+c就会退出
[root
@es
-master bin]# nohup ./kibana &
#查看日志是否启动正常
[root
@es
-master bin]# tail -f nohup.out
|
如果启动正常,在浏览器端访问http://192.168.0.11:5601,即可看到图形化操作工具 。
至此,就可以愉快的开始es的语法学习之旅了.
es的语法学习可参考:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_tutorial_conclusion.html 。
6、elasticsearch和kibana的停止 。
目前es和kibana的bin目录下未提供停止es服务和kibana服务的脚本,可以使用kill -9 pid来停止服务 。
停止es服务 。
1
2
|
[root
@es
-master bin]# ps -ef| grep elasticsearch | grep -v grep | awk
'{print $2}'
[root
@es
-master bin]# kill -
9
pid[上一步所输出的pid]
|
停止kibana服务 。
1
2
|
[root
@es
-master bin]# ps -ef| grep node | grep -v grep | grep -v elasticsearch | awk
'{print $2}'
[root
@es
-master bin]# kill -
9
pid[上一步所输出的pid]
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://segmentfault.com/a/1190000016326389 。
最后此篇关于详解ElasticSearch6.4.0集群搭建的文章就讲到这里了,如果你想了解更多关于详解ElasticSearch6.4.0集群搭建的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在这里有一个问题,我不知道这是否正常。 但是我认为这里有些湖,安装插件elasticsearch-head之后,我在浏览器中启动url“http://localhost:9200/_plugin/h
我写了这个 flex 搜索查询: es.search(index=['ind1'],doc_type=['doc']) 我得到以下结果: {'_shards': {'failed': 0, 'skip
在ElasticSearch.Net v.5中,存在一个属性 Elasticsearch.Net.RequestData.Path ,该属性在ElasticSearch.Net v.6中已成为depr
如何让 elasticsearch 应用新配置?我更改了文件 ~ES_HOME/config/elasticsearch.yml 中的一个字符串: # Disable HTTP completely:
我正在尝试使用以下分析器在 elastic serach 7.1 中实现部分子字符串搜索 PUT my_index-001 { "settings": { "analysis": {
假设一个 elasticsearch 服务器在很短的时间内接收到 100 个任务。有些任务很短,有些任务很耗时,有些任务是删除任务,有些是插入和搜索查询。 elasticsearch 是如何决定先运行
我需要根据日期过滤一组值(在此处添加字段),然后按 device_id 对其进行分组。所以我正在使用以下东西: { "aggs":{ "dates_between":{ "fi
我在 Elasticsearch 中有一个企业索引。索引中的每个文档代表一个业务,每个业务都有business_hours。我试图允许使用星期几和时间过滤营业时间。例如,我们希望能够进行过滤,以显示我
我有一个这样的过滤查询 query: { filtered: { query: { bool: { should: [{multi_match: {
Elasticsearch 相当新,所以可能不得不忍受我,我遇到了一个问题,如果我使用 20 个字符或更少的字符搜索文档,文档会出现,但是查询中同一个单词中的任何更多字符,我没有结果: 使用“苯氧甲基
我试图更好地理解 ElasticSearch 的内部结构,所以我想知道 ElasticSearch 在内部计算以下两种情况的术语统计信息的方式是否存在任何差异。 第一种情况是当我有这样的文件时: {
在我的 elasticsearch 索引中,我索引了一堆工作。为简单起见,我们只说它们是一堆职位。当人们在我的搜索引擎中输入职位时,我想“自动完成”可能的匹配。 我在这里调查了完成建议:http://
我在很多映射中使用多字段。在 Elastic Search 的文档中,指示应将多字段替换为“fields”参数。参见 http://www.elasticsearch.org/guide/en/ela
我有如下查询, query = { "query": {"query_string": {"query": "%s" % q}}, "filter":{"ids
我有一个Json数据 "hits": [ { "_index": "outboxprov1", "_type": "deleted-c
这可能是一个初学者的问题,但我对大小有一些疑问。 根据 Elasticsearch 规范,大小的最大值可以是 10000,我想在下面验证我的理解: 示例查询: GET testindex-2016.0
我在 Elastic Search 中发现了滚动功能,这看起来非常有趣。看了那么多文档,下面的问题我还是不清楚。 如果偏移量已经存在那么为什么要使用滚动? 即将到来的记录呢?假设它完成了所有数据的滚动
我有以下基于注释的 Elasticsearch 配置,我已将索引设置为不被分析,因为我不希望这些字段被标记化: @Document(indexName = "abc", type = "efg
我正在尝试在单个索引中创建多个类型。例如,我试图在host索引中创建两种类型(post,ytb),以便在它们之间创建父子关系。 PUT /ytb { "mappings": { "po
我尝试创建一个简单的模板,包括一些动态模板,但我似乎无法为文档编制索引。 我得到错误: 400 {"error":"MapperParsingException[mapping [_default_]
我是一名优秀的程序员,十分优秀!