Elasticsearch-8.11.1 (2+1)HA(高可用)集群部署

news2025/1/21 12:23:12

目录

一、环境描述

二、安装 ES

2.1 下载Elasticsearch

2.2 解压Elasticsearch

2.3 创建es服务账号/密码

2.3 修改服务器配置

2.4 配置节点

2.4.1 配置说明

2.4.2 配置高可用集群

2.4.2.1 maser节点服务配置

2.4.2.2 node1 节点服务配置

2.4.2.3 node2 节点服务配置

2.4.2.3 node3 节点服务配置

2.4.2.3 node4 节点服务配置

2.4.3 服务启动

2.4.4 验证服务启动有没有成功

2.4.4.1 ps查看有没有es进程

2.4.4.2 访问服务

三、部署Kibana

3.1 下载Kibana

3.2 解压

3.3 配置Kibana

3.4  给账号密码做目录授权

3.5 启动服务

3.6 访问Kibana

四、安装Head 插件

4.1 下载Head插件

4.2 修改Gruntfile.js文件

4.3 修改ES配置文件

4.3 安装head 服务

4.4 启动服务

4.5 访问Head

五、ES集群安全

5.1 集群安全策略

5.1.1 版本支持

5.1.2 支持的策略

5.2 不同策略的实现

5.2.1 Minimal security(最低安全等级)配置

5.2.1.1 Minimal security配置步骤

5.2.1.1.1 启动Security

5.2.1.1.2 重启节点服务

5.2.1.1.2 创建用户密码

5.2.1.1.3 配置Kibana的账号信息

5.2.2 Basic security(基本安全等级)配置

5.2.2.1 适用范围和概念

5.2.2.2 配置步骤

5.2.2.2.1 配置文件 elasticsearch.yml

5.2.2.2.2 生成密钥文件

5.2.2.2.3 为节点颁发证书

5.2.2.2.4 把证书拷贝的每个节点

5.2.2.2.5 启动所有节点

5.2.2.2.6 设置集群密码

5.2.2.2.7 配置Kibana

5.2.3 基本安全+HTTPS

5.2.3.1 前置条件

5.2.3.2 配置步骤

5.2.3.2.1 保证每个节点的服务处于停止状态

5.2.3.2.2 生成证书签名文件

5.2.3.2.2.1 当询问您是否要生成 CSR 时,请输入 n

5.2.3.2.2.2 当询问您是否要使用现有 CA 时,输入 y

5.2.3.2.2.3 输入您的 CA 的路径

5.2.3.2.2.4 输入您的 CA 的密码

5.2.3.2.2.5 输入证书的到期值

5.2.3.2.2.6 当询问您是否要为每个节点生成一个证书时,输入 y

5.2.3.2.2.7 出现提示时,输入集群中第一个节点的名称

5.2.3.2.2.8 输入用于连接到您的第一个节点的所有主机名

5.2.3.2.2.9 输入客户端可用于连接到您的节点的 IP 地址

5.2.3.2.3 设置私钥密码

5.2.3.2.3.1 解压elasticsearch-ssl-http.zip文件

5.2.3.2.3.3 修改 elasticsearch.yml 文件

5.2.3.2.3.4 复制证书到config目录中

5.2.3.2.3.5 把私钥密码添加到 Elasticsearch 的安全设置中

5.2.3.3 启动节点服务

5.2.3.4 配置Kibana

5.2.3.4.1 拷贝证书到config下

5.2.3.4.2 修改Kibana配置


一、环境描述

系统环境描述:本教程基于CentOS 8.0版本虚拟机

es集群规划:

节点Master(主节点/候选节点)Master(紧选举)Data(数据节点)KibanaIP
master*192.168.31.215
node1*192.168.31.8
node2**192.168.31.9
node3*192.168.31.167
node4*192.168.31.154

软件版本:
Elasticsearch    8.11.1
kibana      8.11.1

二、安装 ES

2.1 下载Elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-linux-x86_64.tar.gz

2.2 解压Elasticsearch

tar -zxvf elasticsearch-8.11.1-linux-x86_64.tar.gz

mv  elasticsearch-8.11.1 /usr/local/

2.3 创建es服务账号/密码

#ES无法通过root账号启动服务
(elastic/xiaoning)
# 创建账号
useradd elastic

# 创建密码
passwd elastic

# 给账号密码做目录授权
chown -R elastic:elastic /usr/local/elasticsearch-8.11.1

2.3 修改服务器配置

vim  /etc/security/limits.conf

hard nofile 65536
soft nofile 65636
elastic soft memlock unlimited
elastic hard memlock unlimited

vim /etc/sysctl.conf

vm.max_map_count=262144
vm.swappiness=0
#重启
sysctl -p

ulimit -l unlimited

提示:以上操作,所有节点都需要操作

2.4 配置节点

2.4.1 配置说明

cluster.name:集群名称,节点根据集群名称确定是否是同一个集群。

node.name:节点名称,集群内唯一。

node.roles:[ data, master, voting_only ],node.roles配置项如果没有显式的配置,那么当前节点拥有所有角色(master、data、ingest、ml、remote_cluster_client、transform)。如果你放开了注释,或者手动显式添加了 node.roles配置项,那么当前节点仅拥有此配置项的中括号中显式配置的角色,没有配置的角色将被阉割。因此如果在不熟悉角色配置的情况下,不要轻易修改角色配置值, 切勿画蛇添足 。

network.host:节点对外提供服务的地址以及集群内通信的ip地址

bootstrap.memory_lock: Swapping对性能和节点稳定性非常不利,应该不惜一切代价避免。它可能导致GC持续几分钟而不是几毫秒,并且可能导致节点响应缓慢甚至与集群断开连接。在弹性分布式系统中,使用Swap还不如让操作系统杀死节点效果更好。可以通过设置 bootstrap.memory_lock: true 以防止任何 Elasticsearch 堆内存被换出。

http.port:对外提供服务的端口号

discovery.seed_hosts: 集群初始化的种子节点,可配置部分或全部候选节点,大型集群可通过嗅探器发现剩余节点,考试环境配置全部节点即可

cluster.initial_master_nodes:节点初始 active master节点, 必须是有master角色的节点,即必须是候选节点,但并不是必须配置所有候选节点。生产模式下启动新集群时,必须明确列出应在第一次选举中计算其选票的候选节点。第一次成功形成集群后,cluster.initial_master_nodes从每个节点的配置中删除设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。

2.4.2 配置高可用集群

2.4.2.1 maser节点服务配置
vim elasticsearch.yml

cluster.name: ning_cluster
node.name: ning_cluster_node-1
node.roles: [master]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.215
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.2 node1 节点服务配置
vim elasticsearch.yml

cluster.name: ning_cluster
node.name: ning_cluster_node-2
node.roles: [master]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.8
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.3 node2 节点服务配置
vim elasticsearch.yml

cluster.name: ning_cluster
node.name: ning_cluster_node-3
node.roles: [master,data,voting_only]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.9
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.3 node3 节点服务配置
vim elasticsearch.yml

cluster.name: ning_cluster
node.name: ning_cluster_node-4
node.roles: [data]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.167
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
2.4.2.3 node4 节点服务配置
vim elasticsearch.yml

cluster.name: ning_cluster
node.name: ning_cluster_node-5
node.roles: [data]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.154
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]

2.4.3 服务启动

#前台进程

./bin/elasticsearch

#后台启动 守护进程

./bin/elasticsearch -d

#推荐方式(保存进程号 不占用窗口,并且方便杀进程):

./bin/elasticsearch -d -p pid

2.4.4 验证服务启动有没有成功

2.4.4.1 ps查看有没有es进程
ps -ef|grep elastic
2.4.4.2 访问服务

直接浏览器输入:

http://192.168.31.8:9200/

出现以上内容则说明启动成功。

提示:所有节点都需要执行上述命令

三、部署Kibana

3.1 下载Kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-linux-x86_64.tar.gz

3.2 解压

tar -zxvf kibana-8.11.1-linux-x86_64.tar.gz

3.3 配置Kibana

server.port: 5601
server.host: "192.168.31.9"
elasticsearch.hosts: ["192.168.31.215:9200", "192.168.31.8:9200","192.168.31.9:9200", "192.168.31.167:9200","192.168.31.154:9200"]

3.4  给账号密码做目录授权

chown -R elastic:elastic /usr/local/kibana-8.11.1

3.5 启动服务

./bin/kibana

3.6 访问Kibana

浏览器直接访问:http://192.168.31.9:5601/

四、安装Head 插件

4.1 下载Head插件

https://github.com/mobz/elasticsearch-head

4.2 修改Gruntfile.js文件

#添加
hostname:'*',

4.3 修改ES配置文件

#ES配置文件中设置允许跨域
vim elasticsearch.yml

http.cors.enabled: true
http.cors.allow-origin: "*"

4.3 安装head 服务

进入 elasticsearch-head 解压目录,执行命令

npm install

4.4 启动服务

执行命令:

npm run start

4.5 访问Head

浏览器直接输入:http://localhost:9100

五、ES集群安全

5.1 集群安全策略

5.1.1 版本支持

不同版本对 Security 的支持不同,对于 ES 6.8 及之前版本,需要手动安装 x-pack,对于7.X以上版本 X-Pack 已经内置,所以不需要额外的操作。

5.1.2 支持的策略

不同环境对集群安全的策略等级要求不同,主要区别在于你是开发环境还是生产集群环境。ES提供了三个不同等级的安全策略:最低安全等级、基本安全等级、基本安全 + HTTPS
就实际而言,在处于 ES 学习 或者本地开发模式下,是可以关闭 Security 功能的,因为如果是以学习为目的,不存在所谓的数据安全问题,因为数据即便被删除也是没关系的。而如果在学习或开发模式下也开启安全策略,意味着你需要频繁的跟密码较劲,实属没必要。

5.2 不同策略的实现

5.2.1 Minimal security(最低安全等级)配置

5.2.1.1 Minimal security配置步骤
5.2.1.1.1 启动Security
vim vim elasticsearch.yml

xpack.security.enabled: true

5.2.1.1.2 重启节点服务
# kill -9 [pid]
./bin/elasticsearch -d -p pid

提示:单节点环境下,能启动成功,集群环境的安全策略最低要求配置成基本安全等级模式,所以这里是启动不了的,过不了集群的安全检查,会直接报错

5.2.1.1.2 创建用户密码
./bin/elasticsearch-setup-passwords interactive

提示:单节点环境下,可以按照这个步骤,集群环境下,需要完成Basic security(基本安全等级)配置后才能创建

5.2.1.1.3 配置Kibana的账号信息

提示:单节点环境下,可以按照这个步骤,集群环境下,需要完成Basic security(基本安全等级)配置后才能配置Kibana账号信息

5.2.2 Basic security(基本安全等级)配置

5.2.2.1 适用范围和概念

最低安全配置仅适用于单节点服务,而不符合集群的最低安全要求。如果集群有多个节点,那么您必须在节点之间配置 TLS。如果您不启用 TLS,无法启动生产集群。

传输层依赖双向 TLS 对节点进行加密和认证。正确应用 TLS 可确保恶意节点无法加入集群并与其他节点交换数据。虽然在 HTTP 层实现用户名和密码身份验证对于保护本地集群很有用,但节点之间的通信安全需要 TLS。

Transport 协议是 Elasticsearch 节点用于相互通信的协议的名称。此名称特定于 Elasticsearch,用于区分传输端口(默认 9300)和 HTTP 端口(默认 9200)。节点使用传输端口相互通信,REST 客户端使用 HTTP 端口与 Elasticsearch 通信。

5.2.2.2 配置步骤
5.2.2.2.1 配置文件 elasticsearch.yml
# 开启ssl访问请求头配置(head访问需要)
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
#配置SSL证书
xpack.security.transport.ssl.enabled: true

#设置验证模式为:certificate
xpack.security.transport.ssl.verification_mode: certificate

#设置证书路径
xpack.security.transport.ssl.key: certs/elastic-certificates.key
xpack.security.transport.ssl.certificate: certs/elastic-certificates.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
5.2.2.2.2 生成密钥文件

提示:

1、删除各个es节点$ELASTICSEARCH_HOME/config目录下的elasticsearch.keystore文件
2、清空各个es节点$ELASTICSEARCH_HOME/ 下的data和log目录

./bin/elasticsearch-certutil ca --pem --out ca.zip --days 36500 -s

5.2.2.2.3 为节点颁发证书
#解压ca.zip
unzip ca.zip

# 颁发证书
./bin/elasticsearch-certutil cert --ca-cert ca/ca.crt --ca-key ca/ca.key --pem --name elastic-certificates --out elastic-certificates.zip --days 36500 -s

5.2.2.2.4 把证书拷贝的每个节点

#每个节点的config文件夹下,新建一个certs目录

mkdir certs

#拷贝文件到节点的cert目录下

#解压证书文件
unzip elastic-certificates.zip
#拷贝到certs文件夹下
cp ca/* elastic-certificates/* config/certs

# 拷贝给其他机器
scp config/certs/* elastic@node1:/usr/local/elasticsearch-8.11.1/config/certs/

scp config/certs/* elastic@node2:/usr/local/elasticsearch-8.11.1/config/certs/

scp config/certs/* elastic@node3:/usr/local/elasticsearch-8.11.1/config/certs/

scp config/certs/* elastic@node4:/usr/local/elasticsearch-8.11.1/config/certs/
5.2.2.2.5 启动所有节点
5.2.2.2.6 设置集群密码
bin/elasticsearch-setup-passwords interactive

elastic xiaoning
apm_system xiaoning
kibana_system xiaoning
logstash_system xiaoning
beats_system xiaoning
remote_monitoring_user xiaoning

5.2.2.2.7 配置Kibana
# 配置账号密码
vim kibana.yml

elasticsearch.username: "kibana_system"
elasticsearch.password: "xiaoning"

5.2.3 基本安全+HTTPS

在生产环境中,如果没有基于HTTPS上启用 TLS,那么部分安全功能会无法使用,比如Token和API密钥。

官方文档参考:

Set up basic security for the Elastic Stack plus secured HTTPS traffic | Elasticsearch Guide [8.11] | Elastic

5.2.3.1 前置条件

启用 HTTPS 必须要配置集群 Security,即基础集群安全策略。

5.2.3.2 配置步骤
5.2.3.2.1 保证每个节点的服务处于停止状态
5.2.3.2.2 生成证书签名文件
./bin/elasticsearch-certutil http

提示:
此命令会生成一个 .zip文件,其中包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹都包含一个 README.txt 解释如何使用这些文件。

5.2.3.2.2.1 当询问您是否要生成 CSR 时,请输入 n

5.2.3.2.2.2 当询问您是否要使用现有 CA 时,输入 y

5.2.3.2.2.3 输入您的 CA 的路径

elastic-stack-ca.p12这是您为集群生成 的文件的绝对路径

5.2.3.2.2.4 输入您的 CA 的密码
5.2.3.2.2.5 输入证书的到期值

您可以输入年、月或日的有效期。例如,输入 90D90 天.

5.2.3.2.2.6 当询问您是否要为每个节点生成一个证书时,输入 y

每个证书都有自己的私钥,并针对特定的主机名或 IP 地址颁发.

5.2.3.2.2.7 出现提示时,输入集群中第一个节点的名称

使用生成节点证书时使用的相同节点名称.

5.2.3.2.2.8 输入用于连接到您的第一个节点的所有主机名

这些主机名将作为 DNS 名称添加到证书的主题备用名称 (SAN) 字段中。
列出用于通过 HTTPS 连接到集群的每个主机名和变体

5.2.3.2.2.9 输入客户端可用于连接到您的节点的 IP 地址

到此,证书生成完成,可以看到生成的证书名称

5.2.3.2.3 设置私钥密码
5.2.3.2.3.1 解压elasticsearch-ssl-http.zip文件
unzip elasticsearch-ssl-http.zip

5.2.3.2.3.3 修改 elasticsearch.yml 文件
#启用 HTTPS
xpack.security.http.ssl.enabled: true
#指定 http.p12 安全证书的位置
xpack.security.http.ssl.keystore.path: http.p12
5.2.3.2.3.4 复制证书到config目录中
#拷贝到本机
cp elasticsearch/http.p12 config/
# 拷贝给其他机器

scp elasticsearch/http.p12 elastic@node1:/usr/local/elasticsearch-8.11.1/config/

scp elasticsearch/http.p12 elastic@node2:/usr/local/elasticsearch-8.11.1/config/

scp elasticsearch/http.p12 elastic@node3:/usr/local/elasticsearch-8.11.1/config/

scp elasticsearch/http.p12 elastic@node4:/usr/local/elasticsearch-8.11.1/config/
5.2.3.2.3.5 把私钥密码添加到 Elasticsearch 的安全设置中
#每个节点都需要执行,每个节点的密码可以设置的并不一样,生产环境可以做好密码记录,这里我为了方便,就设置一样了
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
输入密码:xiaoning
5.2.3.3 启动节点服务
5.2.3.4 配置Kibana
5.2.3.4.1 拷贝证书到config下
scp kibana/elasticsearch-ca.pem elastic@node2:/usr/local/kibana-8.11.1/config
5.2.3.4.2 修改Kibana配置
vim kibana.yml

elasticsearch.ssl.certificateAuthorities:[config/elasticsearch-ca.pem]

elasticsearch.hosts: ["https://192.168.31.215:9200", "https://192.168.31.8:9200","https://192.168.31.9:9200", "https://192.168.31.167:9200","https://192.168.31.154:9200"]

以上之后,kibana 与Elasticsearch之间的SSL加密通道传输就完成了。

好了,本次分享就到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1347735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS4.0系统性深入开发10卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互,当前支持router、message和call三种类型的事件,仅在卡片中可以调用。 接口定义:postCardAction(component: Object, action: Object): void 接口…

年度总结 | 回味2023不平凡的一年

目录 前言1. 平台成就2. 自我提升3. Bug连连4. 个人展望 前言 每年CSDN的总结都不能落下,回顾去年:年度总结 | 回味2022不平凡的一年,在回忆今年,展望下年 1. 平台成就 平台造就我(我也造就平台哈哈) 每…

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发,建立了全流程可使用开源模…

UE4运用C++和框架开发坦克大战教程笔记(十三)(第40~42集)

UE4运用C和框架开发坦克大战教程笔记(十三)(第40~42集) 40. 多按键绑定41. 自动生成对象42. 资源模块数据结构测试自动生成对象按资源类型生成对象 40. 多按键绑定 上节课实现了按键绑定系统的 4 种基础绑定,这节课来…

探索 Vue 异步组件的世界:解锁高效开发的秘密(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

008、所有权

所有权可以说是Rust中最为独特的一个功能了。正是所有权概念和相关工具的引入,Rust才能够在没有垃圾回收机制的前提下保障内存安全。 因此,正确地了解所有权概念及其在Rust中的实现方式,对于所有Rust开发者来讲都是十分重要的。在本文中&…

原型链补充

1.什么是原型对象 函数的独有属性,他用prototype来表示,可以在函数的prototype上挂载一些公用的属性和方法,供实例化对象来访问。 2.__proto__属性 这个属性每一个对象都有,实例化对象就是通过这个属性,来访问原型对象上的属性和方法的。 3.三者之间的关系 1.在构造函数的原型…

Linux驱动学习—pinctl和gpio子系统

1、pinctl和gpio子系统&#xff08;一&#xff09; 1.1pinctrl 子系统主要工作内容 <1>获取设备树中 pin 信息&#xff0c;管理系统中所有的可以控制的 pin&#xff0c; 在系统初始化的时候&#xff0c; 枚举所有可以控制的 pin&#xff0c; 并标识这些 pin。 <2>…

Unity坦克大战开发全流程——结束场景——失败界面

结束场景——失败界面 在玩家类中重写死亡函数 在beginPanel中锁定鼠标

数据结构【线性表篇】(三)

数据结构【线性表篇】(三&#xff09; 文章目录 数据结构【线性表篇】(三&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了&#xff1f; > 用较为“官方…

U4_3 语法分析-自底向上分析-LR0/LR1/SLR分析

文章目录 一、LR分析法1、概念2、流程3、LR分析器结构及分析表构造1&#xff09;结构2&#xff09;一些概念 二、LR(0)分析法1、流程2、分析动作1&#xff09;移近2&#xff09;归约(reduce) 3、总结1&#xff09;LR分析器2&#xff09;构造DFA3&#xff09;构造LR(0)的方法(三…

Redis(上)

1、redis Redis是一个完全开源免费的高性能&#xff08;NOSQL&#xff09;的key-value数据库。它遵守BSD协议&#xff0c;使用ANSI C语言编写&#xff0c;并支持网络和持久化。Redis拥有极高的性能&#xff0c;每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数…

nodejs+vue+微信小程序+python+PHP的医疗报销系统的设计与实现-计算机毕业设计推荐

接着进行系统的需求分析、功能设计、数据库设计&#xff0c;最后进行编码实现。医疗报销系统主要包括了前台和后台信息管理两个部分&#xff0c;前台实现信息浏览、报销申请、意见反馈、个人信息管理等&#xff0c;后台实现新闻资讯管理、报销审核、报销流程管理、系统信息管理…

12.26

key_it.c #include"key_it.h" void led_init() {// 设置GPIOE/GPIOF时钟使能RCC->MP_AHB4ENSETR | (0x3 << 4);// 设置PE10/PE8/PF10为输出模式GPIOE->MODER & (~(0x3 << 20));GPIOE->MODER | (0x1 << 20);GPIOE->MODER & (~…

WorkPlus为企业打造私有化部署IM解决方案

在移动数字化时代&#xff0c;企业面临着如何全面掌控业务和生态的挑战。企业微信、钉钉、飞书、Teams等应用虽然提供了部分解决方案&#xff0c;但无法满足企业的私有化部署需求。此时&#xff0c;WorkPlus作为安全专属的移动数字化平台&#xff0c;被誉为移动应用的“航空母舰…

docker里面不能使用vim的解决办法

docker里面不能使用vim的解决办法 目录 docker里面不能使用vim的解决办法 1.在使用时会出现 2.在使用这些都不能解决的时候考虑 3.测试是否可用 1.在使用时会出现 bash: vim: command not found 出现这种错误时首先考虑使用 apt-get update 然后在用 apt-get install …

12个Python开发者必知必会的魔术方法

更多Python学习内容&#xff1a;ipengtao.com Python中的魔术方法&#xff08;Magic Methods&#xff09;是一组特殊的方法&#xff0c;它们以双下划线开头和结尾&#xff0c;例如__init__和__str__。这些方法可以定义自定义类的行为&#xff0c;使对象可以与Python的内置功能&…

固定本机在局域网中的 IP 地址

说明&#xff1a;以将 IP 地址固定为 192.168.1.107 为例 Step1、打开终端&#xff0c;输入以下命令查看网络信息&#xff1a; ipconfig -all 记住子网掩码、默认网关、DNS 服务器&#xff08;首选和备用&#xff09;信息&#xff0c;后面要用&#xff1a; Step2、进入 “控制…

AI产品经理 - 如何做一款软硬协同AI产品

【背景】从0做一款软硬协同的AI产品&#xff0c;以智能医药保温箱 1.以智能医药保温箱 2.调研定义市场方向 地点&#xff1a;医药、实验室 场景&#xff1a;长宽高/装箱/运输/实验室 3.需求挖掘 4.如何进行软硬件AI产品工作 软硬件产品设计&#xff1a;功能/硬件外观设计、…

nodejs+vue+微信小程序+python+PHP技术的健康信息网站-计算机毕业设计推荐

3.2 功能性需求分析 健康信息网站为会员提供健康信息服务的系统&#xff0c;管理员通过登录系统&#xff0c;管理会员信息、健康咨询、健康知识、健康档案、健康养生、健康信息的搜索、健康资讯等。需要学习的会员浏览健康信息网站&#xff0c;查询所有的健康信息&#xff0c;可…