13.云原生之常用研发中间件部署

云原生专栏大纲

文章目录

    • mysql主从集群部署
    • mysql高可用集群
      • 高可用互为主从架构
        • 互为主从架构
        • 如何实现
        • 主主复制中若是两台master上同时出现写操作可能会出现的问题
        • 该架构是否存在问题?
      • heml部署mysql高可用集群
    • nacos集群部署
      • 官网文档部署nacos
      • helm部署nacos
    • redis集群部署
      • 主从哨兵部署
      • redis cluster部署
      • 安装reids客户端redisinsight
    • zk集群部署
    • kafka集群部署
    • kafka可视化控制台
    • es集群部署
    • rocketmq集群部署
    • minio集群部署
    • SkyWalking部署
      • 使用 Docker Helm 存储库 (>= 4.3.0) 安装已发布的版本
      • 使用 master 分支安装 SkyWalking 的开发版本
    • MongoDB部署

该章节主要讲述helm安装研发常用环境,目前很多厂商都提供组件的helm安装支持,使用helm能大大降低部署难度。

mysql主从集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索mysql部署,配置参考
  3. 查看部署情况

image.pngimage.png
image.png

mysql高可用集群

高可用互为主从架构

互为主从架构

mysql基于主从复制可以实现互为主从,若是两个mysql都对外提供写服务可能出现数据冲突问题。为避免写冲突,master只会有一个对外提供写服务,采用keepalived+mysql实现互为主从架构。

互为主从的架构通常称为主主复制(Master-Master Replication)或双主复制(Dual-Master Replication)。在这种架构中,两个或多个 MySQL 实例充当主服务器,并且彼此互为对方的从服务器。
以下是主主复制的基本工作原理:

  1. 双向复制:每个主服务器都可以接收写操作,并将这些写操作记录到自己的二进制日志中。同时,它也会将二进制日志事件发送给其他主服务器,以便它们可以复制这些写操作到自己的数据库中。
  2. 数据同步:每个主服务器都会将其他主服务器发送的二进制日志事件应用到自己的数据库中,从而保持数据的同步。这样,每个主服务器都包含了完整的数据集,并且可以独立地处理读和写操作。
  3. 冲突解决:在主主复制中,由于每个主服务器都可以接收写操作,可能会发生冲突。例如,如果两个主服务器同时接收到对同一行数据的更新操作,那么就会发生冲突。解决冲突的方法可以通过配置冲突检测和解决策略,例如使用时间戳或自定义逻辑来确定哪个写操作应该优先。

主主复制的优点包括:

  • 冗余备份:每个主服务器都具有完整的数据集,可以作为其他主服务器的冗余备份,提供高可用性和数据冗余。
  • 读写负载均衡:由于每个主服务器都可以处理读和写操作,可以将读操作分发到不同的主服务器,实现读写负载均衡,提高系统的性能和扩展性。
  • 故障切换:如果一个主服务器发生故障,可以将应用程序的写操作切换到其他主服务器,从而实现故障切换,减少停机时间。

但是,主主复制也有一些注意事项和限制:

  • 冲突处理:需要仔细处理冲突,确保数据的一致性。冲突的解决策略需要根据具体的应用程序需求进行配置。
  • 网络延迟:由于主服务器之间需要相互复制数据,网络延迟可能会对性能产生影响。
  • 数据一致性:在主主复制架构中,需要确保应用程序的写操作只发送到其中一个主服务器,以避免数据不一致的情况发生。

总的来说,主主复制架构提供了更高的可用性、冗余备份和读写负载均衡。但是,它也需要仔细的配置和管理,以确保数据的一致性和冲突的解决。

如何实现

在Kubernetes(K8s)中实现Keepalived和MySQL的互为主从架构可以提供高可用性和故障转移的能力。下面是一个基本的步骤概述:

  1. 创建Kubernetes集群:首先,您需要创建一个Kubernetes集群,确保有足够的节点和资源来部署Keepalived和MySQL实例。
  2. 部署Keepalived:使用Kubernetes的Deployment或StatefulSet对象,部署Keepalived实例。Keepalived是一个开源的高可用性解决方案,可以用于实现虚拟IP(VIP)的故障转移和健康检查。您可以配置两个Keepalived实例,一个作为主节点,另一个作为备份节点。
  3. 配置Keepalived:在Keepalived配置中,指定VIP和健康检查的目标。Keepalived将定期检查MySQL实例的健康状态,并在主节点故障时将VIP转移到备份节点。
  4. 部署MySQL实例:使用Kubernetes的Deployment或StatefulSet对象,部署两个MySQL实例,一个作为主服务器,另一个作为从服务器。在配置MySQL实例时,确保主服务器和从服务器的复制配置正确,并且它们能够连接到正确的数据库。
  5. 配置MySQL主从复制:在MySQL实例中,配置主服务器和从服务器之间的主从复制关系。确保主服务器和从服务器之间的网络连接正常,并且复制配置正确。这样,主服务器上的写操作将被异步地复制到从服务器上,实现数据的复制和同步。
  6. 测试和监控:完成部署后,进行测试以确保Keepalived和MySQL实例的故障转移和复制功能正常工作。监控Keepalived和MySQL实例的健康状态,并及时处理任何故障或问题。
主主复制中若是两台master上同时出现写操作可能会出现的问题

在主主复制中,如果两台主服务器同时接收到对同一行数据的写操作,可能会出现以下问题:

  1. 冲突数据:由于两台主服务器同时接收到写操作,它们可能会在同一行数据上进行不同的修改,导致数据冲突。这可能会导致数据不一致的情况发生,因为每个主服务器都会复制自己接收到的写操作到其他主服务器。
  2. 数据丢失:如果两台主服务器同时进行写操作,而没有进行冲突检测和解决策略,可能会导致其中一台主服务器的写操作被覆盖或丢失。这可能会导致数据的不完整性或丢失。
  3. 数据一致性问题:由于两台主服务器之间的数据复制是异步的,复制的延迟可能导致数据在两台主服务器之间不一致。如果一个主服务器上的写操作在另一个主服务器上复制之前被读取,可能会导致读取到不一致的数据。

为了解决这些问题,可以采取以下策略:

  1. 冲突检测和解决:在主主复制中,需要配置冲突检测和解决策略。这可以通过使用时间戳、自定义逻辑或其他冲突解决算法来确定哪个写操作应该优先。例如,可以使用时间戳来判断哪个写操作更早,然后应用该操作并忽略其他写操作。
  2. 分区数据:可以将数据按照一定的规则分区,确保同一行数据只在一个主服务器上进行写操作。例如,可以根据数据的某个属性或哈希值将数据分配给不同的主服务器,从而避免冲突。
  3. 应用程序层面的冲突解决:在应用程序中处理冲突,可以通过在应用程序层面实现乐观锁或悲观锁来避免数据冲突。例如,使用乐观锁机制可以在写操作之前检查数据的版本,并在写操作时进行冲突检测和解决。
该架构是否存在问题?

在Keepalived和MySQL互为主从架构中,当主服务器(Master)宕机并切换到备份服务器(Slave)时,可能会发生事务丢失的问题。这是因为MySQL的主从复制是异步的,主服务器上的事务在复制到从服务器之前可能会丢失。
以下是一些可能导致事务丢失的情况:

  1. 主服务器宕机期间的未提交事务:如果主服务器在宕机之前有未提交的事务,这些事务将无法被复制到备份服务器,因此会丢失。
  2. 主从复制延迟:即使主服务器上的事务已经提交,由于网络延迟或复制进程的延迟,从服务器可能无法立即接收到这些事务的复制。在这段延迟期间,如果主服务器宕机,那么这些已提交但尚未复制到从服务器的事务也会丢失。

为了减少事务丢失的风险,可以采取以下措施:

  1. 使用持久化存储引擎:选择适当的MySQL存储引擎,如InnoDB,它支持事务和持久化存储。这样,即使主服务器宕机,已提交的事务也会在数据库重新启动后恢复。
  2. 配置同步复制:将MySQL的主从复制配置为同步复制模式,这意味着主服务器上的事务必须在复制到从服务器之前进行确认。这样可以确保在主服务器宕机之前,已提交的事务已经复制到从服务器。
  3. 使用半同步复制:MySQL提供了半同步复制模式,它在主服务器上接收到事务后会等待至少一个备份服务器确认已接收该事务,然后才会提交。这可以进一步减少事务丢失的风险。
  4. 定期监控复制状态:实施监控和警报系统来监测主从复制的状态。如果出现复制延迟或错误,可以及时采取措施来解决问题,减少事务丢失的可能性。

需要注意的是,即使采取了上述措施,完全消除事务丢失的风险是很困难的。在高可用性和数据一致性之间需要进行权衡,根据业务需求和数据的重要性来选择适当的复制策略和措施。此外,定期备份数据并测试恢复过程也是重要的,以便在发生事务丢失或其他故障时能够快速恢复数据。

heml部署mysql高可用集群

RadonDB MySQL 是基于 MySQL 的开源、云原生、高可用集群解决方案。通过使用 Raft 协议,RadonDB MySQL 可以快速进行故障转移,且不会丢失任何事务。

参考:
在 Kubernetes 上部署 RadonDB MySQL 集群 | RadonDB 开源社区
https://github.com/radondb/radondb-mysql-kubernetes/blob/main/README_zh.md
在 KubeSphere 上部署 RadonDB MySQL 集群

kubesphere应用商店mysql兼容高可用:
image.png
官网部署失败,参考下述文档部署成功
容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群_helm radondb-CSDN博客
image.png

nacos集群部署

官网文档部署nacos

官方部署文档:Kubernetes Nacos 官网部署文档

  1. 下载官网项目
git clone https://github.com/nacos-group/nacos-k8s.git
  1. 快速部署
./quick-startup.sh# 脚本内容如下:
# 小编修改了部署namespace为nacos,数据持久化等可查看下载项目文件进行修改
echo "mysql mysql startup"
kubectl create -f ./deploy/mysql/mysql-local.yaml -n nacosecho "nacos quick startup"
kubectl create -f ./deploy/nacos/nacos-quick-start.yaml -n nacos
  1. 查看部署情况

image.png
image.png

helm部署nacos

  1. 添加应用仓库

image.png

https://ygqygq2.github.io/charts
https://charts.kubegems.io/kubegemsapp
  1. 进入项目空间,选择应用仓库

image.pngimage.png

  1. 在应用仓库中搜索nacos,点击nacos

image.png

  1. 选择nacos版本,点击下一步

image.png

  1. 修改values.yaml
mysql:enabled: true # 是否启用内部mysql,false使用外部需配置externalexternal:mysqlMasterHost: "mysql_master_host"mysqlDatabase: "nacos"mysqlMasterPort: "3306"mysqlMasterUser: "nacos"mysqlMasterPassword: "nacos"mysqlSlaveHost: "mysql_slave_host"mysqlSlavePort: "3306"architecture: replicationauth: #  修改nacosrootPassword: "nacos"database: "nacos"username: "nacos"password: "nacos"replicationUser: "replicator"replicationPassword: "replicator"
  1. 查看部署情况

image.png
image.png

  1. 服务暴露

image.png

  1. 访问测试

image.png

redis集群部署

主从哨兵部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索redis部署
  3. values.yaml配置修改,配置参考,常用配置如下:
配置项描述
architectureRedis架构。允许的值:standalone或replicationreplication
auth.enabled启用密码身份验证true
auth.sentinel在哨兵上也启用密码身份验证true
auth.passwordRedis密码“”
master.count
master.count要部署的 Redis 主实例数(实验性,需要额外配置)1
replica.replicaCount要部署的 Redis 副本数3
replica.configurationRedis副本节点的配置“”
sentinel.enabled在 Redis Pod 上使用 Redis Sentinel。false

可视化修改配置,可在右上角点击编辑YAML切换:
image.png
image.png
image.png
image.png

  1. 部署情况

image.png
image.png

redis cluster部署

Helm(bitnami)部署zookeeper和kafka集群_helm bitnami-CSDN博客

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索redis-cluster
  3. values.yaml配置修改,配置参考,常用配置如下:
cluster.nodes主节点数应始终为 >= 3,否则集群创建将失败6
cluster.replicas集群中每个主节点的副本数1
cluster.externalAccess.enabled启用对 Redis 的访问false
metrics.enabled启动边车 prometheus 导出器false
  1. helm方式部署
# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 安装
helm install -n middleware redis-cluster bitnami/redis-cluster
# 查看密码
kubectl get secret --namespace "middleware" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d
# 自定义values.yaml,https://github.com/bitnami/charts/blob/main/bitnami/redis-cluster/values.yaml# 使用自定义values.yaml更新已安装redis-cluster
helm upgrade -n middleware -f values.yaml redis-cluster


参考:

在 K8S 中快速部署 Redis Cluster & Redisinsight
https://www.cnblogs.com/hacker-linner/p/15839374.html
Helm 安装 bitnami/redis 集群模式

安装reids客户端redisinsight

镜像:redislabs/redisinsight:1.9.0
容器内部数据路径:/db
使用ks可视化方式安装,不过多介绍
image.png
image.png

zk集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami

  2. 搜索zookeeper部署

  3. values.yaml配置修改,配置参考,常用配置如下:
    | 名字 | 描述 | 值 |
    | — | — | — |
    | replicaCount | ZooKeeper 节点数 | 1 |
    | auth.client.enabled | 启用 ZooKeeper 客户端-服务器身份验证。它使用 SASL/Digest-MD5 | false |

  4. 查看部署情况

image.pngimage.png

kafka集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索kafka部署
  3. values.yaml配置修改,常用配置如下,其他参考配置参考
  4. helm命令
helm install kafka bitnami/kafka \--namespace kafka --create-namespace \--set global.storageClass=<storageClass-name> \--set kubeVersion=<theKubeVersion> \--set image.tag=3.1.0-debian-10-r22 \--set replicaCount=3 \--set service.type=ClusterIP \--set externalAccess.enabled=true \--set externalAccess.service.type=LoadBalancer \--set externalAccess.service.ports.external=9094 \--set externalAccess.autoDiscovery.enabled=true \--set serviceAccount.create=true \--set rbac.create=true \--set persistence.enabled=true \--set logPersistence.enabled=true \--set metrics.kafka.enabled=false \--set zookeeper.enabled=true \--set zookeeper.persistence.enabled=true \--wait
  • –namespace kafka --create-namespace: 安装在 kafka namespace, 如果没有该 ns 就创建;
  • global.storageClass= 使用指定的 storageclass
  • kubeVersion= 让 bitnami/kafka helm 判断是否满足版本需求,不满足就无法创建
  • image.tag=3.1.0-debian-10-r22: 20220219 的最新镜像,使用完整的名字保证尽量减少从互联网 pull 镜像;
  • replicaCount=3: kafka 副本数为 3
  • service.type=ClusterIP : 创建 kafka service, 用于 k8s 集群内部,所以 ClusterIP 就可以
  • –set externalAccess.enabled=true --set externalAccess.service.type=LoadBalancer --set externalAccess.service.ports.external=9094 --set externalAccess.autoDiscovery.enabled=true --set serviceAccount.create=true --set rbac.create=true 创建用于 k8s 集群外访问的 kafka-<0|1|2>-external 服务 (因为前面 kafka 副本数为 3)
  • persistence.enabled=true: Kafka 数据持久化,容器中的目录为 /bitnami/kafka
  • logPersistence.enabled=true: Kafka 日志持久化,容器中的目录为 /opt/bitnami/kafka/logs
  • metrics.kafka.enabled=false 不启用 kafka 的监控 (Kafka 监控收集数据是通过 kafka-exporter 实现的)
  • zookeeper.enabled=true: 安装 kafka 需要先安装 zookeeper
  • zookeeper.persistence.enabled=true: Zookeeper 日志持久化,容器中的目录为:/bitnami/zookeeper
  • –wait: helm 命令会一直等待创建的结果
  1. Kafka 测试验证

创建kafka-client pod:

kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.1.0-debian-10-r22 --namespace kafka --command -- sleep infinity

进入到 kafka-client 中,运行如下命令测试:

kafka-console-producer.sh  --broker-list kafka-0.kafka-headless.kafka.svc.cluster.local:9092  --topic test
kafka-console-consumer.sh --bootstrap-server kafka-0.kafka-headless.kafka.svc.cluster.local:9092  --topic test --from-beginningkafka-console-producer.sh  --broker-list 10.109.205.245:9094  --topic test
kafka-console-consumer.sh --bootstrap-server 10.109.205.245:9094  --topic test --from-beginning

kafka可视化控制台

组件描述
Know Streaming专注于Kafka运维管控、监控告警、资源治理、多活容灾等核心场景。
Know Streaming github | Know Streaming官网
Kafka ManagerKafka Manager 是 Yahoo 开源的 Kafka 集群管理工具。它提供了一个直观的 Web 界面,用于监控和管理 Kafka 集群。Kafka Manager 可以显示集群的整体状态、主题和分区的详细信息,以及消费者组的偏移量等。您可以使用 Kafka Manager 进行主题和分区的管理、消费者组的监控和管理,以及执行一些集群维护任务。Kafka Manager官网
KafdropKafdrop 是一个开源的 Kafka 可视化工具,提供了一个简单易用的 Web 界面来监控 Kafka 集群。Kafdrop 可以显示 Kafka 集群中的主题、分区和消费者组的信息,并提供了实时的消息流量监控。它还支持查看消息的详细内容和偏移量的管理。Kafdrop官网
Kafka MapKafka Map 是一个开源的 Kafka 可视化工具,它提供了一个交互式的 Web 界面,用于可视化 Kafka 主题和分区之间的消息流。Kafka Map 使用图形化的方式展示了消息在不同分区之间的流动情况,帮助用户更好地理解和分析消息的传输路径。kafka-map官网

从功能的专业程度建议使用Know Streaming,关注消息分区流向建议kafka-map,轻量级的 Kafka 可视化工具建议Kafdrop

es集群部署

参考

Download Elasticsearch
Elasticsearch支持哪些插件_检索分析服务 Elasticsearch版(ES)-阿里云帮助中心
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群-腾讯云开发者社区-腾讯云

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索elasticsearch部署
  3. values.yaml配置修改,配置参考

image.png

制作安装ik分词器的es可使用上述截图中镜像作为基础镜像(推荐),也可使用plugins参数初始化安装

image.png

# 查看elasticsearch安装位置
which elasticsearch# 查看当前已安装的插件
elasticsearch-plugin list# 安装插件
elasticsearch-plugin install {插件名称}# ik分词器地址https://github.com/medcl/elasticsearch-analysis-ik/releases/
# elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.12.0/elasticsearch-analysis-ik-8.12.0.zip

在 Elasticsearch 集群中,不同角色承担着不同的职责和功能。下面是关于 Elasticsearch 集群中各个角色的详细介绍:

  1. Coordinating(协调节点)角色:
    • 职责:协调节点是集群中的请求入口点,它接收来自客户端的请求并将其转发到适当的节点。它不存储数据,主要用于处理搜索请求和聚合操作。
    • 功能:
      • 路由请求:协调节点根据请求的内容将其路由到正确的数据节点,以提高集群的性能和扩展性。
      • 整合结果:协调节点将从数据节点接收到的结果进行汇总和整合,然后将结果返回给客户端。
  2. Data(数据节点)角色:
    • 职责:数据节点存储和管理实际的索引数据。
    • 功能:
      • 数据存储:数据节点负责存储索引数据,并提供对数据的增删改查操作。
      • 数据分片:数据节点将索引数据分成多个分片,每个分片可以分布在不同的节点上,以实现数据的分布式存储和处理。
      • 数据复制:数据节点可以复制数据分片,以提供高可用性和故障容错性。
  3. Ingest(数据预处理节点)角色:
    • 职责:Ingest 节点用于处理数据的预处理和转换,以便在索引之前进行必要的操作。
    • 功能:
      • 数据预处理:Ingest 节点可以执行各种数据的提取、转换和加载(ETL)操作,例如数据过滤、转换、标准化等。
      • 数据修改:Ingest 节点可以在数据进入索引之前对其进行修改和处理,以满足特定的需求和要求。
  4. Master(主节点)角色:
    • 职责:主节点管理集群的整体状态和配置。
    • 功能:
      • 集群管理:主节点负责协调集群中的各个节点,执行集群范围的操作,例如创建和删除索引、添加和删除节点等。
      • 元数据维护:主节点维护集群的元数据,包括索引的映射、分片分配、节点状态等。
      • 集群稳定性:主节点确保集群的稳定性和一致性,协调节点的选举和故障检测等操作由主节点负责。

这些角色在 Elasticsearch 集群中相互协作,共同构建一个高性能、可扩展和可靠的分布式搜索和分析平台。需要注意的是,一个节点可以同时承担多个角色,具体取决于集群的规模和配置。

rocketmq集群部署

参考:Helm 部署 RocketMQ-腾讯云开发者社区-腾讯云
https://github.com/itboon/rocketmq-helm

## 部署高可用集群,MasterSlave
## 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点
helm upgrade --install rocketmq \--namespace rocketmq-demo \--create-namespace \--set broker.size.master="3" \--set broker.size.replica="1" \--set broker.master.jvmMemory="-Xms2g -Xmx2g" \--set broker.master.resources.requests.memory="4Gi" \--set nameserver.replicaCount="3" \--set dashboard.enabled="true" \--set dashboard.ingress.enabled="true" \--set dashboard.ingress.hosts[0].host="rocketmq-ha.example.com" \rocketmq-repo/rocketmq

image.png
image.png

minio集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索kafka部署
  3. values.yaml配置修改,配置参考,常用配置如下:
  4. helm命令

SkyWalking部署

参考:

https://github.com/apache/skywalking-helm
k8s 部署 skywalking 并将 pod 应用接入链路追踪 - 掘金
https://www.cnblogs.com/lina-2159/p/16190984.html

使用 Docker Helm 存储库 (>= 4.3.0) 安装已发布的版本

helm install "skywalking" \oci://registry-1.docker.io/apache/skywalking-helm \--version "4.3.0" \-n "skywalking" \--set oap.image.tag=9.2.0 \--set oap.storageType=elasticsearch \--set ui.image.tag=9.2.0

image.png
image.png
image.png

使用 master 分支安装 SkyWalking 的开发版本

git clone https://github.com/apache/skywalking-kubernetescd skywalking-kubernetes/chart
helm repo add elastic https://helm.elastic.co
helm dep up skywalking

image.png

# 安装
helm install "skywalking" ./skywalking -n "skywalking" -f ./skywalking/values-my-es.yaml# 卸载
helm uninstall skywalking -n skywalking

修改values-my-es.yaml配置是否使用外部es

elasticsearch:enabled: false # 由于使用 外部的 es,所以这里需要设置为 false,因为设置为 true 会在 k8s 中部署 esconfig:               # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is falsehost: your.elasticsearch.host.or.ipport:http: 9200user: "xxx"         # [optional]password: "xxx"     # [optional]

MongoDB部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索kafka部署
  3. values.yaml配置修改,配置参考,常用配置如下:
  4. helm命令

helm 安装 MongoDB 集群

helm pull bitnami/mongodb
tar -xzvf mongodb-14.10.1.tgz
helm -n mongodb install mongodb ./mongodb

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov9 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署

特别说明&#xff1a;参考官方开源的yolov9代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 之前写过yolov8检测、分割、关键点模型的部署的多篇博文&#xff0c;y…

Mysql 高可用解决方案

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 3.主库配置 3.1 编辑MySQL配…

读《Shape-Guided: Shape-Guided Dual-Memory Learning for 3D Anomaly Detection》

Chu Y M, Chieh L, Hsieh T I, et al. Shape-Guided Dual-Memory Learning for 3D Anomaly Detection[J]. 2023.&#xff08;为毛paperwithcode上面曾经的榜一引用却只有1&#xff09; 摘要 专家学习 无监督 第一个专家&#xff1a;局部几何&#xff0c;距离建模 第二个专家&…

postman访问k8s api

第一种方式&#xff1a; kubectl -n kubesphere-system get sa kubesphere -oyaml apiVersion: v1 kind: ServiceAccount metadata:annotations:meta.helm.sh/release-name: ks-coremeta.helm.sh/release-namespace: kubesphere-systemcreationTimestamp: "2023-07-24T07…

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中&#xff0c;修改应用程序的包名&#xff08;也称作Application ID&#xff09;涉及几个步骤&#xff0c;因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作&#xff1a; 1.Android Flutter工程中全局搜索替换包名 …

在CentOS上使用Docker搭建Halo博客并实现远程访问的详细指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Docker部署Halo1.1 检查Docker版本1.2 在Docker中部署Halo 二. Linux安装Cpol…

水库安全监测方案(福建地区水库安全监测案例分享)

我司星创易联最近在福建省受到了一个水库安全监测系统项目的委托。该水库位于福建中部山区,作为该地区的重要防洪与供水工程,对下游数十万人的生活产生重大影响。但是因为水库附近地质情况复杂,水库大坝在多次洪水冲击下出现一定病害,亟须全面加强对水库大坝安全状况的监测,以确…

Ethernet/IP转Modbus TCP网关

产品功能 1 YC-EIP-TCP工业级EtherNet/IP 网关 2 Modbus TCP 转 EtherNet/IP 3支持ModBus主从站 4 即插即用 无需编程 轻松组态 ,即实现数据交互 5导轨安装 支持提供EDS文件 6 EtherNET/IP与ModBus互转数据透明传输可接入PLC组态 支持CodeSys/支持欧姆龙PLC 支持罗克韦尔(AB) 典…

国辰智企MES系统优化企业管理,让生产制造更高效

在制造业的舞台上&#xff0c;MES制造执行管理系统如同一位出色的导演&#xff0c;将生产过程中的各个场景巧妙地连接起来&#xff0c;演绎出一场场精彩的制造盛宴。让我们一同走进MES在制造业的具体应用场景&#xff0c;感受它带来的变革与创新。 在生产计划与调度的场景中&am…

一文读懂什么是 OCR 识别

在数字化时代&#xff0c;信息处理和数据管理是企业运营的重要环节。然而&#xff0c;手工输入信息存在效率低和准确性低的问题&#xff0c;严重影响了企业的工作流程和决策过程。因此&#xff0c;OCR&#xff08;Optical Character Recognition&#xff09;识别技术的应用变得…

【设计模式】5种创建型模式详解

创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性。 常用的有&#xff1a;单例模式、工厂模式&#xff08;工厂方法和抽象工厂&#xff09;、建造者模式。不常用的有&#xff1a;原型模式。 一、单例模式 1.1 单例模式介绍 1 ) 定义 单例模式&#xff08;Si…

亚信安慧AntDB数据库与流式处理的有机融合

流式处理的概念 2001年9月11日&#xff0c;美国世贸大楼被袭击&#xff0c;美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司&#xff0c;承担了大量基础支撑软件研发的任务。其中2009年正式发布的IBM InfoSphere Streams&#xff0c;就是…

【深度学习】Pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~四维张量;conv3d~五维张量)

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

11 Redis之高并发问题(读+写) + 缓存预热+分布式锁

8. 高并发问题 Redis做缓存虽减轻了DBMS的压力&#xff0c;减小了RT(Response Time)&#xff0c;但在高并发情况下也是可能会出现各种问题的。 8.1 缓存穿透 当用户访问的数据既不在数据库中也不在缓存中&#xff0c;如id为“-1”的数据或id为特别大不存在的数据, 这时的用户…

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

电子电器架构新趋势 —— 最佳着力点:域控制器

电子电器架构新趋势 —— 最佳着力点&#xff1a;域控制器 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师&#xff08;Wechat&#xff1a;gongkenan2013&#xff09;。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师…

Qt6.8 GRPC功能使用(2)标准 Qt实现客户端

简介 基于之前的文章所说&#xff0c; Qt6.7之后才开始支持客户端、服务端、及双向流&#xff0c;恰好电脑需要重装&#xff0c;看到Qt6.8版本就直接安装了&#xff0c;内容也是使用Qt6.8的版本进行编译的 客户端实现步骤 1. 安装Qt6.8, 包含GRPC功能模块 Qt 6.8安装目录下包…

SQL注入漏洞解析--less-7

我们先看一下第七关 页面显示use outfile意思是利用文件上传来做 outfile是将检索到的数据&#xff0c;保存到服务器的文件内&#xff1a; 格式&#xff1a;select * into outfile "文件地址" 示例&#xff1a; mysql> select * into outfile f:/mysql/test/one f…

ui设计:利用即使设计设计出漂亮样式

目录 一、基本操作 二、具体介绍 6-1 填充图片 6-2 填充色 6-3 图标 右边栏基础设置 右边栏导出​编辑 一、基本操作 二、具体介绍 6-1 填充图片 选择其一图片填充 6-2 填充色 6-3 图标 右边栏基础设置 右边栏导出

uniapp微信小程序-项目实战修改密码

图标是使用uview里面的图标&#xff0c;icfont也可以 以下是所有代码 <template><view><!-- 密码三个 --><view class"password" v-for"(item,index) in userList"><view class"contentuser"><view class&qu…