最近在学习es相关内容,为了方便自己使用,在本地虚拟机上搭建了一个3节点的es集群,在搭建过程中,遇到了许多坑,网上的资料也比较分散,所以详细整理一下搭建过程发出来供参考。搭建过程中,由于是两台虚拟机,所以有一种很快速的办法,搭建一台,然后通过克隆虚拟机然后修改可以迅速完成,但是为了更熟悉整个过程,本过程是每台虚拟机都逐一去操作。
一、软件及环境准备
服务器环境
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端口对远程指定主机开放。
二、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" #输出版本号,表示配置成功. |
三、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 |
修改如下两个选项:
- -xms512m #elasticsearch启动时jvm所分配的初始堆内存大小
- -xmx512m #elasticsearch启动之后允许jvm分配的最大堆内存大小,生产环境中可能需要调大
注意:如果内存足够大,可以不用修改,默认为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 |
修改如下两个选项:
- -xms512m
- -xmx512m
修改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 |
修改如下两个选项:
- -xms512m
- -xmx512m
修改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节点配置完成。
四、启动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集群就启动完毕。
五、安装及配置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
六、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