目录:
- 软件及环境准备
- JDK安装配置
- ElasticSearch安装及配置
- 启动ES集群
- es常规操作
- 安装及配置ES前端图形化操作工具
- kibana汉化及时区修改
- ElasticSearch和kibana的停止
一、软件及环境准备
服务器环境
CentOS6.9_64位两台
es-master:192.168.1.11
es-slave:192.168.1.12
注意:内存允许的情况下,稍微给大一点内存,否则启动会失败,本地测试可以使用1.5-2G内存,
ES软件
最新版ElasticSearch7.3.1
下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.1-linux-x86_64.tar.gz
es-master包括一个节点:elasticesearch-node1
es-slave包括一个节点:elasticesearch-node2
修改服务器主机名称,方便后续操作
(1)服务器192.168.1.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.1.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安装配置及系统优化
jdk安装忽略(2台),可参照:https://www.cnblogs.com/zhangan/p/10901192.html
系统优化可以参照内核优化脚本来执行:https://www.cnblogs.com/zhangan/p/10956138.html#x3
特别提醒:
Elasticsearch-7版本最低支持jdk版本为JDK1.11
Elasticsearch-7.3该版本内置了JDK,而内置的JDK是当前推荐的JDK版本。当然如果你本地配置了JAVA_HOME那么ES就是优先使用配置的JDK启动ES。(言外之意,你不安装JDK一样可以启动,我试了可以的。)
ES推荐使用LTS版本的JDK(这里只是推荐,JDK8就不支持),如果你使用了一些不支持的JDK版本,ES会拒绝启动。
由于我们日常的代码开发都是使用的JDK1.8,而且可能JAVA_HOME配置成JDK1.8,那么解决方法我们只需更改Elasticsearch的启动文件,使它指向Elasticsearch-7.3该版本内置了JDK,或者也可以参照jdk安装文档升级jdk高版本
修改启动配置文件
[root@localhost bin]# pwd
/data/elasticsearch/bin
[root@localhost bin]# vi elasticsearch
#配置es自带的jdk路径 export JAVA_HOME=/data/elasticsearch1/jdk export PATH=$JAVA_HOME/bin:$PATH #添加jdk判断 if [ -x "$JAVA_HOME/bin/java" ]; then JAVA="/data/elasticsearch1/jdk/bin/java" else JAVA=`which java` fi
三、ElasticSearch安装及配置
es-master上的操作如下:
下载及解压ElasticSearch7.3.1
1
2
3
4
5
6
|
[root@es-master ~] # cd /home/software/ [root@es-master ~] # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.1-linux-x86_64.tar.gz [root@es-master software] # tar xf elasticsearch-7.3.1.tar.gz -C /usr/local/ [root@es-master local ] # mv elasticsearch-7.3.1 elasticsearch-node1/ |
创建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节点的数据目录和日志目录
1
2
|
[root@es-master local ] # mkdir -pv /data/elasticsearch1/{data,logs} [root@es-master local ] # chown -R elk:elk /data/elasticsearch1 |
修改操作系统的内核配置文件sysctl.conf(2台)
[root@es-master local]# vim /etc/sysctl.conf #在配置文件最后面添加如下内容 vm.zone_reclaim_mode=0 vm.max_map_count=262144 vm.swappiness=1
解释:max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。当进程达到了VMA上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。
swappiness,Linux内核参数,控制换出运行时内存的相对权重。swappiness参数值可设置范围在0到100之间。 低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。默认值为60,对于大多数操作系统,设置为100可能会影响整体性能,而设置为更低值(甚至为0)则可能减少响应延迟。
vm.swappiness=1;进行最少量的交换,而不禁用交换。如果设置为 0 的话,则等同于禁用 swap
1
2
|
#使修改之后的配置文件生效 [root@es-master local ] # sysctl -p |
修改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,最好不要超过内存的50%
修改elasticsearch-node1节点的配置文件elasticsearch.yml
[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.1.11 #绑定监听的网络接口,监听传入的请求,可以设置为IP地址或者主机名 network.bind_host: 192.168.1.11 #发布地址,用于通知集群中的其他节点,和其他节点通讯,不设置的话默认可以自动设置。必须是一个存在的IP地址 network.publish_host: 192.168.1.11 #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master cluster.initial_master_nodes: ["192.168.1.11"] #集群通信端口 transport.tcp.port: 9300 #对外提供服务的http端口,默认为9200 http.port: 9200 #集群中主节点的初始列表,当主节点启动时会使用这个列表进行非主节点的监测 discovery.zen.ping.unicast.hosts: ["192.168.1.11:9300","192.168.1.12:9300"] #下面这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方推荐值是(N/2)+1; #其中N是具有master资格的节点的数量(我们的情况是2,因此这个参数设置为1) #但是:但对于只有2个节点的情况,设置为2就有些问题了,一个节点DOWN掉后,肯定连不上2台服务器了,这点需要注意 discovery.zen.minimum_master_nodes: 1 #集群ping过程的超时 discovery.zen.ping_timeout: 120s #客户端连接超时 client.transport.ping_timeout: 60s #cache缓存大小,10%(默认),可设置成百分比,也可设置成具体值,如256mb。 indices.queries.cache.size: 20% #索引期间的内存缓存,有利于索引吞吐量的增加。 indices.memory.index_buffer_size: 30% #开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为false bootstrap.memory_lock: true bootstrap.system_call_filter: false #设置该节点是否具有成为主节点的资格以及是否存储数据。 node.master: true node.data: true #ElasticSearch 更改search线程池,search 线程设置过小导致程序崩溃 thread_pool.search.queue_size: 1000 #queue_size允许控制没有线程执行它们的挂起请求队列的初始大小。 thread_pool.search.size: 200 #size参数控制线程数,默认为核心数乘以5。 thread_pool.search.min_queue_size: 10 #min_queue_size设置控制queue_size可以调整到的最小量。 thread_pool.search.max_queue_size: 1000 #max_queue_size设置控制queue_size可以调整到的最大量。 thread_pool.search.auto_queue_frame_size: 2000 #auto_queue_frame_size设置控制在调整队列之前进行测量的操作数。它应该足够大,以便单个操作不会过度偏向计算。 thread_pool.search.target_response_time: 6s #target_response_time是时间值设置,指示线程池队列中任务的目标平均响应时间。如果任务通常超过此时间,则将调低线程池队列以拒绝任务。
es-slave上的操作如下:
上传elasticsearch的安装包,然后解压重命名,可以直接从es-master上远程拉取
1
2
3
|
[root@es-slave ~] # cd /home/software/ [root@es-slave software] # scp 192.168.1.11:/home/software/elasticsearch-7.3.1.tar.gz ./ [root@es-slave software] # tar xf elasticsearch-7.3.1.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 |
修改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
[root@es-master local]# vim elasticsearch-node3/config/elasticsearch.yml #修改以下项 cluster.name: elasticsearch node.name: "es-node2" path.data: /data/elasticsearch2/data path.logs: /data/elasticsearch2/logs network.host: 192.168.1.12 network.bind_host: 192.168.1.12 network.publish_host: 192.168.1.12 #节点间的通信端口,接收单值或者一个范围。如果不指定一个范围,该节点将会绑定范围的第一个可用顶点 cluster.initial_master_nodes: ["192.168.1.11"] transport.tcp.port: 9300 http.port: 9200 discovery.zen.ping.unicast.hosts: ["192.168.1.11:9300","192.168.1.12:9300"] discovery.zen.minimum_master_nodes: 1 discovery.zen.ping_timeout: 120s client.transport.ping_timeout: 60s indices.queries.cache.size: 20% indices.memory.index_buffer_size: 30% bootstrap.memory_lock: true bootstrap.system_call_filter: false node.master: true node.data: true thread_pool.search.queue_size: 1000 thread_pool.search.size: 200 thread_pool.search.min_queue_size: 10 thread_pool.search.max_queue_size: 1000 thread_pool.search.auto_queue_frame_size: 2000 thread_pool.search.target_response_time: 6s
至此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.1.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
|
[root@es-master ~] # su - elk [elk@es-master ~]$ cd /usr/local/elasticsearch-node1/bin/ [elk@es-master bin]$ . /elasticsearch -d |
查看进程及端口,确定是否启动成功
1
2
3
4
5
|
#查看进程,可以看到有两个节点的进程 [elk@es-master bin]$ ps -ef| grep elasticsearch [elk@es-master bin]$ lsof -i:9200 使用curl测试节点是否可以正常访问,方法同上,需要验证elasticsearch-node1 [elk@es-master ~]$ curl 192.168.1.11:9200 |
验证完毕之后,ES集群就启动完毕。
六丶es常规操作
查看状态
curl "http://127.0.0.1:9200/_status?pretty=true"
查看集群健康
curl "http://127.0.0.1:9200/_cat/health?v"
列出集群索引
curl "http://127.0.0.1:9200/_cat/indices?"
删除索引
curl -XDELETEE "http://127.0.0.1:9200/logstash-2015.10.28"
优化索引
curl -XPOST "http://127.0.0.1:9200/logstash-2015.10.28/_optimize"
curl -XGET 'http://localhost:9200/logstash-2015.10.28/_search?pretty=true' -d '
{
"query" : {
"matchAll" : {}
}
}'
修改集群分片数,默认只允许1000个分片,不免后期分片数不足丢失数据
curl -XPUT 'ip:9200/_cluster/settings' -H "Content-Type: application/json" -d '{"transient":{"cluster":{"max_shards_per_node":10000}}}'
七、安装及配置ES前端图形化操作工具
下载kibana,并上传到es-master服务器上
下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.3.1-linux-x86_64.tar.gz
解压,重命名
1
2
3
4
|
[root@es-master software] https://artifacts.elastic.co/downloads/kibana/kibana-7.3.1-linux-x86_64.tar.gz [root@es-master software] # tar xf kibana-7.3.1-linux-x86_64.tar.gz -C /usr/local [root@es-master software] # cd /usr/local [root@es-master local ] # mv kibana-7.3.1-linux-x86_64 kibana-7.3.1 |
修改kibana的配置文件kibana.yml
[root@es-master local]# cd kibana-7.3.1/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: "192.168.1.11" #用来处理ES请求的服务URL elasticsearch.hosts: ["http://192.168.1.11:9200","http://192.168.1.12:9200"] #用来控制证书的认证,可选的值为full,none,certificate。此处由于没有证书,所以设置为null,否则启动会提示错误. elasticsearch.ssl.verificationMode: none #kibana搜索数据请求超时时间 elasticsearch.requestTimeout: 90000
启动kibana
1
2
3
4
5
|
[root@es-master config] # cd /usr/local/kibana-7.3.1/bin #以后台进程启动,kibana默认是控制台方式启动,Ctrl+C就会退出 [root@es-master bin] # nohup ./kibana & #查看日志是否启动正常 [root@es-master bin] # tail -f nohup.out |
如果启动正常,在浏览器端访问http://192.168.1.11:5601,即可看到图形化操作工具
八丶kibana汉化及时区修改:
vi kibana.yml i18n.locale: "zh-CN" |
时区修改步骤:
进入kibana界面-》管理-》高级设置-》设置日期格式的时区
默认:Browser
可修改为:Asia/Shanghai
九、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] |