1. 配置系统内核参数
以下命令是针对虚拟内存区域的最大数量的配置,用于 Elasticsearch、MongoDB 等需要大量内存映射的程序,不修改的话 Elasticsearch 可能无法启动。
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -w vm.max_map_count=262144
2. 创建相关目录和文件
2.1 创建目录
- plugins:存放 ES 的插件
- data:存放 ES 的数据
- config 存放 ES 的配置目录
mkdir -p <ES 主目录>/es/{plugins,data,config}
mkdir -p <ES 主目录>/kibana/config/
2.2 创建配置文件
在 <ES 配置目录> 下创建 elasticsearch.yml 文件,并编写:
# 配置 host 为 0.0.0.0 允许远程访问
http.host: 0.0.0.0
# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
# http.cors.allow-headers: Authorization
# 密码访问
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
xpack.security.enabled 为 false 不建议生产环境使用!!!!
开启安全功能请参考:blog.csdn.net/UbuntuTouch…
3. Docker Compose 部署
3.1 配置 Docker Compose 文件
docker.elastic.co 代替默认的 docker.io,以防出现无法 pull 的情况。同理 docker.m.daocloud.io 是为了防止 Kibana 无法 pull 情况。
services:
es:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
container_name: es
restart: always
networks:
- es-net
ports:
- 9200:9200
- 9300:9300
volumes:
- ./es/data:/usr/share/elasticsearch/data
- ./es/plugins:/usr/share/elasticsearch/plugins
- ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- ELASTIC_PASSWORD=<ES 管理密码>
- TZ=Asia/Shanghai
mem_limit: 1g
kibana:
image: docker.m.daocloud.io/kibana:8.12.2
container_name: kibana
restart: always
networks:
- es-net
ports:
- 5601:5601
environment:
- ELASTICSEARCH_HOSTS=http://es:9200
volumes:
es-data:
es-plugins:
networks:
es-net:
3.3 部署容器
docker compose up -d
3.4 检查容器状态
docker compose ps
# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
es docker.elastic.co/elasticsearch/elasticsearch:8.12.2 "/bin/tini -- /usr/l…" es 45 hours ago Up 45 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp
kibana kibana:8.6.0 "/bin/tini -- /usr/l…" kibana 45 hours ago Up 45 hours 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp
4. 配置防火墙
Centos
# 放行 9200 端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
# 放行 ES 集群间通信 9300 端口
firewall-cmd --zone=public --add-port=9300/tcp --permanent
# 放行 Kibana 5601 端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
# 重载防火墙
firewall-cmd --reload
# 查看放行的公共端口列表
firewall-cmd --zone=public --list-ports
Ubuntu
ufw allow 9200/tcp
sudo ufw allow 9300/tcp
sudo ufw allow 5601/tcp
sudo ufw reload
sudo ufw status
5. 测试访问
5.1 测试 ES 访问
curl http://localhost:9200
# curl -v http://localhost:9200
* About to connect() to localhost port 9200 (#0)
* Trying ::1...
* Connected to localhost (::1) port 9200 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:9200
> Accept: */*
>
< HTTP/1.1 200 OK
< X-elastic-product: Elasticsearch
< content-type: application/json
< content-length: 539
<
{
"name" : "53ab12ecdbf5",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "licGU_6HRR2Qnc6ACBD6Jw",
"version" : {
"number" : "8.12.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "48a287ab9497e852de30327444b0809e55d46466",
"build_date" : "2024-02-19T10:04:32.774273190Z",
"build_snapshot" : false,
"lucene_version" : "9.9.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
* Connection #0 to host localhost left intact
5.2 测试 Kibana 访问
浏览器访问 http://<ip>:5601
有可能出现 This Elastic installation has strict security ...
如果出现了,那么请创建并映射 Kibana 容器路径 /usr/share/kibana/config/kibana.yml
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
csp.strict: false
6. 配置插件
6.1 分词器插件
6.1.1 安装分词器插件
使用 ES 在线安装大概率无法下载,所以这里就不推荐在线安装了。
分词器链接 github.com/infinilabs/…
这里选的是 8.12.2 版本:
下载完成后上传到 <ES 主目录> 然后解压到 es/plugins/ik 目录:
mkdir -p plugins/ik
unzip elasticsearch-analysis-ik-8.12.2.zip plugins/ik
6.2 中文拼音插件
6.2.1 安装中文拼音插件
步骤同上
6.2 重启容器:
docker restart es
6.3 测试分词器
打开 Kibana 并找到开发工具:
GET _analyze
{
"analyzer": "ik_smart",
"text":["我喜欢喝雪碧"]
}