上周在CentOS8上面已經(jīng)安裝了Elastic ELK并測(cè)試通過(guò)了,但是ElasticSearch狀態(tài)是yellow,因?yàn)樗饕龥](méi)有保存在副本上。這周想試一下ElasticSearch集群,擔(dān)心在測(cè)試服上啟動(dòng)太多東西影響性能,就決定在我的電腦上來(lái)嘗試。Docker只能運(yùn)行在linux系統(tǒng)上,要在Windows上裝的話,必須先裝Linux虛擬機(jī)。我的電腦是Windows 11家庭版,可以裝Windows Subsystem for Linux,即WSL。如果你本身就是在Linux環(huán)境裝,可以跳過(guò)第一步。
一、Windows 11上安裝Docker Desktop
這里我就不多說(shuō)了,參考這篇文章:https://www.cnblogs.com/marchxd/p/16398409.html
我裝上WSL之后,去微軟的應(yīng)用商店下載安裝了ubuntu18(也可以用wsl命令行安裝,但是很慢)。點(diǎn)擊電腦左下角“窗口”圖標(biāo),在“搜索程序和文件”框中輸入“store”,就會(huì)在菜單上面出現(xiàn)“Microsoft store”菜單項(xiàng),點(diǎn)擊即可以進(jìn)入。

然后在商店頂部輸入ubuntu,就可以進(jìn)看到unbuntu18等不同的版本,進(jìn)入產(chǎn)品介紹頁(yè),點(diǎn)“獲取”按鈕就可以下載了。下載完成后,點(diǎn)擊電腦左下角“窗口”圖標(biāo),在“搜索程序和文件”框中輸入“ubuntu”,就可以看到你安裝的Linux子系統(tǒng)了。
裝完ubuntu之后,再安裝Docker Desktop,第一次啟動(dòng)會(huì)很慢,進(jìn)入后,要改一下配置,下次就啟動(dòng)就很快了:

"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的設(shè)置中,Docker Engine項(xiàng)下,加入阿里鏡像加速地址配置,這樣用docker pull去dockerhub下載鏡像的時(shí)候就會(huì)很快速了。上面給了一些網(wǎng)上找的地址,需要自己試下能不能用,阿里云加速地址的獲取,可以去這里看下:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors (ps: 要先登錄)

然后參照上圖再配置與Ubuntu集成就可以了。
二、拉取Docker 鏡像
開(kāi)始菜單點(diǎn)運(yùn)行,輸入cmd并回車,進(jìn)入Windows的控制臺(tái):
docker pull elasticsearch:8.2.3
docker pull kibana:8.2.3
用上面的命令就能下載到elasticsearch和kibana的docker 鏡像了
三、準(zhǔn)備配置文件
因?yàn)橐\(yùn)行3個(gè)節(jié)點(diǎn),就要準(zhǔn)備三個(gè)映射目錄,將elasticsearch數(shù)據(jù)保存在容器之外,方便備份,就算容器被刪除了數(shù)據(jù)也不會(huì)丟失。
我在D盤(pán)建了三個(gè)目錄D:/ProgramData/es1,D:/ProgramData/es2,D:/ProgramData/es3,然后又在這三個(gè)目錄下分別建立了es1.yml,es2.yml,es3.yml三個(gè)文件,以及三個(gè)data子目錄。當(dāng)然如果你在Linux環(huán)境,你想建在/opt/es1,/opt/es2,/opt/es3目錄下也可以。
然后修改es1.yml文件內(nèi)容為:
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為節(jié)點(diǎn)名稱,每個(gè)節(jié)點(diǎn)要不同,我后面兩個(gè)配置的是tu2,tu3;
四、 啟動(dòng)docker容器
開(kāi)始菜單點(diǎn)運(yùn)行,輸入cmd并回車,進(jìn)入Windows的控制臺(tái),執(zhí)行下面的命令啟動(dòng)三個(gè)容器:
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系統(tǒng)中直接使用docker,要在防火墻中打開(kāi)相應(yīng)的端口號(hào)。
安裝中文分詞插件
以第一個(gè)容器為例,先執(zhí)行命令進(jìn)入容器內(nèi),然后執(zhí)行之前文章中(http://www.itdecent.cn/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
每個(gè)容器都執(zhí)行完成后,可以在Docker Desktop界面中直接點(diǎn)按鈕重啟容器。

五、運(yùn)行kibana
在windows目錄下建立一個(gè)kibana.yml文件,內(nèi)容如下:
server.host: 0.0.0.0
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://192.168.50.26:9200" ]
i18n.locale: "zh-CN"
開(kāi)始菜單點(diǎn)運(yùn)行,輸入cmd并回車,進(jìn)入Windows的控制臺(tái),然后執(zhí)行在下面的命令啟動(dòng)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的端口,在開(kāi)發(fā)工具中執(zhí)行GET /_cluster/stats請(qǐng)求,就可以看到有3個(gè)節(jié)點(diǎn),狀態(tài)是綠色的。如下圖:

六、發(fā)現(xiàn)問(wèn)題
6.1 Elasticsearch時(shí)區(qū)環(huán)境變量不生效
用docker logs -f es1命令查看elasticsearch的日志時(shí),發(fā)現(xiàn)時(shí)間還是少了8個(gè)小時(shí);同樣是用-e TZ=Asia/Shanghai 參數(shù),但kibana的日志時(shí)間是正常的。覺(jué)得可能是官方發(fā)布的鏡像有問(wèn)題,測(cè)試8.2.3,8.4.1都有問(wèn)題,想盡各種辦法,都解決不了,準(zhǔn)備放棄了。今天(2022年9月15日)試了下elasticsearch7.17.4版本是可以,看來(lái)還是不能用最新的版本,而且spring boot 最高也是支持7.17.4版本。
再后來(lái)又發(fā)現(xiàn)在docker或podman容器內(nèi)運(yùn)行elasticsearch的話,默認(rèn)外網(wǎng)總是能訪問(wèn)到ElasticSearch的映射端口,firewalld防火墻配置也不起作用。我想到的運(yùn)行容器時(shí)不映射端口,且用固定IP來(lái)運(yùn)行集群,詳細(xì)參考我的另一篇文章:http://www.itdecent.cn/p/23e5e99da716