• 如何使用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
    
    • 1
    • 2

    b、保存文件;

    注意

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

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

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

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

    vm.max_map_count=655360
    
    • 1

    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]
    …省略…
    
    • 1
    • 2
    • 3
    • 4
    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
    
    • 1
    • 2
    • 3
    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
    
    • 1
    • 2
    • 3
    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
    
    • 1
    • 2
    • 3
    2.4、目录结构
    [root@localhost ~]# yum -y install tree
    [root@localhost ~]# tree /usr/local/es_cluster
    [root@localhost ~]#
    
    • 1
    • 2
    • 3
    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
    
    • 1
    • 2
    • 3
    3.4、删除文件
    [root@localhost ~]# rm -f /opt/elasticsearch-analysis-ik-7.9.3.zip
    
    • 1
    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 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    说明:

    -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最大最小内存。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    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 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    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
    
    • 1
    • 2
    6.2、重新加载
    [root@localhost ~]# firewall-cmd --reload
    
    • 1
    6.3、查看放行端口
    [root@localhost ~]# firewall-cmd --list-ports
    
    • 1
    7、数据包转发

    7.1、编辑文件:

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

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

    7.3、重启network:

    [root@localhost ~]# systemctl restart network
    
    • 1

    注意

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

    ...省略...
    WARNING: IPv4 forwarding is disabled. Networking will not work. 
    上面警告将导致无法远程访问该docker容器
    
    • 1
    • 2
    • 3
    8、验证

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

    在这里插入图片描述

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

  • 相关阅读:
    【LeetCode】202. 快乐数 - hash表 / 快慢指针
    (2022版)一套教程搞定k8s安装到实战 | Taint&Toleration
    限流设置之Nginx篇
    k8s helm 删除 tiller
    银行数据中心绿色发展新格局:建设全闪数据中心
    从数学到算法
    学编程的第二十二天
    java数据结构(红黑树)set集合 HashSet HashSet三个问题 LinkedHashSetTreeSet TreeSet集合默认规则排序规则
    使用Windbg动态调试排查软件启动不了的问题
    WebWall-03.XSS(跨站脚本漏洞)
  • 原文地址:https://blog.csdn.net/wangshuxuncom/article/details/127925949