Docker 启动单机版ES

官方安装教程:https://www.elastic.co/guide/en/elasticsearch/reference/8.14/docker.html#_linux

调整vm.max_map_count

CentOS 7.9中,默认的vm.max_map_count值是65536。这个值表示一个进程可以拥有的虚拟内存区域(VMA, Virtual Memory Area)的最大数量。虚拟内存区域是连续的虚拟地址空间区域,在进程的生命周期中,每当程序尝试在内存中映射文件、链接到共享内存段或分配堆空间时,这些区域将被创建。

如何查看和修改vm.max_map_count值

  1. 查看当前值可以使用以下命令来查看当前的vm.max_map_count值:
sysctl -a | grep vm.max_map_count
  1. 临时修改如果需要临时修改vm.max_map_count值(重启后失效),可以使用以下命令:
sysctl -w vm.max_map_count=新值

例如,将vm.max_map_count设置为262144:

sysctl -w vm.max_map_count=262144
  1. 永久修改如果需要永久修改vm.max_map_count值,可以将新值添加到/etc/sysctl.conf文件的末尾,然后执行sysctl -p命令使修改生效。例如:
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

注意事项

  • 调优vm.max_map_count值时需要谨慎,过高的值可能会导致资源浪费,而过低的值则可能限制进程的正常运行。
  • 在进行任何系统级别的修改之前,建议备份相关配置文件和进行充分的测试。
  • 对于Elasticsearch等需要大量内存映射区域的应用,可能需要增加vm.max_map_count的值以避免出现“max virtual memory areas vm.max_map_count too low”的错误。

以上信息基于CentOS 7.x的通用设置,对于CentOS 7.9版本同样适用。然而,具体的默认值可能会因系统更新或特定的系统配置而有所变化,因此建议通过实际查看系统配置来确认当前的vm.max_map_count值。

创建文件夹

创建相关文件夹,用于后续容器挂载

mkdir -p /mnt/data/elasticsearch/{data,config,plugins,logs}

创建配置文件,并写入必须配置

echo "network.host: 0.0.0.0" >> /mnt/data/elasticsearch/config/elasticsearch.yml

授权data和log文件夹

chmod -R g+rwx /mnt/data/elasticsearch/{data,logs}
chgrp -R 0 /mnt/data/elasticsearch/{data,logs}
chown R 1000:1000 /mnt/data/elasticsearch/logs

# 或者直接给777
chmod -R 777 /mnt/data/elasticsearch/

创建网络

为了后边kibana互联方便,创建一个网络:

docker network create es-net

相关指令

# 创建网络
docker network create es-net

# 查看本机的网络
docker network ls

# 删除一个网络
docker network rm es-net

拉取镜像

# 这里使用的8.14.3版本,官方镜像地址
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.14.3

启动容器

docker run --name tuhu_es \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e ELASTIC_PASSWORD=123456 \
-e "xpack.security.http.ssl.enabled=false" \
-e "xpack.license.self_generated.type=basic" \
-v /mnt/data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mnt/data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mnt/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mnt/data/elasticsearch/logs:/usr/share/elasticsearch/logs \
--restart=always \
-d docker.elastic.co/elasticsearch/elasticsearch:8.14.3

–network es-net 这表示容器将连接到名为“es-net”的Docker网络。这允许你与其他也在该网络上的容器进行通信。
-p 9200:9200 -p 9300:9300 这两个端口映射使得宿主机的9200和9300端口分别映射到容器的9200和9300端口。其中,9200是Elasticsearch的HTTP接口,而9300是用于节点间通信的TCP传输端口。
-e “discovery.type=single-node” 设置为单节点
-e ELASTIC_PASSWORD=123456 默认密码,用户名为elastic
-e “xpack.security.http.ssl.enabled=false” 关闭ssl验证
-e “xpack.license.self_generated.type=basic” 基础版本
特别注意:
-e ES_JAVA_OPTS=“-Xms512m -Xmx512m” 测试环境下,设置ES的初始内存和最大内存,否则可能导致过大启动不了ES,但官方最新版建议生产环境不加这个参数,es会根据服务器配置自动调整。

可能出现的问题

权限问题

Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
[0.001s][error][logging] Error opening log file 'logs/gc.log': Permission denied
[0.001s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
error:
Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m', see error log for details.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
        at org.elasticsearch.server.cli.JvmOption.flagsFinal(JvmOption.java:120)
        at org.elasticsearch.server.cli.JvmOption.findFinalOptions(JvmOption.java:87)
        at org.elasticsearch.server.cli.MachineDependentHeap.determineHeapSettings(MachineDependentHeap.java:59)
        at org.elasticsearch.server.cli.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:141)
        at org.elasticsearch.server.cli.JvmOptionsParser.determineJvmOptions(JvmOptionsParser.java:92)
        at org.elasticsearch.server.cli.ServerCli.startServer(ServerCli.java:248)
        at org.elasticsearch.server.cli.ServerCli.execute(ServerCli.java:100)
        at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:54)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
        at org.elasticsearch.cli.Command.main(Command.java:50)
        at org.elasticsearch.launcher.CliToolLauncher.main(CliToolLauncher.java:64)

这里是因为挂载除了目录,但所有者创建者等权限问题导致无法启动,解决方法:

chmod -R 777 /mnt/data/elasticsearch/

直接777 算了,要不然就一点儿点儿根据情况调整权限。

内存不足

Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 33285996544 bytes. Error detail: committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid53.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000001001000000, 33285996544, 0) failed; error='Not enough space' (errno=12)
        at org.elasticsearch.server.cli.JvmOption.flagsFinal(JvmOption.java:120)
        at org.elasticsearch.server.cli.JvmOption.findFinalOptions(JvmOption.java:87)
        at org.elasticsearch.server.cli.JvmErgonomics.choose(JvmErgonomics.java:42)
        at org.elasticsearch.server.cli.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:142)
        at org.elasticsearch.server.cli.JvmOptionsParser.determineJvmOptions(JvmOptionsParser.java:92)
        at org.elasticsearch.server.cli.ServerCli.startServer(ServerCli.java:248)
        at org.elasticsearch.server.cli.ServerCli.execute(ServerCli.java:100)
        at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:54)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
        at org.elasticsearch.cli.Command.main(Command.java:50)
        at org.elasticsearch.launcher.CliToolLauncher.main(CliToolLauncher.java:64)

服务器内存不足导致无法启动jvm,加上如下参数控制内存大小:
-e ES_JAVA_OPTS="-Xms512m -Xmx512m"

测试

启动成功后访问http://ip:9200/,输入用户名密码,显示如下页面
image.png

启动Kibana

设置kibana_system密码

创建一个用于启动kibana的用户:

# configure the Kibana password in the ES container
curl -u elastic:123456 \
  -X POST \
  http://localhost:9200/_security/user/kibana_system/_password \
  -d '{"password":"'"123456"'"}' \
  -H 'Content-Type: application/json'

创建挂载目录

创建挂载目录

mkdir /mnt/data/kibana

mkdir /mnt/data/kibana/{config,data}

授权data文件夹 chmod -R 777 /mnt/data/kibana/data
在config中创建配置文件 vim kibana.yml ,内容如下

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://es:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

# 设置为中文
i18n.locale: "zh-CN"

启动kibana容器

docker run指令,若未拉取过镜像,第一次会先拉取对应镜像

docker run -p 5601:5601 \
-d --name tuhu_kibana \
--network es-net \
-e ELASTICSEARCH_URL=http://es:9200 \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-e ELASTICSEARCH_USERNAME=kibana_system \
-e ELASTICSEARCH_PASSWORD=123456 \
-e "xpack.security.enabled=false"\
-e "xpack.license.self_generated.type=basic" \
-v /mnt/data/kibana/config:/usr/share/kibana/config \
-v /mnt/data/kibana/data:/usr/share/kibana/data \
--restart=always \
docker.elastic.co/kibana/kibana:8.14.3

验证

打开http://ip:5601/ ,打开kibana输入用户名elastic,密码123456
image.png

安装分词插件

指令安装

进入es容器内执行:

bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.14.3

相关指令:

#查看已安装插件
bin/elasticsearch-plugin list
#安装插件
bin/elasticsearch-plugin install analysis-ik
#删除插件
bin/elasticsearch-plugin remove analysis-ik

离线安装

下载分词插件 https://release.infinilabs.com/analysis-ik/stable/
下载对应版本的插件后,得到 elasticsearch-analysis-ik-8.14.3.zip
将解压后的文件放入 /mnt/data/elasticsearch/plugins 目录,即docker挂载的插件目录,如下:
image.png
重启es docker restart es

验证分词器

#ES的默认分词设置是standard,会单字拆分
POST _analyze
{
  "analyzer":"standard",
  "text":"中华人民共和国"
}

#ik_smart:会做最粗粒度的拆分
POST _analyze
{
  "analyzer": "ik_smart",
  "text": "中华人民共和国"
}

#ik_max_word:会将文本做最细粒度的拆分
POST _analyze
{
  "analyzer":"ik_max_word",
  "text":"中华人民共和国"
}

es默认的分词器会单字拆分如下:
image.png

ik_smart:会做最粗粒度的拆分,如下
image.png

ik_max_word:会将文本做最细粒度的拆分,如下
image.png

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigCool叉子

坚持不易,与君共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值