由于此前一段时间爆出的log4j的日志漏洞问题,现在使用的elasticsearch7.x版本正好有这个漏洞。并且因为elasticsearch8.x已经推出一段时间。所以打算趁这个时间升级一下版本。

因为是用docker的方式启动的,所以本想着只要删除掉原来的容器。再用新的镜像版本重新启动就可以了(已经做了数据持久化)。但是重启后发现容器一直在restarting不正常。查看日志发现之前做的安全认证失效了。进一步查阅相关资料后才知道。原来elasticsearch8.x放弃了以前的安全认证,采用新的证书认证方式来做加密。

之前的docker启动方式为:

docker run -d -it --restart=always --privileged=true -p 9200:9200 -p 9300:9300 --name=elasticsearch -e ES_JAVA_OPTS="-Xms8g -Xmx8g" -v /home/elk/es/data:/usr/share/elasticsearch/data -v /home/elk/es/plugins:/usr/share/elasticsearch/plugins -v /home/elk/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.13.2

鉴于外挂的elasticsearch.yml多次修改后都启动不成功,所以取消了外挂elasticsearch.yml启动后终于正常运行。

docker run -d -it --restart=always --privileged=true -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name=elasticsearch -e ES_JAVA_OPTS="-Xms8g -Xmx8g" -e "http.host=0.0.0.0" -v /home/elk/es1/data:/usr/share/elasticsearch/data -v /home/elk/es1/plugins:/usr/share/elasticsearch/plugins  elasticsearch:8.1.2
  • 然后安装ik分词器:
    因为es自带的分词器对中文分词不是很友好,所以我们下载开源的IK分词器来解决这个问题。首先进入到plugins目录中下载分词器,下载完成后然后解压,再重启es即可。具体步骤如下:
    注意:elasticsearch的版本和ik分词器的版本需要保持一致,不然在重启的时候会失败。可以在这查看所有版本,选择合适自己版本的右键复制链接地址即可。
-> cd /usr/share/elasticsearch/plugins/
-> elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.1.2/elasticsearch-analysis-ik-8.1.2.zip
-> exit
-> docker restart elasticsearch 然后可以在kibana界面的dev tools中验证是否安装成功;
  • 启动后开始设置加密认证:
  1. 重制密码
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
  1. 拷贝证书到宿主机
mkdir -p config/certs
docker cp elasticsearch:/usr/share/elasticsearch/config/certs/http_ca.crt  ./
  1. 验证证书是否成功
curl --cacert /home/elk/es1/config/certs/http_ca.crt -u elastic https://127.0.0.1:9200
  1. 后期单独修改某个用户密码
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

至此elasticsearch7.x升级到elasticsearch8.x完毕。

Q.E.D.