如何使用Docker搭建ES集群
Posted 程序猿老高
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Docker搭建ES集群相关的知识,希望对你有一定的参考价值。
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键,如下图:
说明:节点名称带*表示为主节点;
以上是关于如何使用Docker搭建ES集群的主要内容,如果未能解决你的问题,请参考以下文章