如何使用Docker搭建ES集群
创始人
2024-01-30 22:56:30

1、配置虚拟机

1.1、设置内存

将虚拟机内存设置为4G,内存太小可能导致某个ES节点无法正常运行;

1.2、修改limits.conf

limits.conf文件可以设置用户最大可创建文件的数量

a、执行vi /etc/security/limits.conf命令—>文件末尾添加如下内容:

* soft nofile 65536
* hard nofile 131072

b、保存文件;

注意

如果不设置用户最大可创建文件的数量,则elasticsearch启动时出现如下信息:

…省略…
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
…省略…
1.3、修改sysctl.conf

sysctl.conf文件可以设置最大虚拟内存

a、执行vi /etc/sysctl.conf命令—>文件末尾添加如下内容:

vm.max_map_count=655360

b、保存文件;

c、执行sysctl -p命令,该命令用于在Linux内核处于运行状态时动态地修改内核的运行参数;-p用于从 “/etc/sysctl.conf”配置文件中加载内核参数设置;

注意

如果不设置最大虚拟内存,则elasticsearch启动时出现如下信息:

…省略…
ERROR: [3] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [655360] is too low, increase to at least [262144]
…省略…

2、创建目录

2.1、node_1
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_1/data
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_1/logs
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_1/plugins/ik
2.2、node_2
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_2/data
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_2/logs
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_2/plugins/ik
2.3、node_3
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_3/data
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_3/logs
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_3/plugins/ik
2.4、目录结构
[root@localhost ~]# yum -y install tree
[root@localhost ~]# tree /usr/local/es_cluster
[root@localhost ~]#

3、分词器

3.1、下载

访问https://github.com/medcl/elasticsearch-analysis-ik/releases—>由于elasticsearch版本为7.9.3,所以这里下载elasticsearch-analysis-ik-7.9.3.zip

3.2、上传

将压缩包上传至Linux系统/opt目录

3.3、解压
[root@localhost ~]# unzip /opt/elasticsearch-analysis-ik-7.9.3.zip -d /usr/local/es_cluster/node_1/plugins/ik
[root@localhost ~]# unzip /opt/elasticsearch-analysis-ik-7.9.3.zip -d /usr/local/es_cluster/node_2/plugins/ik
[root@localhost ~]# unzip /opt/elasticsearch-analysis-ik-7.9.3.zip -d /usr/local/es_cluster/node_3/plugins/ik
3.4、删除文件
[root@localhost ~]# rm -f /opt/elasticsearch-analysis-ik-7.9.3.zip

4、Docker环境

视频教程:https://www.bilibili.com/video/BV1xv4y1S7kA

5、ES集群

5.1、搜索镜像

镜像网址:https://hub.docker.com/r/elastic/elasticsearch/tags?page=1&ordering=last_updated

5.2、拉取镜像
[root@localhost ~]# docker pull elasticsearch:7.9.3
7.9.3: Pulling from library/elasticsearch
75f829a71a1c: Pull complete
...省略...
817feb91b55c: Pull complete
Digest: sha256:a13cd87cbf139fadbca64972ef2c8777222236887d303e4177c1ab7cff1b52f6
Status: Downloaded newer image for elasticsearch:7.9.3
docker.io/library/elasticsearch:7.9.3
[root@localhost ~]#
5.3、创建并启动ES容器:

node-1

docker run -d \
--name=es_node_1 \
--restart=always \
-p 9201:9200 \
-p 9301:9300 \
--privileged=true \
-v /usr/local/es_cluster/node_1/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_1/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_1/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=my-cluster" \
-e "node.name=node-1" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "cluster.initial_master_nodes=node-1" \
-e "discovery.seed_hosts=192.168.1.100:9301,192.168.1.100:9302,192.168.1.100:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.9.3

说明:

-p:指定端口映射,格式:主机(宿主)端口:容器端口

-e:指定容器环境变量,上述各环境变量含义如下:

cluster.name:配置es集群名称,默认为elasticsearch,同一网段下的不同ES集群通过集群名来区分;
node.name:节点名称,一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念
node.master:是否可以成为master节点
node.data:是否允许该节点存储数据,默认开启
network.host:绑定主机的ip地址,允许外网访问,同一网段下的ES会自动加入该集群中
transport.tcp.port:设置集群节点之间交互的tcp端口
http.port:设置http端口
cluster.initial_master_nodes:设置哪些ES节点参与第一次master节点选举,其值可以是ES节点IP地址(如:192.168.1.100或192.168.1.100:9300),也可以是ES节点名称
discovery.seed_hosts:设置当前节点与哪些ES节点建立连接,其值可以是127.0.0.1
gateway.auto_import_dangling_indices:是否自动引入dangling索引,默认false
#支持跨域访问:kibana或elasticsearch-head插件作为客户端要连接ES服务(http://192.168.1.100:9200),此时存在跨域问题,elasticsearch默认不允许跨域访问
http.cors.enabled:开启cors跨域访问支持,默认为false
http.cors.allow-origin:跨域访问允许的域名地址:允许所有域名
ES_JAVA_OPTS=-Xms512m -Xmx512m:ES使用Java语言开发,默认jvm为2G,这里通过ES_JAVA_OPTS设置jvm最大最小内存。

node-2

docker run -d \
--name=es_node_2 \
--restart=always \
-p 9202:9200 \
-p 9302:9300 \
--privileged=true \
-v /usr/local/es_cluster/node_2/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_2/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_2/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=my-cluster" \
-e "node.name=node-2" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "discovery.seed_hosts=192.168.1.100:9301,192.168.1.100:9302,192.168.1.100:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.9.3

node-3

docker run -d \
--name=es_node_3 \
--restart=always \
-p 9203:9200 \
-p 9303:9300 \
--privileged=true \
-v /usr/local/es_cluster/node_3/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_3/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_3/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=my-cluster" \
-e "node.name=node-3" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "discovery.seed_hosts=192.168.1.100:9301,192.168.1.100:9302,192.168.1.100:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.9.3
5.4、容器状态
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                    NAMES
2a189b6ec877   elasticsearch:7.9.3   "/tini -- /usr/local…"   17 seconds ago   Up 15 seconds   0.0.0.0:9203->9200/tcp, :::9203->9200/tcp, 0.0.0.0:9303->9300/tcp, :::9303->9300/tcp   es_node_3
ccbd3ea5fcbc   elasticsearch:7.9.3   "/tini -- /usr/local…"   33 seconds ago   Up 30 seconds   0.0.0.0:9202->9200/tcp, :::9202->9200/tcp, 0.0.0.0:9302->9300/tcp, :::9302->9300/tcp   es_node_2
0ad78a6a5258   elasticsearch:7.9.3   "/tini -- /usr/local…"   48 seconds ago   Up 47 seconds   0.0.0.0:9201->9200/tcp, :::9201->9200/tcp, 0.0.0.0:9301->9300/tcp, :::9301->9300/tcp   es_node_1
[root@localhost ~]#

6、开放端口

6.1、添加端口
[root@localhost ~]# firewall-cmd --add-port=9201/tcp --add-port=9202/tcp --add-port=9203/tcp --permanent
[root@localhost ~]# firewall-cmd --add-port=9301/tcp --add-port=9302/tcp --add-port=9303/tcp --permanent
6.2、重新加载
[root@localhost ~]# firewall-cmd --reload
6.3、查看放行端口
[root@localhost ~]# firewall-cmd --list-ports

7、数据包转发

7.1、编辑文件:

[root@localhost ~]# vi /usr/lib/sysctl.d/50-default.conf

7.2、末尾添加net.ipv4.ip_forward = 1

7.3、重启network:

[root@localhost ~]# systemctl restart network

注意

Linux默认不允许数据包转发,此时执行docker run时出现如下警告:

...省略...
WARNING: IPv4 forwarding is disabled. Networking will not work. 
上面警告将导致无法远程访问该docker容器

8、验证

启动浏览器—>地址栏输入http://192.168.1.100:9201/_cat/nodes?pretty—>点击Enter键,如下图:

在这里插入图片描述

说明:节点名称带*表示为主节点;

相关内容

热门资讯

中国电信人工电话多少 中国电信... 当我们在使用中国移动、中国电信和中国联通提供的电信业务时,可能会发生争议。建议直接向服务提供商投诉,...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
坐月子十大禁忌 坐月子的风俗禁... 前段时间,伊能静发微博说生两个孩子都40多天没洗澡,每天都用药水擦了擦身体。但也强调了,月子怎么做是...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...