当前位置: 首页 > news >正文

K8s: Helm搭建mongodb集群(1)

mongodb 集群搭建

  • mongdb 部署前 需要创建 pvc, pv 和 sc,如果在云上会自动创建
  • helm 应用中心: https://artifacthub.io

1 )Helm 安装 mongodb

A. 无本地存储配置,重启数据消失

  • 在 https://artifacthub.io/packages/helm/bitnami/mongodb?modal=install 这个界面弹出的窗口中
    • $ helm repo add bitnami https://charts.bitnami.com/bitnami
      • 这样就添加了这个源,通过 $ helm repo ls
    • $ helm install my-mongodb bitnami/mongodb --version 13.8.1
  • 上面的 helm install 命令是官网提供的最简单的,在安装的时候可以配置一些参数
    • 如:$ helm install my-mongo bitnami/mongodb --version 13.8.1 --set persistence.enabled=false,auth.rootPassword="123456_mongodb"
    • 文档:https://artifacthub.io/packages/helm/bitnami/mongodb#mongodb-parameters
    • 不同的参数,使用 , 分隔
  • 注意,低版本的 helm 的安装命令可能安装会报错,请使用 helm-v3.11.1 以上版本
  • 执行 install 命令后,会输出以下命令
    NAME: my-mongo
    LAST DEPLOYED: Wed May  1 15:32:14 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    CHART NAME: mongodb
    CHART VERSION: 13.8.1
    APP VERSION: 6.0.4** Please be patient while the chart is being deployed **MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:my-mongo-mongodb.default.svc.cluster.localTo get the root password run:export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)To connect to your database, create a MongoDB® client container:kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.4-debian-11-r10 --command -- bashThen, run the following command:mongosh admin --host "my-mongo-mongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORDTo connect to your database from outside the cluster execute the following commands:kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 &mongosh --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
    
  • 上面提示中,让我们把密码设置成当前节点的环境变量
    • export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)
      • 执行上面一行写入环境变量
      • 其中这里 kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d
      • 可以看到密码是上面设置的: 123456_mongodb
    • $ printenv | grep MON 这样也可以看到环境变量中设置的密码
      MONGODB_ROOT_PASSWORD=123456_mongodb
      
  • 通过上面给的这个命令
    • $ kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image bitnami/mongodb:6.0.4-debian-11-r10 --command -- bash
      If you don't see a command prompt, try pressing enter.
      I have no name!@my-mongo-mongodb-client:/$
      
    • 这里,可以开启一个mongodb的客户端
    • 注意,这里的镜像 docker.io/bitnami/mongodb:6.0.4-debian-11-r10 需要提前pull下
    • 这个 docker.io 可能会有网络问题,参考 $ docker pull bitnami/mongodb:6.0.4-debian-11-r10
  • 通过上面的命令来进入数据库,注意这里, -p 后面基本没用,还得重新输入密码,因为安全性问题被高版本禁了
    • $ mongosh admin --host "my-mongo-mongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
    • 输入密码,这时候就已经连接进入 mongodb 数据库了,可以进行操作了
    • 注意,这个pod如果一段时间不操作,会自动退出
  • $ kubectl get all | grep my-mongo 从这里可以看出,它是一个 deployment 而不是 StatefulSets
    • 因此,它不会存储任何状态,退出后,数据就丢了
  • 从外部访问它,上面也提示了命令,进行转发
    • $ kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 --address 0.0.0.0
      Forwarding from 0.0.0.0:27017 -> 27017
      
    • 注意,如果是云上转发,安全组需要配置入站规则
    • 这时候,外部即可访问,通过node节点的ip加端口加用户名和密码
    • 当然此作为简单示例,没有接入 Ingress 网络
  • 查看 deployment $ kubectl get deployment
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    my-mongo-mongodb   1/1     1            1           3h55m
    
  • 重新部署 $ kubectl rollout restart deployment my-mongo-mongodb
    deployment.apps/my-mongo-mongodb restarted
    
  • 并且重新 port-forward 转发 $ kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 --address 0.0.0.0
  • 发现数据丢失了 …
  • 查看密码 $ kubectl get secret | grep my-mongo-mongodb
    my-mongo-mongodb                 Opaque                                1      4h9m
    my-mongo-mongodb-token-89wcr     kubernetes.io/service-account-token   3      4h9m
    
  • $ kubectl get secret my-mongo-mongodb -o yaml
    apiVersion: v1
    data:mongodb-root-password: MTIzNDU2X21vbmdvZGI=
    kind: Secret
    metadata:annotations:meta.helm.sh/release-name: my-mongometa.helm.sh/release-namespace: defaultcreationTimestamp: "2024-05-01T07:32:16Z"labels:app.kubernetes.io/component: mongodbapp.kubernetes.io/instance: my-mongoapp.kubernetes.io/managed-by: Helmapp.kubernetes.io/name: mongodbhelm.sh/chart: mongodb-13.8.1name: my-mongo-mongodbnamespace: defaultresourceVersion: "307736"uid: b0ef31fe-60cc-46a3-8bc6-510692b96d8d
    type: Opaque
    
    • 可以看到,密码被base64加密了
  • 现在需要重新安装有存储的,把之前的卸载了
    • $ kubectl uninstall my-mongo
    • 这样会同步删除其他相关的附带配置, 使用 delete 是删不干净的
  • 无本地存储配置,重启数据消失

B.搭建 mongodb 有本地存储,重启数据保留

  • 在安装的时候和上述有区别, 直接安装是不会成功的,需要配置 PVC
  • persistence.size 默认是8Gi, 如果在云上可能是10的倍数
  • $ helm install my-mongo bitnami/mongodb --version 13.8.1 --set persistence.size=10Gi,auth.rootPassword="123456_mongodb"
    • 这时候会自动创建 pvc
      NAME: my-mongo
      LAST DEPLOYED: Thu May  2 08:59:53 2024
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      CHART NAME: mongodb
      CHART VERSION: 13.8.1
      APP VERSION: 6.0.4** Please be patient while the chart is being deployed **MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:my-mongo-mongodb.default.svc.cluster.localTo get the root password run:export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)To connect to your database, create a MongoDB® client container:kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.4-debian-11-r10 --command -- bashThen, run the following command:mongosh admin --host "my-mongo-mongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORDTo connect to your database from outside the cluster execute the following commands:kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 &mongosh --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
      
    • 注意,这里如果在云上,会自动创建 pvc, pv, storage class, 以及云硬盘, 在本地的话,需要自己处理
    • 参考: https://blog.csdn.net/Tyro_java/article/details/138157501
  • $ kubectl get pvc 验证获取 pvc
  • 上面提示的命令,都执行以下,进行开启终端和进行连接
  • 以及参考上面无存储的进行转发处理,在外部进行客户端的连接, 以及重启后验证数据是否丢失
    • 如果在云上,端口这块,要配置安全组规则
  • 注意,uninstall 执行的时候,存储也会丢失,注意提前备份
  • 更多的配置,参考文档

2 )Helm 搭建mongodb集群

  • $ helm install my-mongo bitnami/mongodb --version 13.8.1 --set architecture="replicaset",persistence.size=10Gi,auth.rootPassword="123456_mongodb"
    • 注意, 这里添加了 architecture="replicaset", 默认值是 standalone
    • 这样就可以设置成主从数据库了
      NAME: my-mongo
      LAST DEPLOYED: Thu May  2 13:46:04 2024
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      CHART NAME: mongodb
      CHART VERSION: 13.8.1
      APP VERSION: 6.0.4** Please be patient while the chart is being deployed **MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:my-mongo-mongodb-0.my-mongo-mongodb-headless.default.svc.cluster.local:27017my-mongo-mongodb-1.my-mongo-mongodb-headless.default.svc.cluster.local:27017To get the root password run:export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)To connect to your database, create a MongoDB® client container:kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.4-debian-11-r10 --command -- bashThen, run the following command:mongosh admin --host "my-mongo-mongodb-0.my-mongo-mongodb-headless.default.svc.cluster.local:27017,my-mongo-mongodb-1.my-mongo-mongodb-headless.default.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
      
  • $ kubectl get all
    NAME                             READY   STATUS    RESTARTS   AGE
    pod/my-mongo-mongodb-0           1/1     Running   0          2m18s
    pod/my-mongo-mongodb-arbiter-0   1/1     Running   0          2m18sNAME                                        TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
    service/kubernetes                          ClusterIP   10.1.0.1     <none>        443/TCP     6d2h
    service/my-mongo-mongodb-arbiter-headless   ClusterIP   None         <none>        27017/TCP   2m18s
    service/my-mongo-mongodb-headless           ClusterIP   None         <none>        27017/TCP   2m18sNAME                                        READY   AGE
    statefulset.apps/my-mongo-mongodb           2/2     2m18s
    statefulset.apps/my-mongo-mongodb-arbiter   1/1     2m18s
    
    • 可以看到是 statefulset 而非 deployment
    • 这里 Arbiter永远是Arbiter,Arbiter 节点只参与投票,不能被选为 Primary,并且不从 Primary 同步数据
    • 而Primary可能退下来成为Secondary,而Secondary可能在选举期间成为Primary
  • 过一会儿 $ kubectl get po -o wide
    NAME                         READY   STATUS    RESTARTS      AGE     IP            NODE        NOMINATED NODE   READINESS GATES
    my-mongo-mongodb-0           1/1     Running   0             7m15s   10.244.1.90   node1.k8s   <none>           <none>
    my-mongo-mongodb-1           1/1     Running   0             7m05s   10.244.1.91   node1.k8s   <none>           <none>
    my-mongo-mongodb-arbiter-0   1/1     Running   0             7m15s   10.244.1.89   node1.k8s   <none>           <none>
    
    • 可以看到,现在已经有2个节点,以及一个选举节点
  • 按照上面提示给出的命令进行配置环境变量,以及客户端不再赘述
  • 要连接这个集群上面也给出了命令提示
    mongosh admin --host "my-mongo-mongodb-0.my-mongo-mongodb-headless.default.svc.cluster.local:27017,my-mongo-mongodb-1.my-mongo-mongodb-headless.default.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
    
    • 这里是主从的集群,有2个库,my-mongo-mongodb-0 和 my-mongo-mongodb-1
    • 如果一台挂掉,另一台还会继续提供服务
    • 如果想要连接一台,就把其中的一台给去掉
    • 选择其中之一进行连接,你就会知道,连接的是主节点还是从节点
    • 如果在从节点执行查询前,还需要设置查询的权限, 执行 $ rs.secondaryOk()
    • 关于扩容和缩容
      • 扩容 $ kubectl scale statefulset <statefulset-name> --replicas=<new-replica-count> -n <namespace>
      • 缩容 $ kubectl scale statefulset <statefulset-name> --replicas=<new-replica-count> -n <namespace>
      • 如果扩容缩容操作在云上,可以直接调整

相关文章:

K8s: Helm搭建mongodb集群(1)

mongodb 集群搭建 mongdb 部署前 需要创建 pvc, pv 和 sc&#xff0c;如果在云上会自动创建helm 应用中心: https://artifacthub.io 1 &#xff09;Helm 安装 mongodb A. 无本地存储配置&#xff0c;重启数据消失 在 https://artifacthub.io/packages/helm/bitnami/mongodb…...

应用分层和企业规范

目录 一、应用分层 1、介绍 &#xff08;1&#xff09;为什么需要应用分层&#xff1f; &#xff08;2&#xff09;如何分层&#xff1f;&#xff08;三层架构&#xff09; MVC 和 三层架构的区别和联系 高内聚&#xff1a; 低耦合&#xff1a; 2、代码重构 controlle…...

Flutter笔记:Widgets Easier组件库(1)使用各式边框

Flutter笔记 Widgets Easier组件库&#xff08;1&#xff09;&#xff1a;使用边框 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…...

OpenHarmony实战开发-上传文件

Web组件支持前端页面选择文件上传功能&#xff0c;应用开发者可以使用onShowFileSelector()接口来处理前端页面文件上传的请求。 下面的示例中&#xff0c;当用户在前端页面点击文件上传按钮&#xff0c;应用侧在onShowFileSelector()接口中收到文件上传请求&#xff0c;在此接…...

外贸企业邮箱是什么?做外贸企业邮箱哪个好?

外贸企业邮箱是什么&#xff1f;外贸企业在进行跨国沟通时必不可少的工具就是外贸企业邮箱&#xff0c;外贸企业邮箱需要具备的条件就是海外邮件抵达率高、安全稳定、多语言沟通。而我们又怎么选择一个适合的外贸企业邮箱呢&#xff1f;小编今天带您一起了解。 一、外贸企业邮…...

写一个简单的程序

思路分析&#xff1a; 1. 导入必要的库 首先&#xff0c;确保你的项目中包含了AWT或Swing库&#xff0c;因为我们将使用它们来创建图形界面。 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import j…...

CentOS安装Docker指南

Docker安装与配置教程 Docker作为一种轻量级的虚拟化技术&#xff0c;在现代软件开发和运维中扮演着重要的角色。下面&#xff0c;我将以技术博主的身份&#xff0c;向大家详细介绍如何在Linux系统上安装和配置Docker&#xff0c;特别是如何设置Docker的监听地址和端口&#x…...

python绘图(pandas)

matplotlib绘图 import pandas as pd abs_path rF:\Python\learn\python附件\pythonCsv\data.csv df pd.read_csv(abs_path, encodinggbk) # apply根据多列生成新的一个列的操作&#xff0c;用apply df[new_score] df.apply(lambda x : x.数学 x.语文, axis1)# 最后几行 …...

Android(Java)项目支持Kotlin语言开发

Android&#xff08;Java&#xff09;项目通过相关Kotlin设置后&#xff0c;允许同时使用Java语言和Kotlin语言进行开发代码的。 示例环境&#xff1a; Android Studio Giraffe | 2022.3.1 Patch 3 Java 8 Kotlin 1.9.20 设置Kotlin选项&#xff1a; 第一步&#xff1a;在项…...

Terraform创建模块

模块就是包含一组Terraform代码的文件夹&#xff0c;可以通过模块直接使用别人编写好的Terraform代码来创建资源。 Terraform模块是编写高质量Terraform代码&#xff0c;提升代码复用性的重要手段&#xff0c;可以说&#xff0c;一个成熟的生产环境应该是由数个可信成熟的模块组…...

《华为鸿蒙:从备胎到主角的崛起之路》

华为鸿蒙操作系统的发展历程可以追溯到 2012 年&#xff0c;当时华为开始规划自有操作系统鸿蒙 OS。然而&#xff0c;直到 2019 年 5 月&#xff0c;鸿蒙才正式进入开发阶段。 2019 年 8 月 9 日&#xff0c;华为正式发布了鸿蒙操作系统。 鸿蒙系统的首个版本是于 2019 年推出…...

FPGA学习笔记(2)——Verilog语法及ModelSim使用

1.1 语法 1、赋值语句 和 < 为阻塞赋值&#xff0c;当该语句结束时&#xff0c;下一个语句才开始执行&#xff0c;串行执行 < 为非阻塞幅值&#xff0c;该语句和整个语句块同时执行&#xff0c;并行执行 1.2 ModelSim使用 1、修改源文件路径&#xff1a;File -> …...

2024年十大AI工具,让你的工作学习效率飞跃

在这个迅速变化的数字时代&#xff0c;人工智能技术正在以前所未有的速度发展和革新。AI技术不仅深入科研、医疗和教育等领域&#xff0c;还广泛应用于日常生活和商业活动中。本文梳理了2024年十款最好用的AI工具&#xff0c;它们各有特色&#xff0c;能极大提升工作效率和生活…...

linux之NAMP

linux之NAMP Nmap&#xff08;Network Mapper&#xff09;是一个开源的网络扫描和安全审计工具。它被设计用来快速地扫描大型网络&#xff0c;尽管它也可以对单个主机进行有效的扫描。Nmap利用原始IP数据包以多种方式探测目标网络上的主机、服务&#xff08;应用程序名称和版本…...

uniapp 禁止截屏(应用内,保护隐私)插件 Ba-ScreenShot

禁止截屏&#xff08;应用内&#xff0c;保护隐私&#xff09; Ba-ScreenShot 简介&#xff08;下载地址&#xff09; Ba-ScreenShot 是一款uniapp禁止应用内截屏的插件&#xff0c;保护隐私&#xff0c;支持禁止截屏、放开截屏 截图展示 也可关注博客&#xff0c;实时更新最…...

数字电路-5路呼叫显示电路和8路抢答器电路

本内容涉及两个电路&#xff0c;分别为5路呼叫显示电路和8路抢答器电路&#xff0c;包含Multisim仿真原文件&#xff0c;为掌握FPGA做个铺垫。紫色文字是超链接&#xff0c;点击自动跳转至相关博文。持续更新&#xff0c;原创不易&#xff01; 目录&#xff1a; 一、5路呼叫显…...

C++中的函数签名

前言&#xff1a; 很多C初学者会发现函数签名这一概念在C的学习过程中经常出现&#xff0c;然而很多人往往不太了解函数签名包括些什么&#xff0c;本文章将从一个初学者的角度出发&#xff0c;详细解释函数签名这一概念。 在C中&#xff0c;函数签名用于唯一地识别函数重载。…...

Mac brew安装Redis之后更新配置文件的方法

安装命令 brew install redis 查看安装位置命令 brew list redis #查看redis安装的位置 % brew list redis /usr/local/Cellar/redis/6.2.5/.bottle/etc/ (2 files) /usr/local/Cellar/redis/6.2.5/bin/redis-benchmark /usr/local/Cellar/redis/6.2.5/bin/redis-check-ao…...

安卓应用开发(一):工具与环境

开发工具 Android Studio&#xff0c;用于开发 Android 应用的官方集成开发环境 (IDE)。包括以下功能&#xff1a; 基于Gradle的构建系统 gradle是一个项目构建工具&#xff0c;将源工程打包构建为apk 安卓模拟器统一环境代码编辑模拟器实时更新Github集成Lint功能&#xff0…...

基于springboot+vue+Mysql的在线动漫信息平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...