最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)

一、前言

  最近笔者学习Elasticsearch,官方最新稳定版为 Elasticsearch-8.4.3,想在云服务器上Centos7.9搭建。搭建之路坑多路少啊(指网上的博文教程五花八门,基本都是ES7版本居多,ES8有少数,各种配置参数一头雾水,细节不多说,照搬了踩坑跌得头破血流),对小菜的我来说,简直要发疯!

  不过,最后还是搭建好了,特来分享踩坑过程,希望能和广大读者一起学习,有错误也请指出。笔者不写丢三落四的教程,只写高质量教程,力求精益求精,参数配置细节尽可能描述出来,小白也能轻松安装部署!

  本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!

二、环境准备

1、云服务器 Centos7.9

(1)笔者安装ES8所用的云服务器厂商是天翼云的(因为腾讯云已经购买过,非新人)。建议:可以购买合适的各种品牌云服务器,例如 腾讯云、阿里云、华为云、天翼云等等,新客很便宜(标准云服务器性能比轻量应用服务器要好,缺点是价格稍贵,笔者更偏向标准云服务器)。若要长期学习,可以购买三年的,因为新客有优惠。云服务器商都有一个特点:老用户与Dog不得入内,续费贼贵!富N代除外,不缺钱。配置尽量选更高的,不然后面学着学着,各种软件吃内存,自己后悔买那么低配置。

(2)配置为:S3通用型云主机,2核4G,系统盘40G,1年,带宽1M。
通俗表达一下1M带宽:看视频高清流畅,带宽高;模糊卡顿,带宽低;浏览网页同理。1M是最低的带宽配置。
系统盘只有40G,我觉得够用了,也可以扩展数据盘,要另外收费,要配置搭载才能使用,厂商官网一般有教程,不是很难。

(3)因为笔者是新客,所以才155RMB,用来学习部署足够了。Elasticsearch本身对内存要求高,所以4G内存也够用,系统选的是Centos7.9。当然,也可以部署其它组件来学习。云服务器品牌选型自己斟酌,笔者不过多说明。

云服务器配置

2、Elasticsearch-8.4.3、Kibanan-8.4.3、Xshell7下载

(1)Elasticsearch-8.4.3官网下载地址,Linux系统的选择:Linux x86_64,Windows系统的选择:Windows。

https://www.elastic.co/cn/downloads/elasticsearch

Elasticsearch下载地址(2)Kibana-8.4.3官网下载地址,Linux系统的选择:Linux x86_64,Windows系统的选择:Windows。

https://www.elastic.co/cn/downloads/kibana

Kibana下载地址
(3)如果使用虚拟机搭建的Centos7系统,可以采取下载安装包的方式,然后上传到Centos7指定目录。若是使用云服务器,笔者更建议使用wget命令或curl的方式下载,速度更快,因为试过上传MySQL安装包,云服务器在1M带宽情况下,上传非常慢!如何使用wget命令或curl的方式下载,请继续浏览下去,会有详细介绍!

(4)Xshell下载,如果网盘失效,可自行网上搜索下载。
百度网盘:yyds

安装Xshell并和谐

step1:双击 Xshell-7.0.0054.exe

Xshell安装文件

step2:安装成功后不要启动,记得先关闭,不然和谐会失败!将文件夹 NetSarang.7.x.Patch 里面的 NetSarang.7.x.Patch.exe 和谐神器复制到软件安装根目录下。

和谐软件

和谐软件复制到根目录下

step3:双击和谐神器,点“应用”,会有提示成功的。杀毒软件报毒的话,就先退出杀软,和谐神器都这样。想免费就不要怕毒软,怕毒软就别想着免费。

运行和谐软件

3、云服务器配置yum源

(1)安装ES前先保证云服务器Centos7.9的一些功能正常使用,可能包括提示一些命令不存在错误,需要安装对应组件,或者yum源需要配置成阿里yum源。

(2)笔者所用的天翼云云服务器有自己的yum源(CentOS7-ctyun.repo),所以没有特意去配置阿里yum源(CentOS-Base.repo,和官方的文件名一样),不知道配置阿里yum源会不会报错,因为文件名都不一样。腾讯云云服务器就需要配置,不然默认的yum源(CentOS-Base.repo)是官方的,下载软件速度比蜗牛爬行好那么一丢丢而已!

天翼云yum源

如果出现如下报错,就是wget组件没有安装,需要手动安装。

-bash: wget: command not found

wget命令找不到

安装 wget 组件。

yum -y install wget

安装wget组件

(3)阿里云yum源官方教程地址

https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.66381b11Dqu5VT

step1:备份原来的yum源文件,这是好习惯,若出错,还能还原。

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

step2:下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ ,这里注意啊,官网列举了Centos8、Centos7和Centos6不同的下载命令,不要搞混。笔者用的是Centos7的命令。

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

step3:运行 yum makecache 生成缓存。
注意:非阿里云ECS用户会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’ 信息,先执行以下命令:

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

再来生成缓存

yum makecache

三、Elasticsearch安装部署(参照官方教程文档)

1、参考官网文档去部署。

(1)点 Repositories in the Guide 链接,打开官方文档,里面有很多配置相关的教程,后面安装会用到!文档是纯英文的,看起来很吃力,需要用到翻译软件,火狐和谷歌都有相关插件,笔者觉得好用的还是 谷歌翻译侧边翻译。目前浏览器和IDEA安装的谷歌翻译插件用不了,因为谷歌翻译(非谷歌搜索,N年前就收拾包袱走人,谷歌翻译是最近才退出的)已退出中国。网上有些教程,在hosts文件里面配置一个IP地址就能访问,这个不可靠,笔者试过,换好几个IP都没用,翻译照样报错。要正常使用,方法只能意会不能言传!

谷歌翻译 插件
谷歌翻译

侧边翻译 插件
侧边翻译

在这里插入图片描述

(2)点 Install Elasticsearch from archive on Linux or MacOS 链接。
Install Elasticsearch from archive on Linux or MacOS

(3)官方的命令有点多,其实只需其中几条即可。

官方文档
官方下载elasticsearch方式

2、使用wget下载并解压

(1)先在centos新建指定目录,将软件下载到指定目录。
使用 mkdir 和 参数 -p 新建层级目录,如 software 和 elasticsearch。如果存在,不会覆盖;不存在就新建。

mkdir -p /usr/software/elasticsearch

mkdir新建层级目录
(2)切换到 elasticsearch 目录下。

cd /usr/software/elasticsearch/

切换到elasticsearch目录

(3)复制官网上的命令或笔者从官网复制过来的命令进行下载。笔者只保留几条,校验sha512的就免了,觉得没必要。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.4.3-linux-x86_64.tar.gz

查看是否下载好:

elasticsearch安装包

(4)解压到 /usr/local/ 路径下。
记得加 -C 参数,后面加上要解压的目录。如果不是在 elasticsearch 目录下执行此命令,需要加绝对路径,不然识别不了 elasticsearch-8.4.3-linux-x86_64.tar.gz 在哪个位置。

在 elasticsearch 目录下

tar -xzf elasticsearch-8.4.3-linux-x86_64.tar.gz -C /usr/local/

不在 elasticsearch 目录下

tar -xzf /usr/software/elasticsearch/elasticsearch-8.4.3-linux-x86_64.tar.gz -C /usr/local/

(5)查看解压后的文件夹。

ll /usr/local/

es解压文件夹

3、配置 elasticsearch.yml 相关参数

(1)新建两个目录 data 和 logs(官方有提到是这两个文件夹名称),如果 logs 目录存在,就不用管。作用:配置文件 elasticsearch.yml 里面需要配置数据存储目录和日志目录两个参数,用来存储数据和日志。

mkdir /usr/local/elasticsearch-8.4.3/data
mkdir /usr/local/elasticsearch-8.4.3/logs

(2)编辑 elasticsearch.yml:

vim /usr/local/elasticsearch-8.4.3/config/elasticsearch.yml

(3)配置 data 和 logs 参数(移除注释即可,不用新增两行):

path.data: /usr/local/elasticsearch-8.4.3/data
path.logs: /usr/local/elasticsearch-8.4.3/logs

在这里插入图片描述

(4)修改elasticsearch.yml其它参数(找得到就放开注释,找不到就新增):

cluster.name: es8
node.name: node-1
node.attr.rack: r1

pic1

network.host: 192.168.1.5
http.port: 9200
#内部通信端口
transport.profiles.default.port: 9300
#本地私有地址(云服务都有一个外网地址和本地私有地址)
discovery.seed_hosts: ["192.168.1.5"]

pic2

action.destructive_requires_name: true
#屏蔽自动下载geopip
ingest.geoip.downloader.enabled: false

pic3

#允许跨域,使用head等插件监控集群信息
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length

pic4

4、配置Elasticsearch-8.4.3的全局路径

  注意:此处有坑,参考其它博文去配置,就入大坑

(1)编辑 profile 文件,在末尾添加一行内容,记住,安装JDK1.8版本的只添加一行!!!(此处有第1个坑,有博文教程是添加两行,笔者会解释为什么只添加一行,添加两行那是大坑!)。

vim /etc/profile

(2)按 i 进入编辑模式
vim编辑模式

(3)在末尾添加一行,变量名是 ES_HOME :

export ES_HOME=/usr/local/elasticsearch-8.4.3

配置es的全局路径
(4)按 Esc 退出编辑模式,再输入 :wq 保存并退出,此处有英文冒号,且顺序不能乱,学过Linux的都懂。

(5)刷新 profile 文件:

source /etc/profile
5、解释Elasticsearch-8.4.3的全局路径配置的坑

  重头戏来啦,为什么不能在 profile 文件中添加两行内容呢?

(1)如果看到其它博文是添加两行,那一定不是安装JDK8,肯定是更高的版本,因为Elasticsearch-8.4.3要求运行的JDK为17版本(笔者了解有限,可能有误,可自行去求证)!截图来源其它博文。
JDK17配置
(2)来看看elasticsearch-8.4.3目录,bin目录下的 elasticsearch-env 脚本内容,里面有判断是否使用本地安装的JDK(如JDK8),或者使用自带的JDK(高版本)。

elasticsearch-8.4.3自带高版本jdk包
自带jdk

elasticsearch-8.4.3/bin/ 下的 elasticsearch-env
在这里插入图片描述

(3)编辑 elasticsearch-env 文件

vim elasticsearch-env

elasticsearch-env

(4)分析脚本可知,如果配置了全局变量 $ES_JAVA_HOME ,那就优先使用本地配置的JDK版本(如JDK8),而恰恰 elasticsearch-8.4.3 不支持低版本的 JDK8 ,运行就直接报错!如果不配置这个全局变量,那就使用程序包自带的高版本JDK!

(5)如果别的博文写的解决方法是:注释掉或修改判断使用本地JDK的这段代码(如下)别听他们瞎扯,随意修改官方自带的脚本不可取,虽然暂时解决了问题,一旦更新了版本,问题一样会出现!所以,使用JDK8的,千万不要在 profile 文件中添加 $ES_JAVA_HOME 变量,除非安装更高的JDK17的版本,才需要添加 $ES_JAVA_HOME 全局变量。

if [ ! -z "$ES_JAVA_HOME" ]; then
  JAVA="$ES_JAVA_HOME/bin/java"
  JAVA_TYPE="ES_JAVA_HOME"

  if [ ! -x "$JAVA" ]; then
    echo "could not find java in $JAVA_TYPE at $JAVA" >&2
    exit 1
  fi

  # check the user supplied jdk version
  "$JAVA" -cp "$ES_HOME/lib/java-version-checker/*" org.elasticsearch.tools.java_version_checker.JavaVersionChecker
6、设置运行内存大小

   由于Elasticsearch是个Java程序,同样要被JVM管理,如果不指定运行内存,它会占用系统大量内存,导致系统非常非常卡顿!

(1)What the hell?这一堆英文看着很难受啊,登登登,谷歌翻译上场啦!

官方文档

jvm配置1

jvm配置1翻译

jvm配置2
jvm配置2翻译
jvm配置3
jvm配置3翻译
jvm配置4
jvm配置4翻译
jvm配置5
jvm配置5翻译
jvm配置6
jvm配置6翻译

(2)咳咳,这翻译,有些看着挺别扭的,所以,要中英文配合去看,如果是命令相关的(框框内的内容),就看英文原文的,那翻译简直无法直视啊!

(3)看官网这文档说法,Elasticsearch这货吃内存很大,默认使用内存大小似乎没介绍,嘿嘿,笔者较菜,看不出来。所以,前期购买的4G内存云服务器还是有必要滴!

(4)修改配置文件 jvm.options。其实官方建议(第一张图)是在 config/jvm.options.d 目录下新增自定义JVM选项文件,不要修改 jvm.options 文件,但又不说明文件名称是怎样,允许随意命名吗?为了避免错误,就直接在 jvm.options 配置参数了

vim /usr/local/elasticsearch-8.4.3/config/jvm.options

jvm.options

添加以下两行(单位为:m 或 g),设置堆内存最小和最大值。因为是4G内存,所以搞个512MB也够了,官方建议是1G或2G

-Xms512m
-Xmx512m

jvm内存参数

7、创建运行Elasticsearch和Kibana专用的普通用户

  因为 elasticsearch 和 kibana 不允许使用 root 用户启动,所以需要创建新用户启动

(1)创建专用账号,如 es

useradd es

(2)给 es 用户创建密码:

passwd es

自己输入密码(注意上面的 passwd 是给 es 用户设置密码,而不是将密码设置为 es)。

(3)分配权限【建议所有配置都设置好再来分配,只需执行一次命令。只要是在 root 用户下的操作(新增、复制),权限都属于 root 用户。elasticsearch-8.4.3目录某些文件的权限属于 root 用户, 在 es 用户下运行 elasticsearch ,会出现权限不够的报错。

chown -R es:es /usr/local/elasticsearch-8.4.3/
chmod 770 /usr/local/elasticsearch-8.4.3/
8、修改当前用户文件数限制

官方文档

limit

(1)查看当前用户文件数限制(默认为 1024):

ulimit -n

(2)编辑 limits.conf ,es 为上面创建的用户。

vim /etc/security/limits.conf

添加以下内容:

es hard nofile 65535
es soft nofile 65535

或其它博文写的,* 代表所有用户,笔者没试过,可自行验证:

* hard nofile 65535
* soft nofile 65535

limits.conf参数

9、设置虚拟内存

官方文档

虚拟内存
虚拟内存翻译

(1)编辑 sysctl.conf 。

vim /etc/sysctl.conf

(2)添加以下内容:

vm.max_map_count=262144

(3)使用 sysctl -p 使系统配置生效。

sysctl -p
10、测试Elasticsearch是否配置成功

(1)切换到 elasticsearch-8.4.3/bin

cd /usr/local/elasticsearch-8.4.3/bin

(2)务必记得,切换为 es 用户!在 root 用户下运行 elasticsearch 会报错!

su es

(3-1)前台运行:

./elasticsearch

按 ctrl + c 可停止程序。

(3-2)后台运行:

./elasticsearch -d -p pid

参数 -d :代表守护进程。
参数 -p :代表 parents,指从当前目录向上级目录递归,bin 目录的上级目录为 elasticsearch-8.4.3 。
参数 pid :代表 pid 文件,elasticsearch 运行后,对应的 pid 会写入到 pid 文件中。
pid文件

(4)查看运行的 elasticsearch:

ps -aux|grep elasticsearch

查看es运行信息

(5)后台运行的elasticsearch可用 kill -9 pid 来结束进程(可在 root 用户下执行此命令):

kill -9 6125
11、云服务器控制台设置安全组允许9200端口(Elasticsearch)和5601端口(Kibana)

  在云服务器控制台-安全组(每种品牌都不同,自行找找即可)允许elasticsearch的9200端口,kibana的5601端口,不然浏览器访问不了。
安全组
入方向规则

12、浏览器测试是否连接成功

  在浏览器输入 格式:服务器外网IP:9200 并回车。如:125.124.100.xx:9200

访问成功

  出来这玩意,说明配置成功!

  不需要任何用户名和密码就能访问其实是不安全的,生产环境必须配置账号和密码登录!

  接下来,带大家玩玩更高级的访问方式,需要账号和密码,不支持无加密的http协议访问,支持加密的https协议访问。步骤有些繁琐,参照官方文档去操作就问题不大。这是笔者一个一个坑踩,才写出的心血教程!

四、设置 Elasticsearch的安全性

【密码设置规范】后面的步骤会有很多的密码设置,建议使用一个统一的密码,格式:字母大小写+数字+符号(@#$%&! 之类),不要设置过于简单(123456 不可取,测试环境可以这么设置)。
1、设置Elasticsearch默认账户的密码。

(1)主要默认账户为:elastickibana_systemlogstash_system、beats_system、apm_system、remote_monitoring_user

官方文档

users

(2)有博文写到使用 elasticsearch-setup-passwords 插件来设置各账号的密码,但是在8.0版本之后已经过时,官网有介绍。官方建议使用 elasticsearch-reset-password 来重置密码!

官方文档
插件过时
(3)重置密码:elasticsearch-reset-password

官方文档
重置密码

切换到 elasticsearch-8.4.3/bin 目录下(可在 root 用户下执行)

cd /usr/local/elasticsearch-8.4.3/bin
./elasticsearch-reset-password -u elastic -i
./elasticsearch-reset-password -u apm_system -i
./elasticsearch-reset-password -u kibana_system -i
./elasticsearch-reset-password -u logstash_system -i
./elasticsearch-reset-password -u beats_system -i
./elasticsearch-reset-password -u remote_monitoring_user -i
2、设置 Elastic Stack 基本安全性

  按官方说法,在集群环境下,多个节点必须配置TLS,不配置不允许生产模式集群启动。

官方文档

基本安全性

基本安全性翻译

(1)使用 elasticsearch-certutil 工具生成证书颁发机构(CA)

证书颁发机构(CA)

CA下半说明

证书颁发机构(CA)翻译

CA下半说明翻译

1)切换到 elasticsearch-8.4.3/bin 目录下

cd /usr/local/elasticsearch-8.4.3/bin

2)可在 root 用户下执行 elasticsearch-certutil

./elasticsearch-certutil ca

3)此处按回车键跳过,不输入指定名称,那就是使用默认的 elastic-stack-ca.p12 作为名称。此文件包含 CA 的公共证书和用于为每个节点签署证书的私钥

Please enter the desired output file [elastic-stack-ca.p12]: 

4)设置CA密码(随意,但密码最好和其它设置的密码保持一致,不要太简单,可以复杂):

Enter password for elastic-stack-ca.p12 :

生成CA证书

5)生成的CA文件可以在 elasticsearch-8.4.3 目录下看到

ll /usr/local/elasticsearch-8.4.3/

CA文件生成路径

6)当时去网上找教程,有些博文有写到 elastic-certificates.p12 这个名称,一直不知道是怎么生成。后来在官网文档教程中,自己尝试,发现使用一条命令自动生成。

生成elastic-certificates.p12文件

./elasticsearch-certutil cert --ca elastic-stack-ca.p12

此处需要输入的是前面CA设置的密码:

Enter password for CA (elastic-stack-ca.p12) :

同样按回车键跳过:

Please enter the desired output file [elastic-certificates.p12]:

设置 elastic-certificates.p12 的密码:

Enter password for elastic-certificates.p12

配置elastic-certificates.p12

那么会在 elasticsearch-8.4.3 目录下生成 elastic-certificates.p12
elastic-certificates.p12生成目录

7)移动 elastic-stack-ca.p12elastic-certificates.p12 到指定目录下。

新建 certs 目录

mkdir /usr/local/elasticsearch-8.4.3/config/certs

移动文件

mv elastic-stack-ca.p12 elastic-certificates.p12 /usr/local/elasticsearch-8.4.3/config/certs/

(2)再次配置 elasticsearch.yml相关参数
配置elasticsearch.yml

  由于前面已经配置好 cluster.name 和 node.name ,这里只需再配置 xpack 相关参数。官方要求集群环境下,每个节点都必须配置,笔者目前只配置一个节点。

1)开启xpack

#开启xpack
xpack.security.enabled: true

2)开启集群中https传输

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: /usr/local/elasticsearch-8.4.3/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/local/elasticsearch-8.4.3/config/certs/elastic-certificates.p12

(3)重要(此处也是个大坑,不设置会报错):一定要将密码存储在 Elasticsearch 密码库中!

Elasticsearch keystore

1)Elasticsearch 密码库位置 elasticsearch-8.4.3/config/ 下的 elasticsearch.keystore

ll /usr/local/elasticsearch-8.4.3/config/

elasticsearch.keystore路径

2)每执行一条命令,都需要设置相应的密码

./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
3、设置 Elastic Stack 安全的HTTPS流量

官方文档

https安全流量1

https安全流量1翻译

https安全流量2

https安全流量2翻译

(1)运行 Elasticsearch HTTP 证书工具以生成证书签名请求 (CSR)。
切换到 elasticsearch-8.4.3/bin 下

cd /usr/local/elasticsearch-8.4.3/bin

运行 Elasticsearch HTTP 证书工具

./elasticsearch-certutil http

(2)此命令(elasticsearch-certutil http)会生成一个.zip文件,其中包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹都包含一个README.txt 解释如何使用这些文件。(步骤如下)

 1)当询问您是否要生成 CSR 时,请输入n。
Generate a CSR? [y/N]

n

 2)当询问您是否要使用现有 CA 时,输入y。
Use an existing CA? [y/N]

y

 3)输入您的 CA 的路径。elastic-stack-ca.p12这是您为集群生成 的文件的绝对路径。
CA Path:

/usr/local/elasticsearch-8.4.3/config/certs/elastic-stack-ca.p12

 4)输入您的 CA 的密码(只是举个例子,实际不要设置这么简单的)。
Password for elastic-stack-ca.p12:

123456

 5)输入证书的到期值。您可以输入年、月或日的有效期。例如,输入90D 90天。笔者设置的是10年。
You may enter the validity period in years (e.g. 3Y), months (e.g. 18M), or days (e.g. 90D)
For how long should your certificate be valid? [5y]

10Y

 6)当询问您是否要为每个节点生成一个证书时,输入y.
  每个证书都有自己的私钥,并针对特定的主机名或 IP 地址颁发。
Generate a certificate per node? [y/N]

y

 7)出现提示时,输入集群中第一个节点的名称。使用生成节点证书时使用的相同节点名称。
node #1 name:

node-1

 8)输入用于连接到您的第一个节点的所有主机名。这些主机名将作为 DNS 名称添加到证书的主题备用名称 (SAN) 字段中。
列出用于通过 HTTPS 连接到集群的每个主机名和变体。

a、主机名(hostnames)(笔者是有个域名的,但一直没用,此处配置暂时用不上,后面可能用到,可自行去查找用途):
Enter all the hostnames that you need, one per line.
When you are done, press once more to move on to the next step.

www.zhuangyt.cn

b、确认域名是否正确
You entered the following hostnames.
- www.zhuangyt.cn
Is this correct [Y/n]

y

 9)IP地址,自己服务器的外网IP
Enter all the IP addresses that you need, one per line.
When you are done, press once more to move on to the next step.

125.124.100.xx

 10)确认IP是否正确
You entered the following IP addresses.
- 125.124.100.xx
Is this correct [Y/n]

y

 11)是否更改 Key Name、Subject DN、Key Size,输入n,不更改。
Key Name: node-1
Subject DN: CN=node-1
Key Size: 2048

Do you wish to change any of these options? [y/N]

n

 12)设置 http.p12 密码,按回车键不设置
Provide a password for the “http.p12” file: [ENTER for none]
Repeat password to confirm:

123456

 13)最后生成一个 elasticsearch-ssl-http.zip 压缩包 ,保存在 elasticsearch-8.4.3 目录下。以下是日志内容。
What filename should be used for the output zip file? [/usr/local/elasticsearch-8.4.3/elasticsearch-ssl-http.zip]
Zip file written to /usr/local/elasticsearch-8.4.3/elasticsearch-ssl-http.zip

elasticsearch-ssl-http.zip

(3)将 elasticsearch-ssl-http.zip 移动到 elasticsearch-8.4.3/config/certs/ 目录下。

mv /usr/local/elasticsearch-8.4.3/elasticsearch-ssl-http.zip /usr/local/elasticsearch-8.4.3/config/certs/

(4)切换到 elasticsearch-8.4.3/config/certs/ 目录,解压 elasticsearch-ssl-http.zip

 1)切换到 certs 目录

cd /usr/local/elasticsearch-8.4.3/config/certs/

 2)解压 elasticsearch-ssl-http.zip

unzip elasticsearch-ssl-http.zip

 3)会生成两个文件夹 elasticsearch 和 kibana

elasticsearch 和 kibana
 4)可以看看 elasticsearch 和 kibana 里面有些什么文件

查看 elasticsearch 目录下所有文件详细信息

ll elasticsearch

http.p12 文件比较重要,后面需要在elasticsearch.yml配置其所在绝对路径
elasticsearch文件夹内的文件详情

查看 kibana 目录下所有文件详细信息

ll kibana

elasticsearch-ca.pem 文件比较重要,后面 Kibana 连接需要此文件!
kibana文件夹内的文件详情

(5)编辑 elasticsearch.yml ,配置HTTP层TLS/SSL加密传输参数
 1)编辑 elasticsearch.yml

vim  /usr/local/elasticsearch-8.4.3/config/elasticsearch.yml

 2)添加以下内容

#开启api接口https传输,配置HTTP层TLS/SSL加密传输
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: /usr/local/elasticsearch-8.4.3/config/certs/elasticsearch/http.p12

(6)重要:最后,一定要将私钥的密码添加到 Elasticsearch 中的安全设置(keystore)中!不然启动会报错!
 1)切换到 elasticsearch-8.4.3/bin/ 目录(可在root用户下)

cd  /usr/local/elasticsearch-8.4.3/bin/

 2)执行以下命令(可在 root 用户下执行,如果不行就切换到 es 用户),每条命令执行后需要设置密码

./elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
./elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

(7)将 elasticsearch-8.4.3 文件夹控制权限分配 给 es 用户

chown -R es:es /usr/local/elasticsearch-8.4.3/
chmod 770 /usr/local/elasticsearch-8.4.3/

  有些博文是 chmod 777 权限的,其实 770 更好些,前面两个7,代表 所属用户所属用户的组 都有 wrx(写入、读取、可执行)权限,最后一个是7,代表其它组外用户也有wrx(写入、读取、可执行)权限,真的有必要也给其它组外用户这么高权限吗?【w:4、r:2、x:1,所有权限相加等于7。- :横杆代表无权限】

4、设置 token 用于 Kibana 连接(此处可以不理会,笔者并没有设置过,读者可自行摸索,更好的方案就是笔者前面写的教程和后面Kibana安装部署的教程)

  其实在最初不设置任何安全性的账号和密码情况,运行 elasticsearch 的时候,已经自动生成一个 token ,会在日志里面输出来,很多博文都提到这一点。官网描述是下载elasticsearch安装包后,直接解压运行就能看到日志。没有过多配置。token只有30分钟有效

截图来源官网:
token官方截图

截图来源网上博文:
token博文截图
  由于最开始笔者是参考博文去进行各种配置的,博文并不多说明,所以踩坑多,日志早就被处理了,所以在日志里并没有看到有token。后期要玩玩token的生成,可按如下操作 。

(1)临时注释 elasticsearch.yml 配置文件与 xpack 中 transport 和 http 的配置参数
注释transport 和 http配置

(2)添加参数允许创建 enrollment token

#允许创建 enrollment token
xpack.security.enrollment.enabled: true

允许创建 enrollment token

(3)临时修改 elasticsearch.keystore 名称为 elasticsearch.keystore.bak

mv /usr/local/elasticsearch-8.4.3/config/elasticsearch.keystore /usr/local/elasticsearch-8.4.3/config/elasticsearch.keystore.bak

(4)在 elasticsearch-8.4.3/bin/ 目录下使用 elasticsearch-create-enrollment-token 工具生成 token

./elasticsearch-create-enrollment-token -s kibana
5、测试设置安全性后的Elasticsearch启动情况

(1)在 es 用户下运行 elasticsearch

切换到 elasticsearch-8.4.3/bin/ 目录下

cd /usr/local/elasticsearch-8.4.3/bin/

切换 es 用户

su es

可前台执行:

./elasticsearch

也可后台执行:

./elasticsearch -d -p pid

(2)浏览器输入(云服务器外网IP:9200):http://125.124.100.xx:9200/ 肯定是报错的,因为 http 协议不被允许访问!
http 协议不被允许访问

(3)再来测试https协议的:https://125.124.100.xx:9200/ 发现可以访问,并且需要输入账号、密码

账号:elastic
密码:前面重置默认账号elastic时设置的密码
https 协议被允许访问

(3)访问成功!
成功访问返回json

6、配置elasticsearch开机自启动(在root用户情况下执行不报错,脚本已经处理好)

(1)新增elasticsearch自启动配置文件

vim /etc/init.d/elasticsearch

添加以下内容,脚本里面写到先切换到 es 用户,然后在守护进程中运行,即后台运行

#!/bin/bash
#chkconfig: 345 63 37
#description: elasticsearch
#processname: elasticsearch-8.4.3

export ES_HOME=/usr/local/elasticsearch-8.4.3

case $1 in
	start)
		su - es<<EOF
		cd $ES_HOME
		./bin/elasticsearch -d -p pid
		exit
EOF
		echo "elasticsearch is started"
		;;
	stop)
		pid=`cat $ES_HOME/pid`
		kill -9 $pid
		echo "elasticsearch is stopped"
		;;
	restart)
		pid=`cat $ES_HOME/pid`
		kill -9 $pid
		echo "elasticsearch is stopped"
		sleep 1
		su - es<<EOF
		cd $ES_HOME
		./bin/elasticsearch -d -p pid
		exit
EOF
		echo "elasticsearch is restarted"
	;;
*)
	echo "start|stop|restart"
	;;
esac
exit 0

(2)增加脚本的可执行权限。

chmod 777 elasticsearch

(3)查看chkconfig list。

chkconfig --list

(4-1)把服务添加到chkconfig列表。

chkconfig --add elasticsearch

(4-2)把服务从到chkconfig列表删除(若需要)。

chkconfig --del elasticsearch

(5-1)设置elasticsearch服务自启动。

chkconfig elasticsearch on

(5-2)设置elasticsearch服务不启动(若需要)。

chkconfig elasticsearch off

(6)服务的启动、停止、重启和状态查看。

查看服务状态

service elasticsearch status

服务启动

service elasticsearch start

服务停止

service elasticsearch stop

服务重启

service elasticsearch restart

五、Kibana安装部署(参照官方教程文档)

1、下载、解压、运行步骤基本和Elasticsearch类似,运行方式有相同也有不同。

官方文档

Kibana官网文档

  What?只过了一天,Kibana版本就由 8.4.3 变为 8.5.0了,迭代很快啊!不过没关系,Kibana依旧使用8.4.3版本,和Elasticsearch8.4.3一致。

(1)下载 kibana-8.4.3,官网并没有使用 wget 方式下载,而是 curl 方式。

切换到 /usr/software/elasticsearch/ 目录下,也可自行在 /usr/software/ 目录下新建 kibana 目录

cd /usr/software/elasticsearch/

下载安装包

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.4.3-linux-x86_64.tar.gz

(2)解压到 /usr/local/ 目录。

tar -xzf kibana-8.4.3-linux-x86_64.tar.gz -C /usr/local/

kibana-8.4.3解压路径

(3)kibana-8.4.3 目录下新建两个目录 datalogs,如果 logs 目录存在,就不用管。

mkdir /usr/local/kibana-8.4.3/data
mkdir /usr/local/kibana-8.4.3/logs

(4)测试运行

切换到 kibana-8.4.3/bin/ 目录下

cd /usr/local/kibana-8.4.3/bin/

切换 es 用户

su es

前台运行

./kibana

后台运行,无法使用 -d -p pid 等参数,kibana不支持,运行以下命令即可(结束进程需要使用 kill -9 pid),不保存日志

nohup /usr/local/kibana-8.4.3/bin/kibana >>/dev/null 2>&1 &

(5)浏览器输入(云服务器外网IP:5601):125.124.100.xx:5601

展示效果为:
kibana初始运行效果

2、配置Kibana-8.4.3的全局路径

(1)编辑 profile 文件,在末尾也只添加一行内容安装JDK1.8版本的只添加一行

vim /etc/profile

(2)按 i 进入编辑模式

vim编辑模式

(3)在末尾添加一行,变量名是 KIBANA_HOME :

export KIBANA_HOME=/usr/local/kibana-8.4.3

KIBANA_HOME全局变量配置

按 Esc 退出,输入 :wq 保存并退出。

(4)刷新 profile 文件

source /etc/profile

四、设置 Kibana 的基本安全性

1、加密 Kibana 和 Elasticsearch 之间的流量

官方文档

加密 Kibana 和 Elasticsearch 之间的流量

(1)在 kibana-8.4.3/config/ 目录下创建 certs 目录。

mkdir /usr/local/kibana-8.4.3/config/certs

(2)复制前面 elasticsearch部署中,elasticsearch-ssl-http.zip 解压出来的 kibana 目录里 elasticsearch-ca.pem 文件到 certs 目录。

cp /usr/local/elasticsearch-8.4.3/config/certs/kibana/elasticsearch-ca.pem /usr/local/kibana-8.4.3/config/certs/

(3)使用 elasticsearch-certutil 工具生成 csr-bundle.zip

生成csr-bundle.zip

 1)切换到 /usr/local/elasticsearch-8.4.3/bin 目录下

cd /usr/local/elasticsearch-8.4.3/bin

 2)-dns 后面跟着 域名 或 IP,有就配置域名(自己申请的合法域名或其它假的域名,好像elasticsearch配置的时候,可以配置假的域名,自行去求证),没有就配置IP(是外网IP还是本地私有IP,笔者不清楚,两者都加进去了,用英文逗号隔开)。笔者云服务器外网IP:125.124.100.xx 已进行脱敏处理,读者可自行修改为自己的IP。

./elasticsearch-certutil csr -name kibana-server -dns zhuangyt.cn,www.zhuangyt.cn,192.168.1.5,125.124.100.xx

在 elasticsearch-8.4.3 目录下 生成 csr-bundle.zip 文件

csr-bundle.zip生成路径

(4)复制 csr-bundle.zip 到 /usr/local/kibana-8.4.3/config/certs/ 目录 。

cp /usr/local/elasticsearch-8.4.3/csr-bundle.zip /usr/local/kibana-8.4.3/config/certs/

(5)解压 csr-bundle.zip 。

切换到 kibana-8.4.3/config/certs 目录

cd /usr/local/kibana-8.4.3/config/certs

解压 csr-bundle.zip 出来文件夹为 kibana-server

unzip csr-bundle.zip

kibana-server文件夹

(6)进入到 kibana-server 目录执行命令生成 kibana-server.crt 文件,此步很重要,官方并没有介绍如何生成,后面参数配置却出现,让人一头雾水。

openssl x509 -req -in kibana-server.csr -signkey kibana-server.key -out kibana-server.crt

(7)配置 kibana.yml 参数

 1)编辑 kibana.yml配置文件

vim /usr/local/kibana-8.4.3/config/kibana.yml

 2)参数配置如下(移除注释即可,不用新增一行)

server.port: 5601

#server.host 必须为本机私有地址(例如 192.168.1.5),不能填 外网地址(例如 125.124.100.xx)
server.host: "192.168.1.5"

pic1

elasticsearch.ssl.certificateAuthorities: [ "/usr/local/kibana-8.4.3/config/certs/elasticsearch-ca.pem" ]

pic2

  此处要注意,elasticsearch.hosts 填的是云服务器外网IP,协议为 https 。elasticsearch.username 填的是 kibana_system 账号。elasticsearch.password 填的是 kibana_system 账号重置后的密码。

server.ssl.enabled: true
server.ssl.certificate: /usr/local/kibana-8.4.3/config/certs/kibana-server/kibana-server.crt
server.ssl.key: /usr/local/kibana-8.4.3/config/certs/kibana-server/kibana-server.key

elasticsearch.hosts: ["https://125.124.100.xx:9200"]

elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"

pic3

(8)将 kibana-8.4.3 文件夹所属用户和用户组修改为 es 用户,并将权限分配给 es 用户。

chown -R es:es /usr/local/kibana-8.4.3/
chmod 770 /usr/local/kibana-8.4.3/
2、测试设置安全性后是否成功运行

(1)切换到 kibana-8.4.3/bin 下

cd /usr/local/kibana-8.4.3/bin/

(2)运行 kibana

./kibana

nohup /usr/local/kibana-8.4.3/bin/kibana >>/dev/null 2>&1 &

(3)浏览器输入(https://云服务器外网IP:5601):https://125.124.100.xx:5601

如果出现此页面,说明部署成功!

用户名:elastic
密码:和elasticsearch登录时所用密码一致

成功运行

和elasticsearch是正常连接的

和elasticsearch是正常连接

(4)有些情况下,浏览器输入 https://125.124.100.xx:5601 后,报错“Kibana server is not ready yet”,原因可能如下:
 1)云服务器安全组没有放行 5601 端口。
 2)配置有误,运行失败。

kibana.yml文件中参数 elasticsearch.hosts 默认为    http://elasticsearch:9200
应该改为    https://125.124.100.xx:9200

 2)启动缓慢,还没完全运行起来。
 3)Kibana 和 Elasticsearch 版本不一致。

3、配置kibana开机自启动(在root用户情况下执行不报错,脚本已经处理好)

(1)新增kibana自启动配置文件

vim /etc/init.d/kibana

添加以下内容,脚本里面写到先切换到 es 用户,然后后台运行,但不会保存日志

#!/bin/bash
# chkconfig: 2345 98 02
# description: kibana
# processname: kibana-8.4.3

export KIBANA_HOME=/usr/local/kibana-8.4.3
case $1 in
	 start)
		su - es <<EOF
		nohup $KIBANA_HOME/bin/kibana >>/dev/null 2>&1 &
		exit
EOF
		echo "kibana started"
		;;
	 stop)
		# 这里主要是通过网络端口5601寻找kibana进程的pid
		kibana_pid_str=`netstat -tlnp |grep 5601 | awk '{print $7}'`
		kibana_pid=`echo ${kibana_pid_str%%/*}`
		kill -9 $kibana_pid
		echo "kibana stopped"
		;;
	 restart)
		kibana_pid_str=`netstat -tlnp |grep 5601 | awk '{print $7}'`
		kibana_pid=${kibana_pid_str%%/*}
		kibana_pid=`echo ${kibana_pid_str%%/*}`
		kill -9 $kibana_pid
		echo "kibana stopped"
		su - es <<EOF
		nohup $KIBANA_HOME/bin/kibana  >>/dev/null 2>&1 &
		exit
EOF
		echo "kibana restart"
		;;
	 status)
		kibana_pid_str=`netstat -tlnp |grep 5601 | awk '{print $7}'`
		if test -z $kibana_pid_str; then
		   echo "kibana is stopped"
		else
		   pid=`echo ${kibana_pid_str%%/*}`
		   echo "kibana is started,pid:"${pid}
		fi
		;;
	*)
		echo "start|stop|restart|status"
		;;
esac
exit 0

(2)增加脚本的可执行权限。

chmod 777 kibana

(3)查看chkconfig list。

chkconfig --list

(4-1)把服务添加到chkconfig列表。

chkconfig --add kibana

(4-2)把服务从到chkconfig列表删除(若需要)。

chkconfig --del kibana

(5-1)设置kibana服务自启动。

chkconfig kibana on

(5-2)设置kibana服务不启动(若需要)。

chkconfig kibana off

(6)服务的启动、停止、重启和状态查看。

查看服务状态

service kibana status

服务启动

service kibana start

服务停止

service kibana stop

服务重启

service kibana restart
  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白有点菜

你的鼓励决定文章的质量

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值