0 写在前面
本文介绍,在云服务器上安装Elaticsearch8 + Kibana8,并进行外网访问配置的全过程。主要介绍:
- 购买、连接、部署云服务器
- 部署、配置Elaticsearch,进行连通测试
- 部署、配置Elaticsearch,进行连通测试
其中,重点介绍不关闭ES8后自带的xpack.security.enabled: true
配置,即使用https访问ES资源的配置方法。
配置
项 | 版本 |
---|---|
服务器类型 | 腾讯云轻量应用服务器,CPU 2核 - 内存 2GB - 系统盘 40GB |
操作系统版本 | Ubuntu Server 20.04 LTS 64bit |
Elaticsearch | 版本8.2.3, build_type为tar(官网下载的压缩包) |
Kibana | 版本8.2.3, build_type为tar(官网下载的压缩包) |
其他有用工具 | postman(相对于curl指令,我更习惯使用postman) vscode(记录操作步骤、编写请求) putty(远程连接服务器) |
说明:
- 其他有用工具不影响安装,个人使用习惯而已。
- 查阅问题时,请注意各项的版本。例如,由于我使用压缩包部署,所以不需要配置JDK等内容,而也因此。如果需要的话,各项系统变量都需要手动录入。
主要参考书籍为:
赵建亭. 《Elasticsearch权威指南》 清华大学出版社
注意此书基于ES7,部分配置内容和ES8有所出入,供参考。
碎碎念
不得不说,使用云服务器,不同于我之前在本地安装。当时在本地上,从下载完成,到我使用Kibana的dev tool,用时不超过30分钟。因为ES本身封装的已经很好了,努力在做开箱即用的配置。
我原以为云服务器就是操作稍微麻烦,就是没想到有如此多大大小小的坑。
期间,还要在充斥着无意义重复转载、内容农场、低能SEO,像垃圾堆一样的中文资料中查找有关信息,真是一个富有挑战性的,又恶心又有趣的体验。
希望我这篇文章能让阁下在垃圾堆里面少翻点。感谢网络上各位网友的无私分享,给我很大帮助。
1 购买
挑个合适的套餐即可,只要符合自身需求就行。这台服务器主要在云服务器运行ES系统,监控有关数据,向我发送信息,最基础配置已经满足我的需要。
系统方面,我选用的系统是ubuntu,主要用起来比较熟。win server 2012 R2我工作时用过,当时没给我留下好的印象,所以不使用。
价格方面,最基础也意味着最便宜。最便宜的服务器,新客的基础款轻量应用服务器60-70元一年,别的活动可能更低。
2 服务器配置、连接
2.1 配置登录
我比较习惯使用putty工具,只需要重置密码后,使用SSH登录即可。注意你的公网ip和内网ip都显示在控制台中,远程电脑登录时候使用公网ip。
主要步骤
- 使用控制台,服务器关机
- 点击远程登录中的重置密码,小本本记好密码,重置完成后开机
- 使用重制后的密码使用putty登录
- 成功标志为:能使用putty交互命令
注意
- 我一直使用非root用户登录。使用root用户虽然方便一些,但在工作中是十分危险的。
- 启动ES不可以使用root用户。
2.2 配置可视化桌面
我需要登录服务器,使用浏览器进行某些可视化内容,所以要安装桌面,主要参照腾讯云文档:
(不得不说,有个官方文档还是很好的)
主要步骤
- 服务器安装gnome桌面及有关依赖的全家桶
- 服务器安装tightvncserver,并配置文件
- 使用控制台远程登录中的VNC登录
- 成功标志为:能看到GNOME桌面
注意
- 我没有使用下载的VNC Viewer客户端,而是直接使用了腾讯云服务器管理的控制台VNC登录。因为我的电脑上,VNC客户端似乎有网络配置的问题,我每次链接的时候都提示超时。使用网页端就正常,可以进去看到GNOME桌面。
- 注意使用gnome对内存影响还是比较大的,尤其对于轻量服务器更是大的负担。所以我需要在不用时,关闭GNOME桌面。
如何关闭桌面服务
运行以下命令并重启
sudo systemctl set-default multi-user
运行完后,在控制台中重启服务器。
2.3 配置防火墙
我没有弄明白腾讯云防火墙与ubuntu防火墙的关系。似乎ubuntu上防火墙默认不开启,只需要在腾讯云控制台开启有关端口即可。
由于ES、Kibana的默认端口为5601和9200,公网访问,需要手动放行。
主要步骤
- 进入控制台的防火墙界面
- 添加规则
- 端口号填写
5601,9200
,其余选项默认,确定保存规则即可
3 安装ES并公网访问
请注意,本文重点介绍不关闭ES8自带的xpack.security.enabled: true
配置,即使用https访问ES资源的配置方法。如果关闭自带此配置,有可能会简便很多。
如果只需要看配置SSL部分,请直接转3.2 具体配置一节
3.1 下载安装
- 下载解压包
访问Elasticreach官网下载即可。注意目前(2022年8月20日),最新版是8.3.3,而我下载的版本是8.2.3,要去以往发行版下载。类型选择LINUX X86_64
我没有使用常用的apt
方式安装,因为腾讯云服务器的Ubuntu已经配置腾讯云软件源镜像(访问下载速度很快),但我不会如何下载我想要的版本。
下载完成后,使用unzip
解压缩包就可使用了。
- 配置
配置以下几个东西,具体方式可以后看3.2 具体配置一节:
- 公网访问。即修改Elasticsearch.yml文件的networkhost :0.0.0.0 以增加公网访问
- JVM内存分配。即修改configs/jvm.options参数
- 更改一个进程能拥有的最大内存区域限制。即修改/etc/sysctl.conf文件
- Kibana访问。即修改Elasticsearch.yml文件,增加http.cors的跨域访问配置
- 重新生成CA和证书
前三项配置完,就可以服务器启动服务,服务器和公网访问ES服务了,后两项主要是针对Kibana的配置。
3.2 具体配置
绝大多数ES有关的配置,配置都发生在ES解压后的文件夹下。以下提到的bin/和config/,都是Elasticsearch下的文件夹。进行配置时,应停止ES服务。ES服务运行时,不会实时加载配置。(除了安全配置信息)
3.2.1 公网访问
切换到config文件夹
cd config/
编辑配置文件elasticsearch.yml
vi elasticsearch.yml
找到默认注释的networkhost,增加配置项并保存
networkhost :0.0.0.0
3.2.2 JVM内存分配
(此步骤针对内存较小的服务器。如果服务器内存满足JVM默认配置,没发生3.5节常见问题1,是不必配置的)
切换到config文件夹
cd config/
编辑配置文件jvm.options
vi jvm.options
修改以下参数并保存。
原来的两个参数:
-Xms4g
-Xmx4g
改后的参数
-Xms512M
-Xmx512M
3.2.3 内存区域限制
(这个内存区域限制,是ubuntu系统的限制)
运行命令
sudo sysctl -w vm.max_map_count=262144
切换到etc/下的文件,查看是否有此修改
sudo vi /etc/sysctl.conf
以下内容有的话不用处理,没有的话增加配置
vm.max_map_count=262144
3.2.4 Kibana访问
切换到config文件夹
cd config/
编辑配置文件elasticsearch.yml
vi elasticsearch.yml
增加如下配置并保存
http.cors.enabled: true
http.cors.allow-origin: "*"
3.2.5 重新生成CA和证书
这个配置对于Kibana很重要,过程比较长,耐心去做。生成的CA、证书对、密钥等都可以反复生成,覆盖之前的配置,多进行尝试就会成功。
建议有条件的直接去看官方文档,我会基于官方文档进行我的操作记录:
官方文档:生成CA、P12证书并配置
官方文档:生成PEM证书并配置
这位网友写的简略些,但也可以做参考:
云服务器 Centos7 部署 Elasticsearch 8.0 + Kibana 8.0 指南
以下是正式步骤:
Ⅰ 生成CA
切换到bin/下,运行:
/elasticsearch-certutil ca
注意:
- 输入完命令后进入交互模式,CA是可以自己命名的。建议重命名,和原本的CA区分。
- 生成的CA文件在文件夹根目录(bin/的上一级),后面配置时要用到。
- 虽然空密码也可以,但是建议使用密码.
Ⅱ 生成P12文件
切换到bin/下,运行:
/elasticsearch-certutil cert --ca elastic-stack-ca.p12
注意:
- 此步的
elastic-stack-ca.p12
是默认输出P12文件的名称,可以修改成自己需要输出的文件名称,不加.p12
也是没问题的。 - 生成的P12文件在ES文件夹config/目录,后面配置elasticsearch.yml要用到。
- 虽然空密码也可以,但是建议使用密码.
Ⅲ 修改ES安全配置
切换到config文件夹
cd config/
编辑配置文件elasticsearch.yml
vi elasticsearch.yml
注意修改配置文件的以下节:
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: {P12文件}
truststore.path: {P12文件}
注意:
- 如果你没有像我重新命名生成的p12文件,保持原样即可。因为默认名称生成的P12文件覆盖掉了原来的文件。
Ⅳ 刷新密钥
切换到bin/下,运行:
./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
会提示原来已经有密钥,覆盖即可。
Ⅴ 生成https证书压缩包
这一步骤的目标是生成一个包含ES、Kibana各自证书的压缩包elasticsearch-ssl-http.zip
。
以下步骤是我根据自身情况,在此基础上做了部分修改。如果情况与我不同,要以官方文档为准。
官方文档:生成PEM证书并配置
我的场景:没有域名、负载均衡等服务器,ES为单节点的集群。公网访问时,直接以http + ip方式访问Kibana服务。Kibana以https方式访问ES资源。
step1. 切换到bin/下,运行:
./elasticsearch-certutil http
然后一步一步来,以下是官网的一个例子,我补充了我配置的内容:
- When asked if you want to generate a CSR, enter n.
是否生成CSR,输入n - When asked if you want to use an existing CA, enter y.
是否使用已有CA,输入y - Enter the path to your CA. This is the absolute path to the elastic-stack-ca.p12 file that you generated for your cluster.
CA文件的绝对路径。官网的这个提示输入P12文件路径似乎有问题,我输入第Ⅰ步中CA的CA文件路径才正常。
/home/ubuntu/ESStack/elasticsearch-8.2.3/{CA名称}
- Enter the password for your CA.
第Ⅰ步中CA的密码。 - Enter an expiration value for your certificate. You can enter the validity period in years, months, or days. For example, enter 90D for 90 days.
默认生效时间5年,回车即可 - When asked if you want to generate one certificate per node, enter y.
输入y
Each certificate will have its own private key, and will be issued for a specific hostname or IP address.
When prompted, enter the name of the first node in your cluster. Use the same node name that you used when generating node certificates.
输入节点名称,跟生成CA时用的节点应该是一致的。我没有修改节点名称,那么默认节点名称是 node-1 - Enter all hostnames used to connect to your first node. These hostnames will be added as DNS names in the Subject Alternative Name (SAN) field in your certificate.
List every hostname and variant used to connect to your cluster over HTTPS.
我没有主机、域名的问题,直接回车 - Enter the IP addresses that clients can use to connect to your node.
注意此步很重要。我输入了服务器的公网ip + 内网ip,是可行的 - Repeat these steps for each additional node in your cluster.
它会确认以上信息是否输入正确,不正确的话重来一次。还会询问是否再生成额外的证书,拒绝即可。
以上步骤完成,会自动在文件夹根目录(bin/
的上一级)生成压缩包elasticsearch-ssl-http.zip
。其包含两个文件夹,里面的结构如下:
/elasticsearch
|_ README.txt
|_ http.p12
|_ sample-elasticsearch.yml
/kibana
|_ README.txt
|_ elasticsearch-ca.pem
|_ sample-kibana.yml
step2. 将此压缩包解压缩,把http.p12
文件移动到config/certs
下,覆盖原文件
注:如果你需要改到别的位置,修改elasticsearch.yml的此节:
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
step3. 切换到bin/
,运行以刷新密钥:
./elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
注意和第Ⅳ步的命令不同
Ⅵ 配置Kibana的安全配置
此步骤是针对于Kibana来配置的,不需要配置Kibana的话可以跳过。放在3.2下,只是为了操作流畅。
以上所有bin/
和config/
都是elasticsearch-8.2.3
文件夹下的。
以下所有bin/
和config/
都是kibana-8.2.3
文件夹下的。
step1. 修改kibana.yml
的配置,主要修改或者增加:
- elasticsearch.hosts
这个默认是http访问,要变成https,并加上公网ip(大括号不用输入)
elasticsearch.hosts: ["https://{云服务器公网ip}:9200"]
- 用户名/密码
这个配置有多种选择,似乎token也可以,我选择了用户名/密码的方式。注意用户不可以使用elastic
用户,推荐使用kibana_system
用户。如果不清楚kibana_system
的密码,就去重置。
重置方式:切到ES的bin/下,运行:
./elasticsearch-reset-password -u kibana_system
然后用获取到的用户名/密码进行配置
elasticsearch.username: "kibana_system"
elasticsearch.password: {重置后的密钥}
- elasticsearch.ssl.certificateAuthorities
这步就是用第Ⅴ步得到的Kibana文件夹里面的pem文件进行配置。
/kibana
|_ README.txt
|_ elasticsearch-ca.pem
|_ sample-kibana.yml
配置前,要把elasticsearch-ca.pem放置到合适的路径。我放置在了config/
下。
我这里有点问题,如果像sample-kibana.yml
使用相对路径,会在Kibana启动时无法读取。因此,我使用绝对路径,配置如下:
elasticsearch.ssl.certificateAuthorities: ["/home/ubuntu/ESStack/kibana-8.2.3/config/elasticsearch-ca.pem"]
3.3 连通测试
cd到bin/下,运行./elasticsearch
即可启动ES服务
连通ES:方式一 curl命令
使用curl命令(大括号不用输入)
curl -k -i -XGET "https://{云服务器公网ip}:9200" --user {用户名称}:{用户密码}
返回HTTP/200即连通成功。
(顺带一提,我至今没搞懂win10上powershell怎么使用curl,只能用cmd,也是够神必的。)
连通ES:方式二 postman
- 新建HTTP request,使用GET,url输入(大括号不用输入):
https://{云服务器公网ip}:9200
- 进入Authorization,选取Basic Auth,右侧Username和Password输入用户名称、用户密码
- 点击Send,Body部分正确返回内容即成功
3.4 常用操作
重置ES用户密码
切到ES的bin/下,运行:
./elasticsearch-reset-password -u elastic
这样重置了elastic
这个用户的密码,其他用户同理。
撤销解压操作
解压缩可能出现忘记输入解压输出路径的情况。解压ES压缩包和解压http密钥对都有可能出问题。只需要运行以下命令:
zipinfo -1 ./{zip文件名称}| xargs rm -rf
关闭ES进程
出于各种原因,可能存在putty断开连接但是ES进程仍旧继续的情况。若需要手动结束的话,需要:
找到pid
ps -ef | grep elastic
结束进程(大括号不用输入)
kill -9 {pid}
3.5 常见问题
问题:进程会自动killed,且不打印日志
原因:原因是内存太低,JVM受不鸟了。3.2.2节已有配置方案。需要去configs/jvm.options
里面修改以下两个参数:
-Xms4g
-Xmx4g
我改成了
-Xms512M
-Xmx512M
问题:ES无法启动,日志提示内存问题,具体如下:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因是系统默认的进程内存区限制不满足ES要求,要手动更改,3.2.3节已有配置方案。
要在服务器执行:
sudo sysctl -w vm.max_map_count=262144
执行后,并修改/etc/sysctl.conf文件,末尾添加或者修改
vm.max_map_count=262144
注意,执行完sudo命令之后,一般已经有此配置了,不必重复配置。
4 安装Kibana并公网访问
4.1 下载安装
- 下载解压包
访问Elasticreach官网下载即可。注意目前(2022年8月20日),最新版是8.3.3,而我下载的版本是8.2.3,要去以往发行版下载。类型选择LINUX X86_64
我没有使用常用的apt
方式安装,因为腾讯云服务器的Ubuntu已经配置腾讯云软件源镜像(访问下载速度很快),但我不会如何下载我想要的版本。
下载完成后,使用unzip
解压缩包就可使用了。
- 配置
配置以下几个东西,具体方式可以后看4.2 具体配置一节:
- Kibana的公网访问。即修改Kibana.yml文件,增加server.host: "0.0.0.0"
- 重新生成CA和证书
4.2 具体配置
4.2.1 公网访问
切换到config文件夹
cd config/
编辑配置文件kibana.yml
vi kibana.yml
找到默认注释的server.host,增加配置项并保存
server.host: "0.0.0.0"
4.2.2 重新生成CA和证书
和3.2.5配置
没有任何区别。涉及Kibana部分,就是3.2.5配置
的Ⅵ 配置Kibana的安全配置部分
4.3 连通测试
cd到bin/下,运行./kibana
即可启动Kibana服务
连通Kibana:浏览器
在本地浏览器访问以下URL(大括号不用输入)
http://{云服务器公网ip}:5601/login?next=%2F
能看到登录界面,能登录到Kibana连通成功。登陆时可以使用elastic
用户
4.4 常见问题
- kibana无法启动,运行时提示
[error]Unable to retrieve version information……self signed certificates
需要配置kibana.yml和elasticsearch.yml的SSL,可以看3.2.5配置
- 重新生成Kibana令牌
在第一次启动ES时,ES会显示elastic用户的密码和有效期为30分钟的,Kibana的令牌。令牌的作用是:
如果你没有像我这样配置,而是选择直接以默认配置方式启动ES、Kibana的话,启动完Kibana会提示你用浏览器访问指定地址,输入令牌,完成ES和Kibana的绑定。
如果某些原因导致令牌失效,以下方式重新生成令牌:
切换到ES文件夹的bin/
下
cd /bin
运行命令
./elasticsearch-create-enrollment-token -s kibana