上周在CentOS8上面已经安装了Elastic ELK并测试通过了,但是ElasticSearch状态是yellow,因为索引没有保存在副本上。这周想试一下ElasticSearch集群,担心在测试服上启动太多东西影响性能,就决定在我的电脑上来尝试。Docker只能运行在linux系统上,要在Windows上装的话,必须先装Linux虚拟机。我的电脑是Windows 11家庭版,可以装Windows Subsystem for Linux,即WSL。如果你本身就是在Linux环境装,可以跳过第一步。
一、Windows 11上安装Docker Desktop
这里我就不多说了,参考这篇文章:https://www.cnblogs.com/marchxd/p/16398409.html
我装上WSL之后,去微软的应用商店下载安装了ubuntu18(也可以用wsl命令行安装,但是很慢)。点击电脑左下角“窗口”图标,在“搜索程序和文件”框中输入“store”,就会在菜单上面出现“Microsoft store”菜单项,点击即可以进入。
然后在商店顶部输入ubuntu,就可以进看到unbuntu18等不同的版本,进入产品介绍页,点“获取”按钮就可以下载了。下载完成后,点击电脑左下角“窗口”图标,在“搜索程序和文件”框中输入“ubuntu”,就可以看到你安装的Linux子系统了。
装完ubuntu之后,再安装Docker Desktop,第一次启动会很慢,进入后,要改一下配置,下次就启动就很快了:
"registry-mirrors": [
"https://6ua7riiy.mirror.aliyuncs.com",
"https://mirror.ccs.tencentyun.com",
"https://reg-mirror.qiniu.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
在Docker Desktop的设置中,Docker Engine项下,加入阿里镜像加速地址配置,这样用docker pull去dockerhub下载镜像的时候就会很快速了。上面给了一些网上找的地址,需要自己试下能不能用,阿里云加速地址的获取,可以去这里看下:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors (ps: 要先登录)
然后参照上图再配置与Ubuntu集成就可以了。
二、拉取Docker 镜像
开始菜单点运行,输入cmd并回车,进入Windows的控制台:
docker pull elasticsearch:8.2.3
docker pull kibana:8.2.3
用上面的命令就能下载到elasticsearch和kibana的docker 镜像了
三、准备配置文件
因为要运行3个节点,就要准备三个映射目录,将elasticsearch数据保存在容器之外,方便备份,就算容器被删除了数据也不会丢失。
我在D盘建了三个目录D:/ProgramData/es1,D:/ProgramData/es2,D:/ProgramData/es3,然后又在这三个目录下分别建立了es1.yml,es2.yml,es3.yml三个文件,以及三个data子目录。当然如果你在Linux环境,你想建在/opt/es1,/opt/es2,/opt/es3目录下也可以。
然后修改es1.yml文件内容为:
cluster.name: hkyc
node.name: tu1
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.initial_master_nodes: ["tu1","tu2","tu3"]
discovery.seed_hosts: ["192.168.50.26:9301", "192.168.50.26:9302", "192.168.50.26:9300"]
ingest.geoip.downloader.enabled: false
xpack.security.enabled: false
node.name为节点名称,每个节点要不同,我后面两个配置的是tu2,tu3;
四、 启动docker容器
开始菜单点运行,输入cmd并回车,进入Windows的控制台,执行下面的命令启动三个容器:
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ=Asia/Shanghai --privileged -d -p 9200:9200 -p 9300:9300 -v D:/ProgramData/es1/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v D:/ProgramData/es1/data:/usr/share/elasticsearch/data --name es1 elasticsearch:8.2.3
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ=Asia/Shanghai --privileged -d -p 9201:9200 -p 9301:9300 -v D:/ProgramData/es2/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v D:/ProgramData/es2/data:/usr/share/elasticsearch/data --name es2 elasticsearch:8.2.3
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ=Asia/Shanghai --privileged -d -p 9202:9200 -p 9302:9300 -v D:/ProgramData/es3/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v D:/ProgramData/es3/data:/usr/share/elasticsearch/data --name es3 elasticsearch:8.2.3
如果是linux系统中直接使用docker,要在防火墙中打开相应的端口号。
安装中文分词插件
以第一个容器为例,先执行命令进入容器内,然后执行之前文章中(https://www.jianshu.com/p/2ab284351eda)
有介绍的安装命令即可:
docker exec -it es1 /bin/sh
cd bin
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.2.3/elasticsearch-analysis-ik-8.2.3.zip
每个容器都执行完成后,可以在Docker Desktop界面中直接点按钮重启容器。
五、运行kibana
在windows目录下建立一个kibana.yml文件,内容如下:
server.host: 0.0.0.0
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://192.168.50.26:9200" ]
i18n.locale: "zh-CN"
开始菜单点运行,输入cmd并回车,进入Windows的控制台,然后执行在下面的命令启动kibana容器:
docker run -e TZ=Asia/Shanghai -e xpack.security.enabled=false -d -p 5601:5601 -v D:/ProgramData/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml --name kibana kibana:8.2.3
在浏览器中输入kibana的端口,在开发工具中执行GET /_cluster/stats请求,就可以看到有3个节点,状态是绿色的。如下图:
六、发现问题
6.1 Elasticsearch时区环境变量不生效
用docker logs -f es1命令查看elasticsearch的日志时,发现时间还是少了8个小时;同样是用-e TZ=Asia/Shanghai 参数,但kibana的日志时间是正常的。觉得可能是官方发布的镜像有问题,测试8.2.3,8.4.1都有问题,想尽各种办法,都解决不了,准备放弃了。今天(2022年9月15日)试了下elasticsearch7.17.4版本是可以,看来还是不能用最新的版本,而且spring boot 最高也是支持7.17.4版本。
再后来又发现在docker
或podman
容器内运行elasticsearch
的话,默认外网总是能访问到ElasticSearch
的映射端口,firewalld
防火墙配置也不起作用。我想到的运行容器时不映射端口,且用固定IP来运行集群,详细参考我的另一篇文章:https://www.jianshu.com/p/23e5e99da716