前提:
本文主要是将原来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
- 声明自己192.168.1.240挂了后,192.168.1.231 选举为主节点。
- 节点状态的最大响应时间为3秒,减少因为网络延迟造成误判
- 设置集群最少master为1个
- 刚启动的时候,从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?v 和 http://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}