在我发的上一个博客里记录了如何安装7.x版本的elasticsearch,我在跟着教学学习Java Rest Client的时候发现在elastic的官网上Java Rest Client已经被标注为过时了,elastc提供了全新的Elasticsearch Java API Client,作为程序员,应该勇于去尝试新技术,因此我决定继续尝试使用elasticsearch8.x版本。
elasticsearch已经出到8.10.4,官方推荐使用8.10.2,docker镜像有8.10.2但暂时没有8.10.4,IK分词器提供了8.10.4但没有提供8.10.2。
综合考虑之下原则8.10.2(毕竟官方都没提供8.10.4的镜像,我总不会闲到另辟蹊径自己打包8.10.4版本的镜像吧),IK分词器版本问题将使用一个sao操作解决
docker pull elasticsearch:8.10.2
一般来说,我们不希望在elasticsearch容器停止时丢失elasticsearch中的文件,因此我们创建一个数据卷来关联elasticsearch的data文件夹。在elasticsearch的使用中我们可能会安装各种插件,因此创建了另一个数据卷来关联elasticsearch的plugins文件夹
docker volume create es-data
docker volume create es-plugins
一般来说,我们在使用elasticsearch的时候会结合kibana一起使用,为了他们能够正常关联,我们创建一个网络来连接他们
docker net create es-net
因为我是单机启动,所以将discovery.type设置为single-node
es-net为上一步我们创建的网络名
docker run \
-d \
--name es \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
elasticsearch:8.10.2
访问9200端口,这次你不会看到任何东西,因为8.x版本已经默认采用https了。
访问https://[yourIp]:9200,此时会显示这是一个不安全的连接,选择无视风险继续访问,此时浏览器会弹出一个窗口让你输入用户名和密码。
elastic是一个默认账户,而其密码是随机生成的。
首先我们进入elasticsearch容器中执行重置密码的命令
docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
接下来新生成的密码将会打印到控制台。
将用户名和密码输入浏览器中的登录窗口。出现下面这串字符串就成功了。
{
"name": "ab675a286e72",
"cluster_name": "docker-cluster",
"cluster_uuid": "ZdLfD65lQdKStAJi1yWMMQ",
"version": {
"number": "7.17.13",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "2b211dbb8bfdecaf7f5b44d356bdfe54b1050c13",
"build_date": "2023-08-31T17:33:19.958690787Z",
"build_snapshot": false,
"lucene_version": "8.11.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
我之前选择安装7.x版本的原因就是我执行重置密码时会显示集群状态为RED执行失败。我在查看了运行日志后发现是因为磁盘占用达到了预警线90%,只需给磁盘扩容就好了。
这里只分享图形界面的扩容方法,以ubuntu为例。
首先虚拟机关机,在虚拟机设置界面选择磁盘扩容。
开机,安装工具Gparted
apt-get install gparted
然后选择你要扩充的分区。点击左上角的扩容,如果显示无法给只读权限的分区扩容,右键查看该分区挂载在哪个路径下,使用root用户修改权限
我这是挂载在/和/var/snap/firefox/common/host-hunspell两个路径,所以输入以下命令结束。
mount -o remount -rw /
mount -o remount -rw /var/snap/firefox/common/host-hunspell
Kibana 是为 Elasticsearch设计的开源分析和可视化平台
docker pull kibana:8.10.2
ELASTICSEARCH_HOSTS环境变量为elasticsearch服务的地址,其中http://es:9200中的es是我们运行elasticsearch容器时起的别名
es-net为我们在之前创建的网络的名称
docker run \
-d \
--name kibana \
--net es-net \
-p 5601:5601 \
kibana:8.10.2
访问5601端口,会要求你输入elasticsearch的令牌
进入elasticsearch容器获取kibana的令牌
docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
接下来会要求你输入六位数的kibana验证码,进入kibana容器获取验证码
docker exec -it kibana bin/kibana-verification-code
完成以上两步之后你只需要输入elasticsearch的用户名和密码就能正常使用kibana了
IK分词器没有8.10.2版本,我们先下载8.10.4版本,按之前的步骤来。
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.10.4/elasticsearch-analysis-ik-8.10.4.zip
之前我们将es-plugins数据卷挂载到了es容器内的plugins文件夹。
我们先使用魔法从github上下载
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.10.4/elasticsearch-analysis-ik-8.10.4.zip
然后将压缩包解压到数据卷对应的位置,然后重启elasticsearch容器即可。
打开IK分词器所在的位置,打开 plugin-descriptor.properties 文件,将version和elasticsearch.version的值从8.10.4修改为8.10.2,重启容器完成。