Elasticsearch 集群部署
Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我们将通过三个节点(node1、node2、node3)来搭建一个高可用的 Elasticsearch 集群,以确保您的数据能够在多个节点之间高效地存储和检索。
中文文档:Elastic — 搜索 AI 公司 | Elastic
英文文档:Documentation
1. 准备工作
1. 配置多台 Linux 虚拟机参考如何准备多台虚拟机并配置集群化软件_多台服务器虚拟化集群-CSDN博客文章浏览阅读978次,点赞8次,收藏11次。在搭建集群化软件的过程中,首先需要准备好多台Linux服务器。本文将详细介绍如何使用VMware提供的克隆功能来准备多台虚拟机,并进行必要的配置以实现集群化软件的部署。_多台服务器虚拟化集群https://blog.csdn.net/kersixy/article/details/142205834?spm=1001.2014.3001.5501
2. 【node1、2、3】创建工作目录
以部署到 /export/server 目录为例:
mkdir -p /export/server
3. 【node1、2、3】开放必要端口
确保以下端口在防火墙中开放:
- 9200:HTTP REST API 端口,用于与 Elasticsearch 集群进行交互。
- 9300:节点间通信端口,用于 Elasticsearch 节点之间的内部通信。
- 5601(可选):Kibana 端口,用于访问 Kibana 界面。
sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent
sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5601/tcp --permanent
sudo firewall-cmd --reload
2. 下载和安装 Elasticsearch
1. 下载 Elasticsearch
方式一:在线下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.26-linux-x86_64.tar.gz
方式二:浏览器下载
Past Releases of Elastic Stack Software | ElasticLooking for a past release of Elasticsearch, Logstash, Kibana, es-hadoop, Shield, Marvel, or our language clients? You're in the right place....
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
选择所需的版本,点击下载:

点击 LINUX X86_64,下载 tar.gz 文件,上传到虚拟机。

2. 【node1】解压 Elasticsearch,并创建数据目录
tar -zxvf elasticsearch-7.17.26-linux-x86_64.tar.gz
mv elasticsearch-7.17.26 /export/server/elasticsearch
mkdir -p /export/server/elasticsearch/data
3. 配置 Elasticsearch
1. 【node1】配置 elasticsearch.yml :
sudo vi /export/server/elasticsearch/config/elasticsearch.yml
i 编辑文件,在文件中追加一下内容:
cluster.name: es-cluster
node.name: node-1
node.master: true
node.data: true
path.data: /export/server/elasticsearch/data
path.logs: /export/server/elasticsearch/logs
network.host: 0.0.0.0
discovery.seed_hosts: ["node2", "node3"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
action.destructive_requires_name: true
gateway.recover_after_nodes: 2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.port: 9200
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16
ESC 退出编辑,:wq 保存并退出。
配置说明:
- cluster.name:集群名称。同一个集群的所有节点必须使用相同的集群名称。
- node.name:节点名称。同一个集群内的每个节点名称必须唯一。
- node.master:是否可以被选举为主节点。设置为 true 表示该节点有资格成为主节点。
- node.data:该节点是否可以存储数据。设置为 true 表示该节点可以存储数据。
- node.roles:是否有主节点资格;master使其有资格被选为控制集群的主节点;data此节点同时为数据节点,7.x版本以后支持,同node.master + node.data。配置示例:node.roles: [master,data]
- path.data:数据目录的位置。Elasticsearch 将在此目录下存储索引数据。
- path.logs:日志目录的位置。Elasticsearch 将在此目录下存储日志文件。
- network.host:设置节点绑定的 IP 地址或主机名。默认情况下,Elasticsearch 只允许本机访问。设置为 0.0.0.0 表示允许任何 IP 地址访问。
- discovery.seed_hosts:发现其他节点的初始列表。这里填写其他节点的 IP 地址或主机名,不包括当前节点。
- network.tcp.keep_alive:是否启用 TCP 保活机制。设置为 true 可以防止长时间空闲的连接被关闭。
- network.tcp.no_delay:是否禁用 Nagle 算法。设置为 true 可以减少延迟,提高响应速度。
- action.destructive_requires_name:控制是否需要在执行破坏性操作时明确指定索引名称。破坏性操作包括删除索引、清空索引等。启用此配置可以增加安全性,防止误操作导致数据丢失。
- gateway.recover_after_nodes:在集群恢复过程中,至少需要多少个节点在线后才开始恢复索引。通常,这个值应该小于或等于集群中的总节点数。
- cluster.initial_master_nodes:用于指定在集群启动时哪些节点可以作为初始主节点候选。填写全部节点名称。
- http.port:HTTP REST API 端口。默认端口为 9200。
- cluster.routing.allocation.cluster_concurrent_rebalance:集群内同时启动的数据任务个数。默认是 2 个。
- cluster.routing.allocation.node_concurrent_recoveries:添加或删除节点及负载均衡时并发恢复线程个数。默认是 4 个。
- cluster.routing.allocation.node_initial_primaries_recoveries:初始化数据恢复时,并发恢复线程的个数。默认是 4 个。
2. 【node1】配置 JVM 选项
sudo vi /export/server/elasticsearch/config/jvm.options
G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:
-Xms4g
-Xmx4g
ESC 退出编辑,:wq 保存并退出。
3. 【node1】将 elasticsearch 录递归复制到 node2、node3 主机的 /export/server/ 目录下
cd /export/server
scp -r elasticsearch node2:`pwd`/
scp -r elasticsearch node3:`pwd`/
4. 【node2】修改 node2 的 elasticsearch.yml
sudo vi /export/server/elasticsearch/config/elasticsearch.yml
i 编辑文件,文件内容修改为:
cluster.name: es-cluster
node.name: node-2
node.master: true
node.data: true
path.data: /export/server/elasticsearch/data
path.logs: /export/server/elasticsearch/logs
network.host: 0.0.0.0
discovery.seed_hosts: ["node1", "node3"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
action.destructive_requires_name: true
gateway.recover_after_nodes: 2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.port: 9200
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16
ESC 退出编辑,:wq 保存并退出。
5. 【node3】修改 node3 的 elasticsearch.yml
sudo vi /export/server/elasticsearch/config/elasticsearch.yml
i 编辑文件,文件内容修改为:
cluster.name: es-cluster
node.name: node-3
node.master: true
node.data: true
path.data: /export/server/elasticsearch/data
path.logs: /export/server/elasticsearch/logs
network.host: 0.0.0.0
discovery.seed_hosts: ["node1", "node2"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
action.destructive_requires_name: true
gateway.recover_after_nodes: 2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.port: 9200
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16
ESC 退出编辑,:wq 保存并退出。
4. 【node1、2、3】系统配置
1. 创建 Elasticsearch 用户
groupadd es
useradd es -g es
cd /export/server
sudo chown es:es -R elasticsearch/
查看赋权情况:
ll

2. 设置系统资源限制
sudo vi /etc/security/limits.conf
G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:
* soft nofile 65536
* hard nofile 65536
ESC 退出编辑,:wq 保存并退出。
3. 设置虚拟内存限制
sudo vi /etc/sysctl.conf
G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:
vm.max_map_count=262145
ESC 退出编辑,:wq 保存并退出。加载并应用 /etc/sysctl.conf 文件中的系统参数设置:
sysctl -p

4. 设置环境变量
sudo vi /etc/profile
G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:
export ES_JAVA_HOME=/export/server/elasticsearch/jdk
export PATH=$ES_JAVA_HOME/bin:$PATH
注意:
如果同时配置过 JAVA_HOME 和 ES_JAVA_HOME ,PATH 会优先使用先配置的环境变量,即 java -version 的版本为先配置的 PATH,如想优先使用 JAVA_HOME,则需要将
export PATH=$ES_JAVA_HOME/bin:$PATH export PATH=$JAVA_HOME/bin:$PATH合并为:
export PATH=$JAVA_HOME/bin:$ES_JAVA_HOME/bin:$PATH
ESC 退出编辑,:wq 保存并退出。重新加载 /etc/profile 文件中的环境变量设置,使新的设置立即生效:
source /etc/profile
5. 创建 Systemd 服务(可选)
vi /etc/systemd/system/elasticsearch.service
i 编辑文件,文件内容为:
[Unit]
Description=Elasticsearch
After=network.target[Service]
User=es
Group=es
Environment="ES_JAVA_OPTS=-Xms512m -Xmx512m"
Environment="ES_JAVA_HOME=/export/server/elasticsearch/jdk"
Environment="JAVA_HOME=/export/server/jdk"
ExecStart=/export/server/elasticsearch/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
Restart=on-failure
LimitMEMLOCK=infinity
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
5. 【node1、2、3】启动 Elasticsearch
5.1 方式一:手动启动
su es
cd /export/server/elasticsearch/bin
./elasticsearch -d
5.2 方式二:使用 Systemd 服务
# 启动elasticsearch
systemctl start elasticsearch
# 查看elasticsearch状态
systemctl status elasticsearch
# 设置开机自启动
systemctl enable elasticsearch
Systemd 服务其他命令:
# 重启elasticsearch systemctl restart elasticsearch # 停止elasticsearch服务 systemctl stop elasticsearch
6. 查看服务状态
1. 查看启动是否成功
项目启动大约需要2-4 分钟时间,要确保项目完全启动后再执行,否则会出现拒绝访问:
curl http://内网ip:9200

2. 检查 Elasticsearch 集群的健康状态
curl -X GET "内网ip:9200/_cat/health?v"

说明:
status: 集群状态,常见的状态有:
- green: 所有主分片和副本分片都可用。
- yellow: 所有主分片可用,但某些副本分片不可用。
- red: 一些主分片不可用。
3. 分析 Elasticsearch 集群的状态和各个节点的信息
curl -X GET "http://内网ip:9200/_cat/nodes?v"

说明:
- ip: 节点的 IP 地址。
- heap.percent: 堆内存使用百分比。
- ram.percent: 物理内存使用百分比。
- cpu: CPU 使用率。
- load_1m: 最近 1 分钟的系统负载平均值。
- load_5m: 最近 5 分钟的系统负载平均值。
- load_15m: 最近 15 分钟的系统负载平均值。
- node.role: 节点的角色,常见的角色包括:
- c: 集群管理节点。
- d: 数据节点。
- f: 冻结节点。
- h: 主节点。
- i: 协调节点。
- l: 日志节点。
- m: 主节点。
- r: 远程集群客户端节点。
- s: 存储节点。
- t: 传输节点。
- w: 写节点。
- master: 是否为主节点,* 表示是主节点,- 表示不是主节点。
- name: 节点名称。
到此为止,无安全配置的 Elasticsearch 集群配置完成。
7. 安全配置
7.1 生成证书
1. 【node1】生成 CA 证书
cd /export/server/elasticsearch/bin
./elasticsearch-certutil ca
- 输入 CA 证书文件名。接受默认文件名 elastic-stack-ca.p12,亦可换成其他文件名;
- 设置 CA 密钥库的密码。

2. 【node1】生成节点证书
./elasticsearch-certutil cert --ca /export/server/elasticsearch/elastic-stack-ca.p12
- 输入CA 密钥库的密码。输入上一步的CA 密钥库的密码;
- 输入节点证书文件名。接受默认文件名 elastic-certificates.p12 ,亦可输入文件名修改;
- 最后提示输入节点证书密钥库密码。可以直接回车,跳过输入密码。

3. 【node1】移动和赋权证书
cd /export/server/elasticsearch
mv elastic-certificates.p12 config/
mv elastic-stack-ca.p12 config/
cd config/
scp -r elastic-certificates.p12 node2:`pwd`/
scp -r elastic-stack-ca.p12 node2:`pwd`/
scp -r elastic-certificates.p12 node3:`pwd`/
scp -r elastic-stack-ca.p12 node3:`pwd`/
4. 【node1、2、3】配置安全设置
cd /export/server/elasticsearch/config/
sudo chown es:es -R ./*
sudo vi elasticsearch.yml
G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /export/server/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /export/server/elasticsearch/config/elastic-certificates.p12
ESC 退出编辑,:wq 保存并退出。
5. 【node1、2、3】重启 Elasticsearch
- 如果是手动启动的,则按以下方法重启:
# 查看进程
ps -ef | grep elasticsearch
# 强制停止进程
kill -9 对应进程
# 启动Elasticsearch
# 如果是root用户下,需要su es切换用户,es用户下无需切换
su es
cd /export/server/elasticsearch/bin
./elasticsearch -d

- 如果使用 Systemd 服务,则按以下方法重启:
# 重启Elasticsearch,elasticsearch.service可写为elasticsearch
systemctl restart elasticsearch.service
7.2 【node1】设置用户密码
1. 交互式设置密码
cd /export/server/elasticsearch/bin
./elasticsearch-setup-passwords interactive
- 请确认您是否要继续:y
- 为 elastic 用户(超级用户,具有所有权限)输入密码;
- 为 elastic 用户(超级用户,具有所有权限)确认密码;
- 为 apm_system 用户(APM 服务器使用的用户)输入密码;
- 为 apm_system 用户(APM 服务器使用的用户)确认密码;
- 为 kibana 用户(Kibana 服务器使用的用户)输入密码;
- 为 kibana 用户(Kibana 服务器使用的用户)确认密码;
- 为 logstash_system 用户(Logstash 服务器使用的用户)输入密码;
- 为 logstash_system 用户(Logstash 服务器使用的用户)确认密码;
- 为 beats_system 用户(Filebeat 和其他 Beats 采集器使用的用户)输入密码;
- 为 beats_system 用户(Filebeat 和其他 Beats 采集器使用的用户)确认密码;
- 为 remote_monitoring_user 用户(用于远程监控的用户)输入密码;
- 为 remote_monitoring_user 用户(用于远程监控的用户)确认密码。

2. 测试连接
- 虚拟机访问测试:
curl -u elastic:elastic用户密码 http://内网ip:9200

- 浏览器访问测试:
访问 http://外网ip:9200/ ,访问结果如下图:



相关文章:
Elasticsearch 集群部署
Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我…...
微信小程序5-图片实现点击动作和动态加载同类数据
搜索 微信小程序 “动物觅踪” 观看效果 感谢阅读,初学小白,有错指正。 一、功能描述 a. 原本想通过按钮加载背景图片,来实现一个可以点击的搜索button,但是遇到两个难点,一是按钮大小调整不方便(网上搜索…...
策略梯度定理公式的详细推导
策略梯度定理公式的详细推导 以下是策略梯度定理公式从基础概率公式到最终形式的完整推导,帮助更清晰地理解推导过程中的每一个步骤。 1. 策略梯度的目标 我们希望最大化期望累积奖励 ( J ( θ ) J(\theta) J(θ) ),其定义为: J ( θ ) E…...
力扣-图论-10【算法学习day.60】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
《Python WEB安全 库全解析》
《Python WEB安全 库全解析》 一、Python WEB安全 库概述二、常见的 Python WEB安全 库介绍1. Jiasule2. Awesome Python Security3. Flask-Security4. Flask-SeaSurf 三、Python WEB 安全库的优缺点1. 优点2. 缺点 四、Python WEB 安全库的使用场景1. 开发 Web 应用2. 处理敏感…...
Linux yum-config-manager命令异常
错误信息 使用 yum-config-manager命令时错误信息如下 sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo sudo: yum-config-manager: command not found 解决办法 第一步: sudo yum -y install yum-u…...
ios 开发配置蓝牙
如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...
geoserver(1) 发布sql 图层 支持自定义参数
前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…...
Linux:network:添加ip的时候自动添加一个本地路由
文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...
go 集成nacos注册中心、配置中心
使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK: go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间,默…...
ssd202d-badblock-坏块检测
这边文章讲述的是坏快检测功能 思路: 1.第一次烧录固件会实现跳坏块,但是后续使用会导致坏块的产生; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…...
MySQL-练习-数据介绍
文章目录 一. 数据介绍1. 数据结构2. 创建数据库,数据表3. 员工表(employees)练习1 4. 顾客表(customers)练习2 5. 商品(products)和商品类别(categories)表练习3 6. 供应商表(suppliers)练习4 7. 订单和订单明细表练习5 二. 数据汇总三. 使用CASE WHEN …...
React框架:解锁现代化Web开发的新维度
在当今前端开发领域,React 无疑是一颗璀璨的明星。React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库,它在前端开发中占据着重要的地位,为开发者提供了一种高效、灵活且可维护的方式来构建复杂的用户界面。 一、React 的背景与开…...
电阻功率,限流,等效电阻
1 电阻额定功率 2 电阻限流作用 3 电阻并联等效电阻...
Qt | 开发工具(top1)
Qt Creator 跨平台、完整的集成开发环境(IDE),供应用程序开发者创建用于多个桌面、嵌入式和移动设备平台的应用程序。 Qt Linguist 一套将Qt C和Qt Quick应用程序翻译成本地语言的工具。 qmake Qt自动化构建工具,简化了不同平台的构建过程。…...
Node.js express
1. express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs.com.cn/简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用ÿ…...
ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)
问题描述: 前提:我使用的是vant组件库,其中一个页面中有一个van-popup组件,van-popup组件中又嵌套了一个van-field组件预期结果:当点击van-feild输入框时,键盘弹起,输入框显示在键盘上方实际结…...
springboot整合lua脚本在Redis实现商品库存扣减
1、目的 使用lua脚本,可以保证多条命令的操作原子性;同时可以减少操作IO(比如说判断redis对应数据是否小于0,小于0就重置为100,这个场景一般是取出来再判断,再存放进行,就至少存在2次IO,用lua脚…...
MySQL ON DUPLICATE KEY UPDATE影响行数
目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …...
uniapp小程序 slot中无法传递外部参数的解决方案
最近在封装一个List组件,外部传给我数据,我循环后将每个Item部分slot到外部,由调用者自己去写item布局,类似ElementUI、iView的Tabe列表。 List: <view v-if"list.length > 0" class"list-scroll__item&quo…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
