使用Docker搭建ES5.6.16集群

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并做为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,可以达到实时搜索,稳定,可靠,快速,安装使用方便(后续用ES代替)

ES官网:www.elastic.co/cn/ Docker安装ES官网教程:www.elastic.co/guide/en/el… ES配置文件详解(参考博客):www.cnblogs.com/sunxucool/p…html

1.jdk安装:es的安装时必需要有java的环境,因此咱们要先安装jdk,版本咱们选择1.8,这样对es的版本兼容更多,若是之后想换其余的es版本比较方便java

(1)在Linux系统下安装jdk1.8,使用MobaXterm做为链接工具,由于他能够直接选择文件夹进行文件的上传,咱们这里上传jdk-8u171-linux-x64.tar.gz(目前下载jdk好像须要注册Oracle帐号)node

①在usr下建立java文件夹linux

mkdir javaweb

②将上传的压缩包移动到/usr/java下docker

mv jdk-8u171-linux-x64.tar.gz /usr/javabootstrap

③解压文件vim

tar zxvf jdk-8u121-linux-x64.tar.gz跨域

具体操做后的效果以下:bash

image

④使用vi编辑器,配置java环境变量

sudo vi /etc/profile

在文件最后,添加以下配置,设置java环境变量

#Java Env

export JAVA_HOME=/usr/jdk1.8.0_121

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin
复制代码

效果以下:

image

⑤退出vi编辑器,使环境变量设置当即生效: source /etc/profile

⑥查看jdk版本: java -version

image

2.安装ES:安装ES能够从官网下载压缩包进行安装,可是目前docker比较流行方便,拉取相对应的镜像,因此采用docker进行ES集群的安装,ES的版本咱们选择5.6.16,须要注意的是ES的集群至少须要三台才能达到集群效果

(1)拉取ES镜像:

docker pull elasticsearch:5.6.16

命令执行结束后,可使用docker images 查询镜像是否下载成功,以下

image

(2)使用docker安装ES时,为了方便之后修改配置文件相关的东西,咱们使用文件挂载的方式启动docker,因此咱们要准备一些文件夹存放数据,而后对文件夹的权限进行修改,为启动ES作准备

①建立docker文件挂载目录,并开发端口通讯

进入勽目录下: cd /usr

建立ES配置的文件夹: mkdir -p jayes/ES/config

进入ES目录: cd ES

建立ES数据存放的文件

mkdir data1

mkdir data2

mkdir data3
复制代码

image

开发端口通讯:后续ES配置文件中所须要的端口,否则ES之间没法进行通讯

firewall-cmd --add-port=9300/tcp

firewall-cmd --add-port=9301/tcp

firewall-cmd --add-port=9302/tcp
复制代码

将data一、data二、data3文件夹开启777权限,防止启动ES时出现没有权限操做文件夹的报错: chmod 777 data1 data2 data3

(3)建立ES的配置文件,由于以后使用docker启动可使用目录挂载,因此咱们在/usr/jayes/ES/config下建立相应的配置文件便可(配置文件中是做者的服务器IP,使用时须要根据实际状况修改)

es-master.yml

#集群名
cluster.name: jay-es

#节点名
node.name: jay-master

#设置绑定的ip地址,能够是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0

#设置其它节点和该节点交互的ip地址,若是不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 118.25.153.239

#设置对外服务的http端口,默认为9200
http.port: 9200

#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300

#是否容许跨域REST请求
http.cors.enabled: true

#容许 REST 请求来自何处
http.cors.allow-origin: "*"

#节点角色设置
node.master: true 
node.data: true  

#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]

#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1) 
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
复制代码

es-nodeone.yml

#集群名
cluster.name: jay-es

#节点名
node.name: jay-nodeone

#设置绑定的ip地址,能够是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0

#设置其它节点和该节点交互的ip地址,若是不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 118.25.153.239

#设置对外服务的http端口,默认为9200,该节点为9201
http.port: 9201

#设置节点之间交互的tcp端口,默认是9300,该es的ip端口为9301
transport.tcp.port: 9301

#是否容许跨域REST请求
http.cors.enabled: true

#容许 REST 请求来自何处
http.cors.allow-origin: "*"

#节点角色设置
node.master: true 
node.data: true  

#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]

#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1) 
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
复制代码

es-nodetwo.yml

#集群名
cluster.name: jay-es

#节点名
node.name: jay-nodetwo

#设置绑定的ip地址,能够是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0

#设置其它节点和该节点交互的ip地址,若是不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 118.25.153.239

#设置对外服务的http端口,默认为9200,该节点为9202
http.port: 9202

#设置节点之间交互的tcp端口,默认是9300,该es的ip端口为9302
transport.tcp.port: 9302

#是否容许跨域REST请求
http.cors.enabled: true

#容许 REST 请求来自何处
http.cors.allow-origin: "*"

#节点角色设置
node.master: true 
node.data: true  

#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]

#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1) 
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
复制代码

(3)调高JVM线程数限制数量:ES对JVA的线程数有最低要求,若是不配置的话在启动时会报错,报出以下错误: bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] ①修改配置文件:sysctl.conf vim /etc/sysctl.conf ②在配置文件加入以下配置值 vm.max_map_count=262144 ③启用修改后的配置 sysctl -p (4)启动ES集群

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9200:9200 -p 9300:9300 -v /usr/jayes/ES/config/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data1:/usr/share/elasticsearch/data --name ES01 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
 
 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9201:9201 -p 9301:9301 -v /usr/jayes/ES/config/es-nodeone.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data2:/usr/share/elasticsearch/data --name ES02 docker.elastic.co/elasticsearch/elasticsearch:5.6.16

 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9202:9202 -p 9302:9302 -v /usr/jayes/ES/config/es-nodetwo.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data3:/usr/share/elasticsearch/data --name ES03 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
复制代码

注意:设置-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 是由于/etc/elasticsearch/jvm.options 默认jvm最大最小内存是2G,启动容器后 可用docker stats命令查看 (5)检测ES集群搭建是否成功 http://118.25.153.239:9200/_cat/nodes?pretty

image.png
注意:输入上诉地址后可能会在页面显示以下报错, { "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 },由于使用docker安装ES时,会自动去下载x-pack,它至关于一个权限拦截使用,具体不在这里说明,由于使用它须要收费,因此咱们选择不使用,将其卸载,卸载后就能够正常显示图片所示,操做以下

a.查看全部容器
docker ps
b.进入es容器
docker exec -it 容器名or容器id /bin/bash
c.卸载x-pack插件
./bin/elasticsearch-plugin remove x-pack
d.删除配置文件(因为配置文件保护,须要手动删除)
cd /usr/share/elasticsearch/config
rm -rf x-pack
复制代码

(6)安装ES图形化操做工具:elasticsearch-head ①拉取elasticsearch-head镜像 docker pull mobz/elasticsearch-head:5 ②使用docker启动 docker run -di -p 9100:9100 --name es-manager mobz/elasticsearch-head:5

image.png
注意:* 为master节点,服务器内存过小,只能启动两个es容器,第三个会报错,因此展现中只有两个,可是ES集群最低是三个
相关文章
相关标签/搜索