ElasticSearch 7.14.0 单机部署
猎隼丶止戈 | 626 |
2023-05-10
前言
简单的单机 ElasticSearch(全文搜索引擎) 部署 及 ElasticView(可视化管理)部署方式。
快速部署
目录结构
目录结构如下:
[root@lo0-100 elk_7_14_0]# tree
elk_7_14_0
├── docker-compose.yml(查看下方 compose 脚本)
├── es
│ ├── config
│ │ └── elasticsearch.yml(查看下方配置)
│ ├── data(数据文件)
│ │ └── nodes
│ │ └── 0
│ │ ├── indices
│ │ ├── node.lock
│ │ ├── snapshot_cache
│ │ │ ├── segments_5
│ │ │ └── write.lock
│ │ └── _state
│ └── plugins
└── esView
├── config
│ └── config.yml(查看下方配置)
├── data
│ ├── es_view.db
│ └── lock
└── logs
注意:
-
文件夹
elk_7_14_0/es/data
需要赋予权限,否则容器运行时会报权限不足chmod 777 <$HOME>/elk_7_14_0/es/data
ElasticSearch
配置文件
elasticsearch.yml 配置文件:
# 集群名称
cluster.name: es-cluster
# 节点名称,可用于识别和区分不同节点
node.name: master
# 是否为主节点
node.master: true
# 是否为数据节点
node.data: true
# 绑定的主机地址,0.0.0.0 表示所有的网络接口都可用
network.host: 0.0.0.0
# 发布的主机地址,用于节点之间的通信,如果不设置,默认与 network.host 相同
# 如果您的机器有多个 IP,需要将它设置为对应的 IP,否则可能会出现通信问题
network.publish_host: 192.168.0.88
# HTTP 协议监听端口
http.port: 9200
# TCP 协议监听端口
transport.tcp.port: 9300
# 是否启用 CORS 跨域访问
http.cors.enabled: true
# 允许的跨域来源,* 表示任意来源
http.cors.allow-origin: "*"
# 设置节点的初始主节点列表
discovery.seed_hosts: ["192.168.0.88:9300"]
# 集群初始化时需要选举的主节点,与 discovery.seed_hosts 配合使用
cluster.initial_master_nodes: ["master"]
# 启用 X-Pack 的用户管理
# 详细查看下方的 开启用户认证
xpack.security.enabled: true
# 启用了 X-Pack 安全功能的同时必须启用 SSL 加密传输
xpack.security.transport.ssl.enabled: true
# 将Elasticsearch进程的内存锁定到物理内存中,以避免在高负载下发生交换而导致性能下降。
bootstrap.memory_lock: true
开启用户认证
在 Elasticsearch 7.14.0 中,X-Pack 的用户管理方式有所变化,现在需要使用内置用户管理,而不是之前的 native realm。具体操作如下:
-
修改
elasticsearch.yml
文件,添加以下配置:xpack.security.enabled: true xpack.security.transport.ssl.enabled: true
-
启动 Elasticsearch,并使用以下命令创建
elastic
用户:# 管理密码命令 bin/elasticsearch-setup-passwords # 手动生成(麻烦) bin/elasticsearch-setup-passwords interactive # 自动生成(推荐) bin/elasticsearch-setup-passwords auto
返回如下:
[root@4553d80109e8 elasticsearch]# bin/elasticsearch-setup-passwords auto Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user. The passwords will be randomly generated and printed to the console. Please confirm that you would like to continue [y/N]y Changed password for user apm_system PASSWORD apm_system = kfmAJU0i69VK7qxl7hCE Changed password for user kibana_system PASSWORD kibana_system = N5dzKk7BLgiA8n52FKst Changed password for user kibana PASSWORD kibana = N5dzKk7BLgiA8n52FKst Changed password for user logstash_system PASSWORD logstash_system = eujPaXTC21jcD7oPD7Mr Changed password for user beats_system PASSWORD beats_system = 3TNa6wP5IBz47bcrOthq Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = i3LBjDUoCRu9xqBiUoRq Changed password for user elastic PASSWORD elastic = nQ0KteYnOembC09BRJRF
可以调用以下命令修改密码:
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{"password":"xxxx"}'
这是使用 curl 命令通过 HTTP 请求来修改 Elasticsearch 中的 elastic 用户密码的操作。
- -H "Content-Type:application/json":指定 HTTP 请求头中的 Content-Type 为 application/json,表示请求体中传递的是 JSON 格式的数据。
- -XPOST:指定 HTTP 请求方法为 POST。
- -u elastic:指定使用 elastic 用户名进行身份验证。
- http://127.0.0.1:9200/_xpack/security/user/elastic/_password:指定请求的 URL,该 URL 用于修改 elastic 用户的密码。
- -d '{"password":"xxxx"}':指定请求体中的 JSON 数据,其中包含新密码。
-
你将会看到生成的密码,并且该密码将会保存到 Elasticsearch 的
elasticsearch.keystore
文件中。 -
使用刚刚生成的密码来登录 Elasticsearch
# 举个例子(请求获取所有的Elasticsearch用户和角色信息,包括他们的权限和密码哈希值,并以美观格式输出。) curl -XGET -u elastic 'http://127.0.0.1:9200/_xpack/security/user?pretty' # 返回如下: { "elastic": { "username": "elastic", "roles": [ "superuser" ], "full_name": null, "email": null, "metadata": { "_reserved": true }, "enabled": true }, 省略其他信息...... }
参考文档
ElasticView
ElasticView 是一款用来监控 ElasticSearch 状态和操作 ElasticSearch 索引的 web 可视化工具。它由 golang 开发而成,具有部署方便,占用内存小等优点
config.yml 配置文件如下:
log:
# 日志保留天数
storageDays: 4
# 日志保留文件夹
logDir: "logs"
# 启动端口
port: 8090
# 数据保留类型 分为 sqlite3 和 mysql
dbType: "sqlite3"
# dbType为sqlite3时填 dbPath为数据保存文件地址
sqlite:
dbPath: "es_view.db"
# dbType为mysql时填
mysql:
username: "root"
pwd: "123456"
ip: "192.168.0.44"
port: "3306"
dbName: "es_view"
maxOpenConns: 10
maxIdleConns: 10
# jwt 加密密钥
appSecret: "1340691923@qq.com"
# es密码加密密钥 加密方式为 AES
esPwdSecret: "concat_mail!!->1340691923@qq.com"
# ES 版本号
version: "7.14.0"
# 是否为测试模式 如果为 false则打开默认浏览器直接访问地址
deBug: false
默认账号密码为 admin / admin
docker compose
docker-compose.yml 部署脚本如下:
version: '3.0'
services:
es_7_14_0:
image: elasticsearch:7.14.0
container_name: es_7_14_0
environment:
# 设置集群的发现方式。可选值有 single-node、zen、gce、ec2、azure-classic、azure、s3、kubernetes 等,具体可以参考官方文档。默认为 zen。
#- discovery.type=single-node
# 配置时区为中国时区
# 更多时区配置请参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/date-math-index-names.html#date-math-index-names
- TZ=Asia/Shanghai
# 集群内存限制,JVM初始内存大小为1GB,最大内存大小也为1GB
# 可根据实际情况进行调整
# 更多 JVM 相关配置请参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
volumes:
# 数据目录
- ./es/data:/usr/share/elasticsearch/data
# 配置文件
- ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# 插件目录
- ./es/plugins:/usr/share/elasticsearch/plugins
ports:
- 9200:9200
- 9300:9300
# 部分将内存锁定的软限制和硬限制都设置为了 -1,即无限制;
ulimits:
memlock:
soft: -1
hard: -1
# 允许容器内的进程使用 mlockall 系统调用
cap_add:
- IPC_LOCK
# 部分将容器内存限制设置为 2GB。
mem_limit: 2g
restart: unless-stopped
networks:
- net_es
esView:
image: kecikeci/elastic_view:latest
container_name: es_view
environment:
- TZ=Asia/Shanghai
volumes:
- ./esView/data:/data
- ./esView/config:/config
- ./esView/logs:/logs
ports:
- 8090:8090
restart: unless-stopped
networks:
- net_es
depends_on:
- es_7_14_0
networks:
net_es:
driver: bridge
最终效果
推荐指数:
真诚点赞 诚不我欺~