目录:

一、软件及环境准备

服务器环境

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:
#对外提供服务的http端口,默认为9200
http.port:
#集群中主节点的初始列表,当主节点启动时会使用这个列表进行非主节点的监测
discovery.zen.ping.unicast.hosts: ["192.168.1.11:9300","192.168.1.12:9300"]
#下面这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方推荐值是(N/)+;
#其中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缓存大小,%(默认),可设置成百分比,也可设置成具体值,如256mb。
indices.queries.cache.size: %
#索引期间的内存缓存,有利于索引吞吐量的增加。
indices.memory.index_buffer_size: 3%
#开启了内存地址锁定,为了避免内存交换提高性能。但是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:
#queue_size允许控制没有线程执行它们的挂起请求队列的初始大小。
thread_pool.search.size:
#size参数控制线程数,默认为核心数乘以5。
thread_pool.search.min_queue_size:
#min_queue_size设置控制queue_size可以调整到的最小量。
thread_pool.search.max_queue_size:
#max_queue_size设置控制queue_size可以调整到的最大量。
thread_pool.search.auto_queue_frame_size:
#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:
http.port:
discovery.zen.ping.unicast.hosts: ["192.168.1.11:9300","192.168.1.12:9300"]
discovery.zen.minimum_master_nodes:
discovery.zen.ping_timeout: 120s
client.transport.ping_timeout: 60s
indices.queries.cache.size: %
indices.memory.index_buffer_size: %
bootstrap.memory_lock: true
bootstrap.system_call_filter: false  
node.master: true
node.data: true
thread_pool.search.queue_size:
thread_pool.search.size:
thread_pool.search.min_queue_size:
thread_pool.search.max_queue_size:
thread_pool.search.auto_queue_frame_size:
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常规操作

检查三个节点的情况:
发现是GREEN的绿色健康状态,说明备份被分配完成,可用集群配置完成。

查看状态

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]# wget 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./config
[root@es-master config]# vim kibana.yml
#修改如下内容:
#对外服务监听端口
server.port:
#绑定可以访问5601端口服务的IP地址,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:   

启动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]

Elasticsearch集群+kibana的更多相关文章

  1. kibana显示elasticsearch集群中flume到入的日志

    日志通过flume导入elasticsearch集群见这里:flume 日志导入elasticsearch kibana介绍 kibana主页 kibana是一个功能强大的elasticsearch数 ...

  2. 【记录】centOS 搭建logstash +docker搭建elasticsearch伪集群+kibana链接集群elasticsearch节点

    [注意]本文主要用于自我记录,注释较少. 安装logstash 1.上传logstash-6.4.3.tar.gz到服务中 2.tar –zxvf logstash-6.4.3.tar.gz 3.cd ...

  3. elasticsearch 集群

    elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他们搭建成为一个集群 基本配置 每个节点都要进行这样的配置: cluster.name: ba ...

  4. elasticsearch 集群配置

    2015-10-10 09:56 by 轩脉刃, 999 阅读, 1 评论, 收藏, 编辑 elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他 ...

  5. 搭建Elasticsearch集群常见问题

    一.ES安装方法: Linux用户登录(bae),我们用的是5.3版本的包.从官网下载: curl -L -O https://artifacts.elastic.co/downloads/elast ...

  6. 实战之elasticsearch集群及filebeat server和logstash server

    author:JevonWei 版权声明:原创作品 实战之elasticsearch集群及filebeat server和logstash server 环境 elasticsearch集群节点环境为 ...

  7. Elasticsearch 集群和索引健康状态及常见错误说明

    之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思. 一.  ...

  8. Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)

    一.  ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...

  9. Azure vm 扩展脚本自动部署Elasticsearch集群

    一.完整过程比较长,我仅给出Azure vm extension script 一键部署Elasticsearch集群的安装脚本,有需要的同学,可以邮件我,我给你完整的ARM Template 如果你 ...

随机推荐

  1. 为什么管理人员都喜欢用Visio画图

    一.形状数据一体化 这是管理者最喜欢的功能了,这也Visio的最核心的功能: 操作如下: 例如流程中的步骤.开始日期或结束日期.成本.设备部件等.数字.图标.颜色.标志和进度条等图形有助于快速方便地浏 ...

  2. SparkSQL读写外部数据源-jext文件和table数据源的读写

    object ParquetFileTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() ...

  3. 转发: JS中的call()和apply()方法和区别 --小白变色记

    一.方法定义: apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. call:调用一个对象的一个方法,用另一个对 ...

  4. http服务读取配置文件,交叉编译

    因为是在windows上编译的代码,在linux上不可执行,所以需要交叉编译 package main import ( "flag" "gopkg.in/ini.v1& ...

  5. Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

    Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because ...

  6. TEX Quotes

    题目链接:https://cn.vjudge.net/problem/UVA-272 AC代码: /* */ #include <iostream> #include <stdio. ...

  7. python实现:判断某一天是那一年中的第几天

    方法1:先判断是否是闰年,然后再利用求和,得出某一天是第几天 # 方法1:low版 def func1(year, month, day): # 分别创建平年,闰年的月份天数列表(注意列表下标从0开始 ...

  8. Ps回调函数.拦截驱动模块原理+实现.

    目录 一丶简介 二丶原理 1.原理 2.代码实现 3.效果 一丶简介 主要是讲解.内核中如何拦截模块加载的. 需要熟悉.内核回调的设置 PE知识. ShellCode 二丶原理 1.原理 原理是通过回 ...

  9. jmeter接口自动化和性能学习目录

     目录黑色代表未完成的,绿色代表已完成的文章.目录的作用的为了引导和总结自己的学习,也是为了更好的分享给大家. 一.接口自动化 jmeter解决登录token获取 jmeter五种提取器 之 正则表达 ...

  10. Shiro安全框架-简介

    1. 简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 实际上,Shiro的主要功能 ...