前提:

本文主要是将原来Elasticsearch 单节点改成两个节点组成的集群,以及查看集群信息。
原来的node-1(192.168.1.240),准备部署的node-2(192.168.1.231)组成一个集群。

Elasticsearch的 docker-compose.yml 内容如下:

version: '3'
services:
  elasticsearch:                    # 服务名称
    image: "elasticsearch:${ELK_VERSION}"      # 使用的镜像
    container_name: elasticsearch   # 容器名称
    restart: always                 # 失败自动重启策略
    environment:
      - node.name=node-1                   # 节点名称,集群模式下每个节点名称唯一
      - network.publish_host=192.168.1.240  # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
      - network.host=0.0.0.0                # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机      
      - discovery.seed_hosts=192.168.1.240          # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - cluster.initial_master_nodes=192.168.1.240  # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
      - cluster.name=es-cluster     # 集群名称,相同名称为一个集群, 三个es节点须一致
      - bootstrap.memory_lock=true  # 内存交换的选项,官网建议为true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
    ulimits:        # 栈内存的上限
      memlock:
        soft: -1    # 不限制
        hard: -1    # 不限制
    volumes:
      - $PWD/elasticsearch/config:/usr/share/elasticsearch/config  # 将容器中es的配置文件映射到本地,本地必须提前先有该文件,设置跨域, 否则head插件无法连接该节点
      - $PWD/elasticsearch/data:/usr/share/elasticsearch/data  # 存放数据的文件
      - $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins  # 存放插件的文件
    ports:
      - 9200:9200    # http端口,可以直接浏览器访问
      - 9300:9300    # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。

现在需要正在一台机器,做Elasticsearch 节点。

步骤:

1 修改node-1

1.1 修改node-1的docker-compose 内容,修改如下:

version: '3'
services:
  elasticsearch:                    # 服务名称
    image: "docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}"      # 使用的镜像
    container_name: elasticsearch   # 容器名称
    restart: always                 # 失败自动重启策略
    environment:
      - node.name=node-1                   # 节点名称,集群模式下每个节点名称唯一
      - network.publish_host=192.168.1.240  # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
      - network.host=0.0.0.0                # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
      - discovery.seed_hosts=192.168.1.231          # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - discovery.zen.ping_timeout=3s       # 节点状态的最大响应时间,减少网络延迟的误判
      - discovery.zen.minimum_master_nodes=1   # 集群中最小master数量
      - cluster.initial_master_nodes=192.168.1.240,192.168.1.231  # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
      - cluster.name=es-cluster     # 集群名称,相同名称为一个集群, 三个es节点须一致
      - bootstrap.memory_lock=true  # 内存交换的选项,官网建议为true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
    ulimits:        # 栈内存的上限
      memlock:
        soft: -1    # 不限制
        hard: -1    # 不限制
    volumes:
      - $PWD/elasticsearch/config:/usr/share/elasticsearch/config  # 将容器中es的配置文件映射到本地,本地必须提前先有该文件,设置跨域, 否则head插件无法连接该节点
      - $PWD/elasticsearch/data:/usr/share/elasticsearch/data  # 存放数据的文件
      - $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins  # 存放插件的文件
    ports:
      - "9200:9200"    # http端口,可以直接浏览器访问
      - "9300:9300"    # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。

主要修改和新增了以下地方:

      - discovery.seed_hosts=192.168.1.231          # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - discovery.zen.ping_timeout=3s       # 节点状态的最大响应时间,减少网络延迟的误判
      - discovery.zen.minimum_master_nodes=1   # 集群中最小master数量
      - cluster.initial_master_nodes=192.168.1.240,192.168.1.231  # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
  1. 声明自己192.168.1.240挂了后,192.168.1.231 选举为主节点。
  2. 节点状态的最大响应时间为3秒,减少因为网络延迟造成误判
  3. 设置集群最少master为1个
  4. 刚启动的时候,从192.168.1.240,192.168.1.231中选举一个为master。

1.2 启动elasticsearch

docker-compose up -d

2 部署node-2

node-2所在的机器IP为:192.168.1.231,和192.168.1.240属同一个网络,互通。

2.1 指定环境信息版本

新建一个.env文件,添加以下内容:

ELK_VERSION=7.16.1

node-2的docker-compose 内容如下:

version: '3'
services:
  elasticsearch:                    # 服务名称
    image: "docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}"      # 使用的镜像
    container_name: elasticsearch   # 容器名称
    restart: always                 # 失败自动重启策略
    environment:
      - node.name=node-2                   # 节点名称,集群模式下每个节点名称唯一
      - network.publish_host=192.168.1.231  # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
      - network.host=0.0.0.0                # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
      - discovery.seed_hosts=192.168.1.240          # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - discovery.zen.ping_timeout=3s
      - discovery.zen.minimum_master_nodes=1
      - cluster.initial_master_nodes=node-1,node-2  # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
      - cluster.name=es-cluster     # 集群名称,相同名称为一个集群, 三个es节点须一致
      - bootstrap.memory_lock=true  # 内存交换的选项,官网建议为true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
    ulimits:        # 栈内存的上限
      memlock:
        soft: -1    # 不限制
        hard: -1    # 不限制
    volumes:
      - $PWD/elasticsearch/config:/usr/share/elasticsearch/config  # 将容器中es的配置文件映射到本地,本地必须提前先有该文件,设置跨域, 否则head插件无法连接该节点
      - $PWD/elasticsearch/data:/usr/share/elasticsearch/data  # 存放数据的文件
      - $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins  # 存放插件的文件
    ports:
      - "9200:9200"    # http端口,可以直接浏览器访问
      - "9300:9300"    # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。

2.2 新建或拷贝elasticsearch.yml 文件到本地

mkdir -p elasticsearch/{data,plugins}
docker run -d --rm --name elasticsearch  docker.elastic.co/elasticsearch/elasticsearch:7.16.1
docker cp elasticsearch:/usr/share/elasticsearch/config/ elasticsearch/
docker stop elasticsearch
chown -R 1000:root elasticsearch/config/
chown 1000:root elasticsearch/data/
chmod 775 elasticsearch/data/
chown 1000:root elasticsearch/plugins/

2.3 修改内存设置

/etc/sysctl.conf 添加以下内容:

vm.max_map_count=655360

保存后,执行刷新命令生效:

sysctl -p

2.4 在 elasticsearch/config/elasticsearch.yml 文件新增如下内容:

http.cors.enabled: true        # 是否支持跨域
http.cors.allow-origin: "*"    # 表示支持所有域名

2.5 启动 elasticsearch

docker-compose up -d

3 检查状态

检查集群状态

访问:http://192.168.1.240:9200/_cat/nodes?vhttp://192.168.1.231:9200/_cat/nodes?v ,结果如下:

ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
192.168.1.231           45          92  20    1.19    0.44     0.21 cdfhilmrstw -      node-2
192.168.1.240           21          84  93    3.62    0.97     0.60 cdfhilmrstw *      node-1

看到 192.168.1.240 的 master 列是 * ,所以192.168.1.240是这个集群的master。

检查集群状态

浏览器访问:http://192.168.1.240:9200/_cat/health?v

epoch      timestamp cluster    status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1653557959 09:39:19  es-cluster green           2         2     26  13    0    0        0             0                  -                100.0%

解析如下:

cluster ,集群名称
status,集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
node.total,代表在线的节点总数量
node.data,代表在线的数据节点的数量
shards, active_shards 存活的分片数量
pri,active_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍。
relo, relocating_shards 迁移中的分片数量,正常情况为 0
init, initializing_shards 初始化中的分片数量 正常情况为 0
unassign, unassigned_shards 未分配的分片 正常情况为 0
pending_tasks,准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time,任务最长等待时间
active_shards_percent,正常分片百分比 正常情况为 100%

查询es集群状态、分片、索引
https://blog.51cto.com/u_15162069/2901128

查看es分片信息

查看es分片信息,模糊匹配:
浏览器打开:http://192.168.1.240:9200/_cat/shards/nginx*?v

index                       shard prirep state     docs   store ip            node
nginx-access-log-2022.05.24 0     r      STARTED    319 264.3kb 192.168.1.240 node-1
nginx-access-log-2022.05.24 0     p      STARTED    319 264.3kb 192.168.1.231 node-2
nginx-access-log-2022.05.26 0     p      STARTED 326068  53.9mb 192.168.1.240 node-1
nginx-access-log-2022.05.26 0     r      STARTED 329318  74.5mb 192.168.1.231 node-2
nginx-access-log-2022.05.23 0     r      STARTED  78953  12.3mb 192.168.1.240 node-1
nginx-access-log-2022.05.23 0     p      STARTED  78953  12.3mb 192.168.1.231 node-2
nginx-access-log-2022.05.25 0     p      STARTED    538 318.6kb 192.168.1.240 node-1
nginx-access-log-2022.05.25 0     r      STARTED    538 318.6kb 192.168.1.231 node-2

解析如下:

index:所有名称
shard:分片数
prirep:分片类型,p=pri=primary为主分片,r=rep=replicas为复制分片
state:分片状态,STARTED为正常分片,INITIALIZING为异常分片
docs:记录数
store:存储大小
ip:es节点ip
node:es节点名称

查看所有分片信息

http://192.168.1.240:9200/_cat/shards

nginx-access-log-2022.05.25                                   0 p STARTED    538 318.6kb 192.168.1.240 node-1
nginx-access-log-2022.05.25                                   0 r STARTED    538 318.6kb 192.168.1.231 node-2
.apm-custom-link                                              0 p STARTED      0    226b 192.168.1.240 node-1
.apm-custom-link                                              0 r STARTED      0    226b 192.168.1.231 node-2
.geoip_databases                                              0 p STARTED     41  61.8mb 192.168.1.240 node-1
.geoip_databases                                              0 r STARTED     41  61.8mb 192.168.1.231 node-2
nginx-access-log-2022.05.24                                   0 r STARTED    319 264.3kb 192.168.1.240 node-1
nginx-access-log-2022.05.24                                   0 p STARTED    319 264.3kb 192.168.1.231 node-2
nginx-access-log-2022.05.23                                   0 r STARTED  78953  12.3mb 192.168.1.240 node-1
nginx-access-log-2022.05.23                                   0 p STARTED  78953  12.3mb 192.168.1.231 node-2
.async-search                                                 0 p STARTED      0  22.4kb 192.168.1.240 node-1
.async-search                                                 0 r STARTED      0  22.4kb 192.168.1.231 node-2
nginx-access-log-2022.05.26                                   0 p STARTED 326068  53.9mb 192.168.1.240 node-1
nginx-access-log-2022.05.26                                   0 r STARTED 329318  74.5mb 192.168.1.231 node-2
.kibana_7.16.1_001                                            0 p STARTED    414   2.4mb 192.168.1.240 node-1
.kibana_7.16.1_001                                            0 r STARTED    414   2.4mb 192.168.1.231 node-2
.kibana_task_manager_7.16.1_001                               0 p STARTED     17 867.5kb 192.168.1.240 node-1
.kibana_task_manager_7.16.1_001                               0 r STARTED     17 673.9kb 192.168.1.231 node-2
.ds-ilm-history-5-2022.05.23-000001                           0 r STARTED                192.168.1.240 node-1
.ds-ilm-history-5-2022.05.23-000001                           0 p STARTED                192.168.1.231 node-2
.apm-agent-configuration                                      0 p STARTED      0    226b 192.168.1.240 node-1
.apm-agent-configuration                                      0 r STARTED      0    226b 192.168.1.231 node-2
.ds-.logs-deprecation.elasticsearch-default-2022.05.23-000001 0 p STARTED                192.168.1.240 node-1
.ds-.logs-deprecation.elasticsearch-default-2022.05.23-000001 0 r STARTED                192.168.1.231 node-2
.kibana-event-log-7.16.1-000001                               0 r STARTED                192.168.1.240 node-1
.kibana-event-log-7.16.1-000001                               0 p STARTED                192.168.1.231 node-2

查看所有索引

浏览器打开:http://192.168.1.240:9200/_cat/indices?v

health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases                c7jwW_aFQbS8qFLAoVW3BQ   1   1         41           63    123.6mb         61.8mb
green  open   nginx-access-log-2022.05.26     m6lp1Q6xTTi3RZKMXve2Pw   1   1     401024            0    135.1mb         60.5mb
green  open   .apm-custom-link                MXLP40JCQfSQGyN4NupfPg   1   1          0            0       452b           226b
green  open   nginx-access-log-2022.05.25     9_aje1QRTgG79C7AQwcA0A   1   1        538            0    637.3kb        318.6kb
green  open   nginx-access-log-2022.05.24     Tk4oyfbtQom3lYIMNRBwDA   1   1        319            0    528.7kb        264.3kb
green  open   .kibana_7.16.1_001              u5boJ_cGSkWl-fytiIzQfw   1   1        415           14      4.8mb          2.4mb
green  open   nginx-access-log-2022.05.23     z9k1cN9tRzSMtnUsvJ-XIQ   1   1      78953            0     24.6mb         12.3mb
green  open   .kibana_task_manager_7.16.1_001 YZFRtMthSQ6pITFC4E1Msw   1   1         17         6139      1.7mb       1005.1kb
green  open   .apm-agent-configuration        MsntlFjaTniEZn2VaZoRUw   1   1          0            0       452b           226b
green  open   .async-search                   TY5KsBwMQjKk_-DXv6i4-g   1   1          0            0     44.9kb         22.4kb

解析如下:

health: green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
pri:primary缩写,主分片数量
rep:副分片数量
docs.count: Lucene 级别的文档数量
docs.deleted: 删除的文档
store.size:全部分片大小(包含副本)
pri.store.size:主分片大小

查看所有可以访问接口

浏览器打开:http://192.168.1.240:9200/_cat

=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
/_cat/ml/anomaly_detectors
/_cat/ml/anomaly_detectors/{job_id}
/_cat/ml/trained_models
/_cat/ml/trained_models/{model_id}
/_cat/ml/datafeeds
/_cat/ml/datafeeds/{datafeed_id}
/_cat/ml/data_frame/analytics
/_cat/ml/data_frame/analytics/{id}
/_cat/transforms
/_cat/transforms/{transform_id}