Elasticsearch使用系列-Docker搭建Elasticsearch集群

Elasticsearch使用系列-ES简介和环境搭建

Elasticsearch使用系列-ES增删查改基本操作+ik分词

Elasticsearch使用系列-基本查询和聚合查询+sql插件

Elasticsearch使用系列-.NET6对接Elasticsearch

Elasticsearch使用系列-Docker搭建Elasticsearch集群

一、系统环境准备

这里准备三台机器,系统均为CentOS7.9:172.16.2.84,172.16.2.85,172.16.2.86

1.调高jvm线程数限制

#修改sysctl.conf
vi /etc/sysctl.conf

#修改max_map_count调大,如果没有这个设置,则新增一行
vm.max_map_count=262144

#改完保存后, 执行下面命令让sysctl.conf文件生效
sysctl -p

2.安装docker环境

参照://www.cnblogs.com/wei325/p/15139701.html

二、docker挂载方式搭建集群

1.配置文件

es1配置文件 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
# 配置es的集群名称,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群
cluster.name: elasticsearch
# 节点名称
node.name: node-1
# 指定该节点是否有资格被选举成为node
node.master: true
# 指定初始主节点
cluster.initial_master_nodes: ["172.16.2.84:9300"]
# 指定该节点是否存储索引数据,默认为true
node.data: true
# 设置绑定的ip地址还有其他节点和该节点交换的ip地址,本机ip
network.host: 0.0.0.0
network.publish_host: 172.16.2.84 # 指定http端口 http.port: 9200 # 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300 # 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["172.16.2.84:9300","172.16.2.84:9300","172.16.2.85:9300"] # 如果要使用head,那么需要解决跨域问题,使head插件可以访问es http.cors.enabled: true http.cors.allow-origin: "*"

es2配置文件 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
# 配置es的集群名称,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群
cluster.name: elasticsearch
# 节点名称
node.name: node-2
# 指定该节点是否有资格被选举成为node
node.master: true
# 指定初始主节点
cluster.initial_master_nodes: ["172.16.2.84:9300"]
# 指定该节点是否存储索引数据,默认为true
node.data: true
# 设置绑定的ip地址还有其他节点和该节点交换的ip地址,本机ip
network.host: 0.0.0.0
network.publish_host: 172.16.2.85 # 指定http端口 http.port: 9200 # 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300 # 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["172.16.2.84:9300","172.16.2.85:9300","172.16.2.85:9300"] # 如果要使用head,那么需要解决跨域问题,使head插件可以访问es http.cors.enabled: true http.cors.allow-origin: "*"

es3配置文件 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
# 配置es的集群名称,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群
cluster.name: elasticsearch
# 节点名称
node.name: node-3
# 指定该节点是否有资格被选举成为node
node.master: true
# 指定初始主节点
cluster.initial_master_nodes: ["172.16.2.84:9300"]
# 指定该节点是否存储索引数据,默认为true
node.data: true
# 设置绑定的ip地址还有其他节点和该节点交换的ip地址,本机ip
network.host: 0.0.0.0
network.publish_host: 172.16.2.86 # 指定http端口 http.port: 9200 # 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300 # 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["172.16.2.84:9300","172.16.2.84:9300","172.16.2.86:9300"] # 如果要使用head,那么需要解决跨域问题,使head插件可以访问es http.cors.enabled: true http.cors.allow-origin: "*"

注意:配置冒号后面都有一个空格

2.创建挂载目录

为了防止容器删掉数据丢失,需要进行数据文件挂载

#创建es配置目录
mkdir /home/es/config -p
#创建es数据目录
mkdir /home/es/data 
#创建es插件目录
mkdir /home/es/plugins
#授权目录
chmod -R 777 /home/es

然后把上面的elasticsearch.yml配置文件分别放到三台机器的 /home/es/config目录下

3.docker启动命令

三台机器分别启动执行命令

1.拉取镜像

#拉取es镜像,指定版本
docker pull elasticsearch:7.16.3

2.启动es

3台机器分别执行以下命令,注意,先启动主节点,这里是172.16.2.84机器。

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d --name es7.16.3 -p 9200:9200 -p 9300:9300 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.16.3

-e ES_JAVA_OPTS=”-Xms256m -Xmx256m”  因为测试机器,把内存设为256m

-d 后台运行

–name 给启动的容器起名称

-p 9200:9200 -p 9300:9300 映射docker的端口,9200是http的端口,9300是内部通讯的端口

-v 目录挂载

elasticsearch:7.16.3  es镜像名称,用这个镜像启动为容器

 

 

集群搭建完成!

三、es head插件查看集群状态

kibana也能查看es的集群状态,但是没那么直观,这里安装head浏览器插件查看

1.打开连接

 谷歌浏览器访问://extb.cqttech.com/search/elasticsearch%2520head

 根据提示下载安装谷歌双核浏览器

 

 下面的位置打开使用

 

 

 输入集群中任意一个es地址都可以