- 基础环境(作者自测环境和版本,具体环境可根据实际情况调整)
- 操作系统
centos7.6
- Docker
docker 20.10.21
- ES Docker镜像
docker.elastic.co/elasticsearch/elasticsearch 8.10.1
- kibana Docker镜像(ES的图像化界面)
docker.elastic.co/kibana/kibana 8.10.1
- Docker Compose可以同时管理多个Docker容器,便于快速的部署分布式应用
Docker Compose v2.26.0
- Elasticvue是MicrosoftEdge提供的插件,用于Elasticsearch的免费开源gui
https://microsoftedge.microsoft.com/addons/detail/elasticvue/geifniocjfnfilcbeloeidajlfmhd
https://github.com/infinilabs/analysis-ik
- 操作系统配置
- 内核设置必须设置为vm.max_map_count262144
1)用编辑工具打开文件/etc/sysctl.conf
2)在尾部添加一行配置vm.max_map_count = 262144,如果已存在就修改,数值不能低于262144
3)修改保存,然后执行命令sudo sysctl -p使其立即生效单节点安装
- 单节点安装
- 配置挂载数据文件夹
mkdir -p /home/es/es11/data
mkdir -p /home/es/es11/logs
mkdir -p /home/es/es11/plugins
chmod -R 777 /home/es/es11
- 创建新的docker网络
docker network create single_elastic –subnet 172.121.0.0/16 –gateway 172.121.0.1
- 启动Elasticsearch
docker run \
–name es11 \
-p 9210:9200 \
-e ES_JAVA_OPTS=”-Xms1024m -Xmx1024m” \
–net single_elastic \
-v /home/es/es11/data:/usr/share/elasticsearch/data \
-v /home/es/es11/plugins:/usr/share/elasticsearch/plugins \
-v /home/es/es11/logs:/usr/share/elasticsearch/logs \
-d docker.elastic.co/elasticsearch/elasticsearch:8.10.1
- 复制生成的密码和注册令牌。这些凭据仅在首次启动Elasticsearch时显示。可以使用以下命令重新生成凭据
docker exec -it es11 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
【随机密码:-u elastic 指定密码:-u elastic -i】
docker exec -it es11 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
- 访问 https://IP:9210 看到返回的 json 数据说明启动成功
- 默认生成的配置文件
/usr/share/elasticsearch/config/elasticsearch.yml
- 添加更多节点
- 使用现有节点为新节点生成注册令牌
docker exec -it es11 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
- 启动一个新的 Elasticsearch 容器。将注册令牌作为环境变量包括在内
docker run -e ENROLLMENT_TOKEN=”<token>” –name es12 *******【参考第三步】
【用这种方式添加的节点,重启容器会报错,因为重启后还是包含ENROLLMENT_TOKEN的环境变量,需要清一下】
- 找到容器目录
docker inspect es12 | grep ResolvConfPath
- 停止docker服务
systemctl stop docker
- 找到 resolv.conf 同级目录下的 config.v2.json 并移除其文件中的”ENROLLMENT_TOKEN” key
- 启动docker服务
systemctl start docker
- 重启相关容器
【可以把配置文件拷贝到宿主机,再绑定宿主机和容器的配置文件(宿主机文件挂载到容器),再修改config.v2.json的MountPoints和hostconfig.json的Binds,添加挂载点,方便编辑修改配置文件】
docker挂载相关内容可参考:关于 Docker volume 挂载时文件或文件夹不存在的问题 – 博雅空间-520的个人博客 (zby520.com)
【应该可以先启动容器,再手动把该节点添加到集群,未测试】
【还有一个问题,当有新节点加入集群,要修改一下所有节点的配置文件】
- 第一个节点注释掉cluster.initial_master_nodes: [“********”]
- 所有节点修改discovery.seed_hosts,写入当前所有节点的ip和通信端口写入,示例:
discovery.seed_hosts: [“172.121.0.2:9300”, “172.121.0.3:9300”, “172.121.0.4:9300”]
- 调用 cat node API 以验证节点是否已添加到集群中
curl -k -u elastic:password https://ip:9210/_cat/nodes
- 集群安装(使用Docker Compose)
【需要手动配置es的配置文件(配置文件放到对应的挂载数据文件夹里),配来配去的好麻烦,不同版本的es配置还不兼容,目前实现了一个没有安全认证(http的,也没密码)的,先不管了】
- docker-compose命令
- 启动 docker-compose up -d
- 停止 docker-compose stop
- 删除 docker-compose down -v
- docker-compose配置文件docker-compose.yml,其中一些变量可以在配置文件的同级目录下生成.env文件指定
- docker-compose.yml
version: ‘3’
services:
es01:
image: ${image}
container_name: es01
environment:
– “ES_JAVA_OPTS=-Xms512m -Xmx512m”
ulimits:
memlock:
soft: -1
hard: -1
volumes:
– /home/es/es01/data:/usr/share/elasticsearch/data
– /home/es/es01/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
– /home/es/es01/plugins:/usr/share/elasticsearch/plugins
– /home/es/es01/log:/usr/share/elasticsearch/log
ports:
– 9200:9200
– 9300:9300
networks:
– elastic
es02:
image: ${image}
container_name: es02
environment:
– “ES_JAVA_OPTS=-Xms512m -Xmx512m”
ulimits:
memlock:
soft: -1
hard: -1
volumes:
– /home/es/es02/data:/usr/share/elasticsearch/data
– /home/es/es02/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
– /home/es/es02/plugins:/usr/share/elasticsearch/plugins
– /home/es/es02/log:/usr/share/elasticsearch/log
ports:
– 9201:9201
– 9301:9301
networks:
– elastic
es03:
image: ${image}
container_name: es03
environment:
– “ES_JAVA_OPTS=-Xms512m -Xmx512m”
ulimits:
memlock:
soft: -1
hard: -1
volumes:
– /home/es/es03/data:/usr/share/elasticsearch/data
– /home/es/es03/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
– /home/es/es03/plugins:/usr/share/elasticsearch/plugins
– /home/es/es03/log:/usr/share/elasticsearch/log
ports:
– 9202:9202
– 9302:9302
networks:
– elastic
kibana:
image: ${image_kibana}
container_name: kibana
depends_on:
– es01
volumes:
– /home/es/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
networks:
– elastic
ports:
– 5601:5601
networks:
elastic:
external: true
- .env
image=docker.elastic.co/elasticsearch/elasticsearch:8.10.1
image_kibana=docker.elastic.co/kibana/kibana:8.10.1
- elasticsearch.yml
#集群名称
cluster.name: es_cluster
#当前该节点的名称
node.name: es01
#是不是有资格竞选主节点
#node.master: true
#是否存储数据
#node.data: true
node.roles: [data, master]
#最大集群节点数
#node.max_local_storage_nodes: 3
#给当前节点自定义属性(可以省略)
#node.attr.rack: r1
#数据存档位置
path.data: /usr/share/elasticsearch/data
#日志存放位置
path.logs: /usr/share/elasticsearch/log
#是否开启时锁定内存(默认为是)
#bootstrap.memory_lock: true
#设置网关地址,我是被这个坑死了,这个地址我原先填写了自己的实际物理IP地址,
#然后启动一直报无效的IP地址,无法注入9300端口,这里只需要填写0.0.0.0
network.host: 0.0.0.0
#设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址,设置当前物理机地址,
#如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 10.10.16.20
#设置映射端口
http.port: 9200
#内部节点之间沟通端口
#transport.tcp.port: 9300
transport.port: 9300
#集群发现默认值为127.0.0.1:9300,如果要在其他主机上形成包含节点的群集,如果搭建集群则需要填写
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,也就是说把所有的节点都写上
discovery.seed_hosts: [“10.10.16.20:9300″,”10.10.16.20:9301″,”10.10.16.20:9302”]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: [“es01″,”es02″,”es03”]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
#gateway.recover_after_nodes: 2
gateway.recover_after_data_nodes: 2
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
#下面这个默认为true,就要配置一些安全认证的东西(没细研究),关掉它就可以正常起容器了,密码都不需要。
xpack.security.enabled: false
- 安装IK分词器
- 进入每一个es节点plugins对应的挂载目录下
- 拷贝elasticsearch-analysis-ik-8.11.0.zip,并解压
unzip elasticsearch-analysis-ik-8.11.0.zip -d ik
- 删除elasticsearch-analysis-ik-8.11.0.zip
- 修改访问权限
chmod -R 777 ik
- 修改ik/plugin-descriptor.properties,把里面的8.11.0改成8.10.1,有两处
- 重启容器
- 安装kibana
- 启动kibana
docker run -d –name kib11 –net single_elastic -p 5611:5601 docker.elastic.co/kibana/kibana:8.10.1
- web登录http://ip:5611
- 输入上面elasticsearch生成的注册令牌(有效期30分钟)
- 输入验证码,验证码从kibana的日志中获取,或通过命令重新生成
docker exec -it kib11 /usr/share/kibana/bin/kibana-verification-code
- 如果页面卡在completing setup那,一直转圈圈,直接刷新页面就行,可以进入登陆界面,目测没啥影响
- 默认生成的配置文件
- 配置中文
在配置文件添加i18n.locale: “zh-CN”