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

注意:

  1. 文件夹 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。具体操作如下:

  1. 修改 elasticsearch.yml​ 文件,添加以下配置:

    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    
  2. 启动 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 数据,其中包含新密码。
  3. 你将会看到生成的密码,并且该密码将会保存到 Elasticsearch 的 elasticsearch.keystore​ 文件中。

  4. 使用刚刚生成的密码来登录 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
        },
        省略其他信息......
    }
    

参考文档

  1. Elasticsearch 7.x 设置密码访问
  2. Elasticsearch7.7 设置账号密码时的逻辑矛盾问题
  3. ElasticSearch7.14 设置内置用户,使用用户名密码访问

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

最终效果

9f7c44bf8ffe492a8f9fb5b861be9993.png

文章标签: Java
推荐指数:

真诚点赞 诚不我欺~

ElasticSearch 7.14.0 单机部署

点赞 收藏 评论

关于作者

猎隼丶止戈
猎隼丶止戈

这个人很懒~

等级 LV3

粉丝 13

获赞 28

经验 363