引言
本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop
之前我写过在Linux下安装ElasticSearch以及搭建集群:
同时也讲解了在Docker下安装ElasticSearch:
大家在阅读本文之前可以阅读上面的三篇博客,有助于解决遇到的问题。
ElasticSearch在不同环境下的安装基本讲完,剩下的就是在Docker下安装ElasticSearch集群,本文来讲解下。
本文目录结构:
l____ 1. 为什么要安装ElasticSearch集群?
l____ 2. Docker下安装ElasticSearch集群的步骤
l________ 2.2 以挂载的方式docker启动es
1. 为什么要安装ElasticSearch集群?
「淘东电商」项目接下来将要讲解 “商品搜索” 功能,项目使用的是SpringBoot开发的,需要引入spring-boot-starter-data-elasticsearch
依赖,要求ES必须以集群的方式连接,否则会报错,如下:
ERROR:None of the configured nodes are available.
下面开始讲解如何在docker下安装es集群。
2. Docker下安装ElasticSearch集群的步骤
由于机子的性能问题,只能在同一个虚拟机里搭建两个es集群,以端口号区分,分别为9301
和9302
。
2.1 配置文件
先贴上配置文件的模板代码:
cluster.name: elasticsearch-cluster node.name: es-node1 network.bind_host: 0.0.0.0 network.publish_host: 192.168.162.134 http.port: 9201 transport.tcp.port: 9301 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["192.168.162.134:9301","192.168.162.134:9302"] discovery.zen.minimum_master_nodes: 1
字段名字 | 解析 |
cluster.name | 集群名字 |
node.name | 节点名字 |
network.bind_host | 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0 |
network.publish_host | 实际服务器ip地址 |
http.port | 设置对外服务的http端口 |
transport.tcp.port | 设置节点间交互的tcp端口 |
http.cors.enabled | 是否允许跨域 |
node.master | 指定该节点是否有资格被选举成为node |
node.data | 指定该节点是否存储索引数据 |
discovery.zen.ping.unicast.hosts | 多个服务集群ip |
discovery.zen.minimum_master_nodes | 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点 |
2.2 以挂载的方式docker启动es
1.创建es配置文件目录
cd /usr/local mkdir -p es/config cd es mkdir data1 mkdir data2 mkdir plugins1 mkdir plugins2
2.开启防火墙端口
firewall-cmd --add-port=9301/tcp firewall-cmd --add-port=9302/tcp
3.进入config目录,新建es1.yml,填写配置内容:
cd /usr/local/es/config vi es1.yml
配置内容如下:
cluster.name: elasticsearch-cluster node.name: es-node1 network.bind_host: 0.0.0.0 network.publish_host: 192.168.162.134 http.port: 9201 transport.tcp.port: 9301 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["192.168.162.134:9301","192.168.162.134:9302"] discovery.zen.minimum_master_nodes: 1
4.进入config目录,新建es2.yml,填写配置内容:
cd /usr/local/es/config vi es2.yml
配置内容如下:
cluster.name: elasticsearch-cluster node.name: es-node2 network.bind_host: 0.0.0.0 network.publish_host: 192.168.162.134 http.port: 9202 transport.tcp.port: 9302 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["192.168.162.134:9301","192.168.162.134:9302"] discovery.zen.minimum_master_nodes: 1
5.进入插件目录下载中文ik分词器(注意版本要和ES版本一致):
cd /usr/local/es/plugins1 mkdir ik cd /usr/local/es/plugins2 mkdir ik cd /usr/local/es/plugins1/ik wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-analysis-ik-7.6.1.zip unzip elasticsearch-analysis-ik-7.6.1.zip cp elasticsearch-analysis-ik-7.6.1.zip /usr/local/es/plugins2/ik cd /usr/local/es/plugins2/ik unzip elasticsearch-analysis-ik-7.6.1.zip
6.docker以挂载的方式启动第一个ES容器:
docker run \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ -d -p 9201:9201 -p 9301:9301 \ -v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins \ -v /usr/local/es/data1:/usr/share/elasticsearch/data \ --name ES01 elasticsearch:7.6.1
查看日志发现报错了:
docker logs -f ES01
这是由于宿主主机的data文件夹没有读写权限导致的,所以赋予权限:
chmod 777 /usr/local/es/data1 chmod 777 /usr/local/es/data2
移除容器再次启动:
docker rm ES01 docker run \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ -d -p 9201:9201 -p 9301:9301 \ -v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins \ -v /usr/local/es/data1:/usr/share/elasticsearch/data \ --name ES01 elasticsearch:7.6.1
从日志里可以看到启动成功:
7.docker以挂载的方式启动第二个ES容器:
docker run \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ -d -p 9202:9202 -p 9302:9302 \ -v /usr/local/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /usr/local/es/plugins2:/usr/share/elasticsearch/plugins \ -v /usr/local/es/data2:/usr/share/elasticsearch/data \ --name ES02 elasticsearch:7.6.1
3. 测试
浏览器访问:http://192.168.162.134:9201/_cat/nodes?pretty,可以看到集群节点,说明ES集群搭建成功:
如果报如下错误,解决方案参考我的博客《解决es集群启动完成后报master_not_discovered_exception》:
4. 总结
本文主要讲解在Docker下搭建ElasticSearch集群的方式,以及常见的填坑方法。