前言
刚开始使用ES接触的就是rpm或者是云上提供的ES服务,基本上开箱即用。特别是云上的ES服务,开局就是集群版本,提供的是优化后的参数配置、开箱即匹配访问鉴权及常用插件,如无特殊需要基本上屏蔽了所有细节,直接可投入生产使用。
现在遇到一个问题,验证一下远程集群的配置和使用,在没有多套集群的情况下,想在本地模拟两套ES集群,不得不从头走一遍ES集群从下载、自定义配置到启动kibana可使用的这一套流程。简单记录一下ES维护最原始的状态。
task:
- 启动一个单节点的ES服务
- ES开启鉴权
- 创建用户
- 配置kibana
环境介绍
操作系统: macOS 12.1
硬件架构: ARM
ES: 8.12.2
Jdk: 22.0.1
下载es包
本次部署使用8.12.2版本的ES,不是最新版本,需要到https://www.elastic.co/cn/downloads/past-releases#elasticsearch页面查找所需要的版本并下载。
下载地址如下:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-8-12-2
选择对应原版本: MACOS AARCH64 : https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.2-darwin-aarch64.tar.gz
配置jdk
mac上使用brew安装jdk
brew install java #默认会安装最新版的jdk
因为使用的ES基本也是最近的版本,最新版本的jdk可以支持ES运行。
手动安装指定jdk版本
下载所需要的jdk版本后,解压到指定的目录
编辑{userhome}/.zshrc
export JAVA_HOME=/Users/abc-test/data/jdk1.8.0_411.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME/bin
重新加载.zshrc
source .zshrc
配置ES
运行ES
解压es包
tar -xzf elasticsearch-8.12.2-darwin-x86_64.tar.gz
修改端口号(同一台机器上要运行多个ES进程,修改端口号避免冲突)
vim elasticsearch-8.12.2/config/elasticsearch.yml
#
cluster.name: remote-test #修改集群名称
node.name: node-101 #指定节点名称
network.host: 0.0.0.0 #绑定的地址,如不打开端口只监听127.0.0.1
http.port: 19200 #指定http端口
cluster.initial_master_nodes: ["node-101"] #master节点 单节点集群填本身就可以,多节点集群需要填上master节点的列表
transport.port: 19300 #tcp的监听端口
修改完成启动ES进程
#后台执行
bin/elasticsearch -d
用户
ES进程启动后,会在第一次启动时打印出内置用户elastic的密码。 日志类似这样:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.ℹ️ Password for the elastic user (reset with
bin/elasticsearch-reset-password -u elastic
):
XQZ2EWK3LG8SaB*AYrdMℹ️ HTTP CA certificate SHA-256 fingerprint:
79f5240be4f0a02af881d7c73a626741d6e8df9ff130e52603f668635ab746c6ℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjEyLjIiLCJhZHIiOlsiMTAuMjUzLjMuMTU5OjE5MjAwIl0sImZnciI6Ijc5ZjUyNDBiZTRmMGEwMmFmODgxZDdjNzNhNjI2NzQxZDZlOGRmOWZmMTMwZTUyNjAzZjY2ODYzNWFiNzQ2YzYiLCJrZXkiOiJzd3hlbTVBQnRqajNYdHpDUFdHZzpZTnEtOGRTcFI0bVQ1c3phZjMtWVh3In0=ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes withbin/elasticsearch --enrollment-token <token>
(valid for the next 30 minutes):
eyJ2ZXIiOiI4LjEyLjIiLCJhZHIiOlsiMTAuMjUzLjMuMTU5OjE5MjAwIl0sImZnciI6Ijc5ZjUyNDBiZTRmMGEwMmFmODgxZDdjNzNhNjI2NzQxZDZlOGRmOWZmMTMwZTUyNjAzZjY2ODYzNWFiNzQ2YzYiLCJrZXkiOiJzZ3hlbTVBQnRqajNYdHpDUFdHZzpYdmMyc0NQN1EzMlIzODJYbVExNHdnIn0=If you’re running in Docker, copy the enrollment token and run:
docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.12.2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
可自行重置默认密码
bin/elasticsearch-reset-password -u elastic
验证ES启动是否成功
curl localhost:19200/_cat/health -u "elastic:XQZ2EWK3LG8SaB*AYrdM"
正常返回
1720593690 06:41:30 remote-test green 1 1 1 1 0 0 0 0 - 100.0%
ES启动成功。
配置kibana
使用了一段时间kibana作为ES的命令行和管理工具后,发现有界面的系统是真的香,索引管理,数据展示,dev tools 作常用功能模块已基本上满足日常管理需求,且不论更进一步的数据分析等模块。紧跟ES也跑一个kibana的实例出来。 这里注意kibana要跟ES的版本保持一致。
下载包
匹配ES版本的kibana: https://artifacts.elastic.co/downloads/kibana/kibana-8.12.2-darwin-aarch64.tar.gz
修改配置
下载到本地后,解压,修改配置
vim config/kibana.yml
server.port: 5602
server.ssl.enabled: false #本地使用,禁用https协议
elasticsearch.hosts: ["http://localhost:19200"] #配置ES的地址
elasticsearch.username: "kibana_system" #连接ES的用户名
elasticsearch.password: "As4fpYOfz-ufMr7zI8dt" #连接ES的密码
这里需要到ES中重置kibana_system的密码,kibana_system是ES系统内置的用户。
bin/elasticsearch-reset-password -u kibana_system
过程如下:
➜ elasticsearch-8.12.2 bin/elasticsearch-reset-password -u kibana_system
This tool will reset the password of the [kibana_system] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]yPassword for the [kibana_system] user successfully reset.
New value: As4fpYOfz-ufMr7zI8dt
启动
bin/kibana
附录
知其所以然
内置用户
es提供了一系列的内置用户来运行和管理ES进程,这些用户设置了固定的权限。但是这些用户在没有设置密码前是不能使用的。elastic是内置的超级用户,可以用来设置其他用户的密码。elastic用户自己的密码在ES启动的时候会由进程自动设置,并在启动日志中打印出来。
es的内置用户:
- elastic #超级管理员用户
- kibana_system #kibana用户用于kibana连接elasticsearch
- logstash_system #logstash使用
- Beats_system #beats 程序使用
- apm_system #apm功能
- Remote_monitoring_user #远程监控功能用户
内置用户存储在.security这个特殊的索引中,当用户的密码改变时,会同步这些变更内容到各个节点。一旦这个特殊的索引被删除或者被快照等其他数据所覆盖,之前针对用户所做的所有操作都会丢失。
针对内置用户可以使用bin/elasticsearch-reset-password修改用户密码
bin/elasticsearch-reset-password -u kibana_system
初次启动的集群只有重置密码后才能使用。