目录:

一、软件及环境准备

服务器环境

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. MAT022 Foundations of Statistics

    MAT022 Foundations of Statistics and Data Science Summative Assessment 2019/20MAT022 Foundations of ...

  2. django-登录和退出及redis存储session信息

    登录 1.视图函数views.py # 登录 from django.contrib.auth import authenticate, login # authenticate:user认证 log ...

  3. 使用docker来创建一个etcd集群

    docker run -d --name etcd1 --network etcdnet --ip 172.25.0.101 -p 23791:2379 -e ETCDCTL_API=3 -v /ro ...

  4. Spark-源码分析01-Luanch Driver

    1.SparkSubmit.scala 什么是Driver 呢?其实application运行的进程 就是driver,也是我们所写的代码就是Driver. object DefaultPartiti ...

  5. 不用VS调试.Net

    将来,任何开发人员都将需要调试应用程序,并且将无法访问Visual Studio,在某些情况下甚至无法访问源代码.例如,在生产web或应用服务器上调试问题时,我真的不想安装Visual Studio并 ...

  6. 【loj2985】【WC2019】I君的商店

    题目 交互题: 有\(n\)个物品,每个物品的价格为0或者1; 给出为1的物品的个数奇偶性k,并保证至少有一个价格为1: 每次可以询问一个集合S的另一个集合T的价值和的大小,交互库会返回>=或者 ...

  7. PKUWC2019 Round 2 没去祭

    因为今年有两场 PKUWC,所以叫 PKUWC2019 Round 2. 因为一些沙雕原因,今年去不了了. Day 0 一如既往,没有集训就去上数学课,今天讲几何变换,一如既往的只会说"少女 ...

  8. 升级pip3的正确姿势--python3 pip3 update

    升级pip3的正确姿势为: pip3 install --upgrade pip 而不是 pip3 install --upgrade pip3

  9. mapreduce中reduce没有执行

    hadoop执行mapreduce过程reduce不执行原因 1.如果你的map过程中没有context.write()是不执行reduce过程的:2.如果你的map过程中context.write( ...

  10. NIO 选择器 Selector

    选择器提供选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能.就像在第一章中描述的那样,就绪选择和多元执行使得单线程能够有效率地同时管理多个 I/O 通道(Channels).C/C++代码的 ...