首先需要先了解一下docker 和基础命名,要不然在看我的代码的时候会有很多疑问
步骤1:拉取ElasticSearch7.6.1版本
docker pull elasticsearch:7.6.1
步骤2:创建三个文件存储 ElasticSearch 配置文件,因为当前使用的时docker技术,所以不需要购买多个服务器,只需要在docker上运行run 多个对应的服务就可以
#创建文件夹
mkdir -p /ES/config
#进入config
cd /ES/config/
#分别创建三个文件
vim es1.yml
vim es2.yml
vim es3.yml
配置文件参数讲解
#集群唯一名称,所以节点一致 cluster.name:elasticsearch-cluster #节点名称 node.name:es-nodel #设置可以访问的ip,默认为0.0.0.0 这里全部设置通过 network.host:0.0.0.0 #设置服务ip network.publish_host: 47.105.92.119 #设置对外服务的http端口,默认9200 http.port:9200 #设置节点之间交互的tcp端口,默认9300 transport.tcp.port:9300 #是否支持跨越 http.cors.enabled:true #表示支持所有域名 http.cors.allow-origin:"*" #配置该节点是否有资格被选举为主节点(候选主节点),为了防止脑裂,配置奇数个候选主节点 node.master:true #配置该节点是数据节点,用户保存数据 node.data:true #集群多个节点IP地址 discovery.zen.ping.unicast.hosts:['127.0.0.1:9200','127.0.0.1:9201','127.0.0.1:9202'] #自动发现master节点的最小数 discovery.zen.minimum_master_nodes:1
在三个配置文件都加上对应的配置
es1.yml
cluster.name: elasticsearch-cluster node.name: es-nodel1 network.host: 0.0.0.0 network.publish_host: 47.105.92.119 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ['127.0.0.1:9200','127.0.0.1:9201','127.0.0.1:9202'] discovery.zen.minimum_master_nodes: 1
es2.yml
cluster.name: elasticsearch-cluster node.name: es-nodel2 network.host: 0.0.0.0 network.publish_host: 47.105.92.119 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: ['127.0.0.1:9200','127.0.0.1:9201','127.0.0.1:9202'] discovery.zen.minimum_master_nodes: 1
es3.yml
cluster.name: elasticsearch-cluster node.name: es-nodel3 network.host: 0.0.0.0 network.publish_host: 47.105.92.119 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: ['127.0.0.1:9200','127.0.0.1:9201','127.0.0.1:9202'] discovery.zen.minimum_master_nodes: 1
步骤3:分别创建三个容器
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -- name ES01 f29a1ee41030
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -- name ES02 f29a1ee41030
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -- name ES03 f29a1ee41030
如果遇到了启动不了容器,或者其他问题,不慌,先用docker logs -f 容器id 查看一下问题所在
上面的问题是再说 内存太低 需要增加
解决办法 在/etc/sysctl.conf文件最后添加一行
vim /etc/sysctl.conf #最后一行添加 vm.max_map_count = 655360 #保存并推出后 并执行命令 sysctl -p #然后,删除当前容器重新启动elasticsearch,即可启动成功
删除三个容器 重新run 启动,在浏览器查看是否可以访问 9200 9201 9202 都分别可以访问,再次说明访问成功
还可以在浏览器 访问 127.0.0.1:9200/_cat/nodes?pretty
也可以看到会有三个elasticsearch服务
还有一个elasticsearch-head可视化工具
docker pull mobz/elasticsearch-head:5
#成功后运行容器
docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
浏览器访问,可以看到可以访问并且也可以关联elasticsearch:9200服务



