Docker搭建有分词器的ES集群

本文详细描述了如何在Docker环境中创建Elasticsearchmaster和data节点,包括设置VM参数、安装插件、创建令牌,以及使用Python脚本监控集群状态和索引信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、创建master节点

二、安装kibana

三、逐个添加data节点

四、在kibana的Dev tool console查看节点信息

五、python代码查看es集群信息


一、创建master节点

# 1.对于Elasticsearch,这个设置很重要,因为Elasticsearch(特别是它的底层搜索引擎Lucene)会创建大量的虚拟内存区域。如果 vm.max_map_count 的值太低,Elasticsearch可能无法正常运行或表现出性能问题。Elasticsearch官方文档通常建议将这个值设置为 262144,以确保Elasticsearch可以正常运行。
sysctl -w vm.max_map_count=262144

# 2.启动master节点
chmod 666 /path/es/node1/data
docker run -e ES_JAVA_OPTS="-Xms32g -Xmx32g" --name es01 -p 9200:9200 -p 9300:9300 --net elastic -v /path/es/node1/data:/usr/share/elasticsearch/data -itd -m 34GB docker.elastic.co/elasticsearch/elasticsearch:8.11.0

# 3.查看日志
docker logs es01

# 4.安装ik
docker exec -it es01 /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.11.0/elasticsearch-analysis-ik-8.11.0.zip
docker restart es01

# 5.查看plugin
./bin/elasticsearch-plugin list

# 6.在主节点上重新生成elastic密码
./bin/elasticsearch-reset-password -u elastic

# 7.在主节点上重新生成kibana的enrollment-token

bin/elasticsearch-create-enrollment-token -s kibana

二、安装kibana

docker pull docker.elastic.co/kibana/kibana:8.11.0
docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.11.0
#启动kibana后用上面创建的master打印出的日志里的账号密码登录kibana

三、逐个添加data节点

# 1.在主节点上生成令牌
docker exec -it es01 /bin/bash
bin/elasticsearch-create-enrollment-token -s node

# 2.用Dockerfile打包生成一个安装了ik的elasticsearch镜像
docker build -f Dockerfile --tag=elastic-ik:v1 .
Dockerfile文件内容如下:

FROM docker.elastic.co/elasticsearch/elasticsearch:8.11.0
MAINTAINER moumoumou 
RUN sh -c  'echo y | /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.11.0/elasticsearch-analysis-ik-8.11.0.zip'

# 3.添加data节点es02
chmod 666 /path/es/node2/data
docker run -e ES_JAVA_OPTS="-Xms32g -Xmx32g" --name es02 --net elastic -p 9202:9200 -p 9302:9300 -v /path/es/node2/data:/usr/share/elasticsearch/data -e "ENROLLMENT_TOKEN=eyJ2ZXIiOiI4LjExLjAiLCJhZHIiOlsiMTcyLjE5LjAuMjo5MjAwIl0sImZnciI6IjI2YTk3ZTc0OTQ5NGRkZGY0OWY5YjM4MjliNWYxMjBjZmFjYTllODI4ZmQ4ZmUzODliMDJiMjVjM2QzZTlkMmYiLCJrZXkiOiJURTBsaG93QjVyU0lKY3h1bjktNjp2X2ZjUWpvOVNKR1UzcjZQdi1Ta3NnIn0=" -itd elastic-ik:v1 

# 4.添加data节点es03
chmod 666 /path/es/node3/data
docker run -e ES_JAVA_OPTS="-Xms32g -Xmx32g" --name es03 --net elastic -p 9203:9200 -p 9303:9300 -v /path/es/node3/data:/usr/share/elasticsearch/data -e "ENROLLMENT_TOKEN=eyJ2ZXIiOiI4LjExLjAiLCJhZHIiOlsiMTcyLjE5LjAuMjo5MjAwIl0sImZnciI6IjI2YTk3ZTc0OTQ5NGRkZGY0OWY5YjM4MjliNWYxMjBjZmFjYTllODI4ZmQ4ZmUzODliMDJiMjVjM2QzZTlkMmYiLCJrZXkiOiJURTBsaG93QjVyU0lKY3h1bjktNjp2X2ZjUWpvOVNKR1UzcjZQdi1Ta3NnIn0=" -itd elastic-ik:v1

四、在kibana的Dev tool console查看节点信息

GET /_cat/nodes?v&pretty
# ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
# 172.19.0.5           29          92   0    0.22    0.77     0.90 cdfhilmrstw -      ae3a83e43221
# 172.19.0.2           58          66   0    0.22    0.77     0.90 cdfhilmrstw *      155f952e0ed4
# 172.19.0.4           17          92   0    0.22    0.77     0.90 cdfhilmrstw -      ec7e7cb0a0af

五、python代码查看es集群信息

from elasticsearch import Elasticsearch

# 连接到 Elasticsearch
es = Elasticsearch(
    'https://192.168.85.2:9020',
    basic_auth=('elastic', 'bd9cl4444444444444TC'),
    verify_certs=False  # 如果使用自签名证书,需要设置为 False
)

# 获取节点状态
nodes_stats = es.nodes.stats(metric='jvm')

def bytes_to_gb(bytes):
    """将字节转换为千兆字节(GB)"""
    return round(bytes / (1024**3), 2)

for node_id, node_info in nodes_stats['nodes'].items():
    print(f"节点 {node_id}")
    jvm_mem = node_info['jvm']['mem']
    print(f"已使用堆内存: 约 {bytes_to_gb(jvm_mem['heap_used_in_bytes'])} GB({jvm_mem['heap_used_in_bytes']} 字节)")
    print(f"堆内存使用百分比: {jvm_mem['heap_used_percent']}%")

    # 年轻代内存
    young = jvm_mem['pools']['young']
    print(f"年轻代内存使用: 约 {bytes_to_gb(young['used_in_bytes'])} GB({young['used_in_bytes']} 字节)")

    # 老年代内存
    old = jvm_mem['pools']['old']
    print(f"老年代内存使用: 约 {bytes_to_gb(old['used_in_bytes'])} GB({old['used_in_bytes']} 字节)")

    # 幸存者区内存
    survivor = jvm_mem['pools']['survivor']
    print(f"幸存者区内存使用: 约 {bytes_to_gb(survivor['used_in_bytes'])} GB({survivor['used_in_bytes']} 字节)")

    print()
    
    # 指定索引名称
    
index_name = "child_knowledge"  # 替换为您的索引名

# 获取索引信息
index_stats = es.indices.stats(index=index_name)
docs_count = index_stats['indices'][index_name]['total']['docs']['count']

print(f"Index: {index_name}")
print(f"Docs Count: {docs_count}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值