一、前言
最近笔者学习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
(2)Kibana-8.4.3官网下载地址,Linux系统的选择:Linux x86_64,Windows系统的选择:Windows。
https://www.elastic.co/cn/downloads/kibana
(3)如果使用虚拟机搭建的Centos7系统,可以采取下载安装包的方式,然后上传到Centos7指定目录。若是使用云服务器,笔者更建议使用wget命令或curl的方式下载,速度更快,因为试过上传MySQL安装包,云服务器在1M带宽情况下,上传非常慢!如何使用wget命令或curl的方式下载,请继续浏览下去,会有详细介绍!
(4)Xshell下载,如果网盘失效,可自行网上搜索下载。
百度网盘:yyds
安装Xshell并和谐:
step1:双击 Xshell-7.0.0054.exe
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)是官方的,下载软件速度比蜗牛爬行好那么一丢丢而已!
如果出现如下报错,就是wget组件没有安装,需要手动安装。
-bash: wget: command not found
安装 wget 组件。
yum -y install 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 链接。
(3)官方的命令有点多,其实只需其中几条即可。
官方文档:
2、使用wget下载并解压
(1)先在centos新建指定目录,将软件下载到指定目录。
使用 mkdir 和 参数 -p 新建层级目录,如 software 和 elasticsearch。如果存在,不会覆盖;不存在就新建。
mkdir -p /usr/software/elasticsearch
(2)切换到 elasticsearch 目录下。
cd /usr/software/elasticsearch/
(3)复制官网上的命令或笔者从官网复制过来的命令进行下载。笔者只保留几条,校验sha512的就免了,觉得没必要。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.4.3-linux-x86_64.tar.gz
查看是否下载好:
(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/
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
network.host: 192.168.1.5
http.port: 9200
#内部通信端口
transport.profiles.default.port: 9300
#本地私有地址(云服务都有一个外网地址和本地私有地址)
discovery.seed_hosts: ["192.168.1.5"]
action.destructive_requires_name: true
#屏蔽自动下载geopip
ingest.geoip.downloader.enabled: false
#允许跨域,使用head等插件监控集群信息
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length
4、配置Elasticsearch-8.4.3的全局路径
注意:此处有坑,参考其它博文去配置,就入大坑。
(1)编辑 profile 文件,在末尾添加一行内容,记住,安装JDK1.8版本的只添加一行!!!(此处有第1个坑,有博文教程是添加两行,笔者会解释为什么只添加一行,添加两行那是大坑!)。
vim /etc/profile
(2)按 i 进入编辑模式
(3)在末尾添加一行,变量名是 ES_HOME :
export ES_HOME=/usr/local/elasticsearch-8.4.3
(4)按 Esc 退出编辑模式,再输入 :wq 保存并退出,此处有英文冒号,且顺序不能乱,学过Linux的都懂。
(5)刷新 profile 文件:
source /etc/profile
5、解释Elasticsearch-8.4.3的全局路径配置的坑
重头戏来啦,为什么不能在 profile 文件中添加两行内容呢?
(1)如果看到其它博文是添加两行,那一定不是安装JDK8,肯定是更高的版本,因为Elasticsearch-8.4.3要求运行的JDK为17版本(笔者了解有限,可能有误,可自行去求证)!截图来源其它博文。
(2)来看看elasticsearch-8.4.3目录,bin目录下的 elasticsearch-env 脚本内容,里面有判断是否使用本地安装的JDK(如JDK8),或者使用自带的JDK(高版本)。
elasticsearch-8.4.3自带高版本jdk包
elasticsearch-8.4.3/bin/ 下的 elasticsearch-env
(3)编辑 elasticsearch-env 文件
vim 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?这一堆英文看着很难受啊,登登登,谷歌翻译上场啦!
官方文档:
(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
添加以下两行(单位为:m 或 g),设置堆内存最小和最大值。因为是4G内存,所以搞个512MB也够了,官方建议是1G或2G
-Xms512m
-Xmx512m
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、修改当前用户文件数限制
官方文档:
(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
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 文件中。
(4)查看运行的 elasticsearch:
ps -aux|grep elasticsearch
(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)主要默认账户为:elastic、kibana_system、logstash_system、beats_system、apm_system、remote_monitoring_user
官方文档:
(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)。
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 :
5)生成的CA文件可以在 elasticsearch-8.4.3 目录下看到
ll /usr/local/elasticsearch-8.4.3/
6)当时去网上找教程,有些博文有写到 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
那么会在 elasticsearch-8.4.3 目录下生成 elastic-certificates.p12
7)移动 elastic-stack-ca.p12 和 elastic-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相关参数
由于前面已经配置好 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 密码库中!
1)Elasticsearch 密码库位置 elasticsearch-8.4.3/config/ 下的 elasticsearch.keystore
ll /usr/local/elasticsearch-8.4.3/config/
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流量
官方文档:
(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
(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
4)可以看看 elasticsearch 和 kibana 里面有些什么文件
查看 elasticsearch 目录下所有文件详细信息
ll elasticsearch
http.p12 文件比较重要,后面需要在elasticsearch.yml配置其所在绝对路径
查看 kibana 目录下所有文件详细信息
ll kibana
elasticsearch-ca.pem 文件比较重要,后面 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的生成,可按如下操作 。
(1)临时注释 elasticsearch.yml 配置文件与 xpack 中 transport 和 http 的配置参数
(2)添加参数允许创建 enrollment token
#允许创建 enrollment token
xpack.security.enrollment.enabled: true
(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 协议不被允许访问!
(3)再来测试https协议的:https://125.124.100.xx:9200/ 发现可以访问,并且需要输入账号、密码
账号:elastic
密码:前面重置默认账号elastic时设置的密码
(3)访问成功!
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类似,运行方式有相同也有不同。
官方文档:
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/
(3)kibana-8.4.3 目录下新建两个目录 data 和 logs,如果 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
展示效果为:
2、配置Kibana-8.4.3的全局路径
(1)编辑 profile 文件,在末尾也只添加一行内容,安装JDK1.8版本的只添加一行!
vim /etc/profile
(2)按 i 进入编辑模式
(3)在末尾添加一行,变量名是 KIBANA_HOME :
export KIBANA_HOME=/usr/local/kibana-8.4.3
按 Esc 退出,输入 :wq 保存并退出。
(4)刷新 profile 文件
source /etc/profile
四、设置 Kibana 的基本安全性
1、加密 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 。
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 文件
(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
(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"
elasticsearch.ssl.certificateAuthorities: [ "/usr/local/kibana-8.4.3/config/certs/elasticsearch-ca.pem" ]
此处要注意,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"
(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是正常连接的
(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
服务停止文章来源:https://www.toymoban.com/news/detail-782005.html
service kibana stop
服务重启文章来源地址https://www.toymoban.com/news/detail-782005.html
service kibana restart
到了这里,关于最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!