通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤
1、什么是Ceph
Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计理念使其成为各种数据密集型应用的理想选择,包括云平台、数据中心和科研项目等。
2、本实验拓扑以及与生产环境的差异
本实验拓扑及其相应节点的规划如下:
需要注意的是,本次实验属于实验环境并非生产环境,受限于服务器数量限制,存在将mon、mgr和osd部署在同一台服务器的情况,这样的部署方式本质上是存在服务中断风险的,所以如果是在生产环境中进行规划,应该尽可能的将mon、mgr、osd或者RGW等服务部署在不同的物理节点上。
3、搭建步骤
(1)通过命令“hostnamectl set-hostname <主机名>
”分别在debian1、debian2、debian3节点上修改服务器的主机名,如下:
上述命令在相应的节点执行完成后,注销并重新登录服务器,使得相应的修改生效。
(2)分别在debian1、debian2和debian3节点上执行命令,写入相应的hosts信息,以达到在实验环境下解析域名的目的,命令代码如下:
cat >> /etc/hosts << EOF
192.168.26.144 debian1
192.168.26.151 debian2
192.168.26.152 debian3
EOF
执行完上述命令后,可以通过ping命令测试,确认是否配置正确。
(3)通过“apt install cephadm -y
”命令,在debian1节点上安装cephadm,如下:
(4)通过命令“cephadm bootstrap --mon-ip 192.168.26.144
”命令,在debian1节点上进行初始化,如下:
root@debian1:~# cephadm bootstrap --mon-ip 192.168.26.144
Creating directory /etc/ceph for ceph.conf
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit systemd-timesyncd.service is enabled and running
Repeating the final host check...
podman (/usr/bin/podman) version 4.3.1 is present
systemctl is present
lvcreate is present
Unit systemd-timesyncd.service is enabled and running
Host looks OK
Cluster fsid: 492491c0-b0c1-11ef-acca-000c29ea04eb
Verifying IP 192.168.26.144 port 3300 ...
Verifying IP 192.168.26.144 port 6789 ...
Mon IP `192.168.26.144` is in CIDR network `192.168.26.0/24`
Mon IP `192.168.26.144` is in CIDR network `192.168.26.0/24`
Internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Pulling container image quay.io/ceph/ceph:v16...
Ceph version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting mon public_network to 192.168.26.0/24
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr not available, waiting (3/15)...
mgr not available, waiting (4/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host debian1...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
Ceph Dashboard is now available at:URL: https://debian1:8443/User: adminPassword: b4xslut1x4Enabling client.admin keyring and conf on hosts with "admin" label
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:sudo /usr/sbin/cephadm shell --fsid 492491c0-b0c1-11ef-acca-000c29ea04eb -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyringOr, if you are only running a single cluster on this host:sudo /usr/sbin/cephadm shellPlease consider enabling telemetry to help improve Ceph:ceph telemetry onFor more information see:https://docs.ceph.com/en/pacific/mgr/telemetry/Bootstrap complete.
初始化过程会生成首次登录Ceph图形化面板的IP地址链接、用户名和密码,需要牢记好!
除此之外,此初始化过程会执行以下操作:
- 在本地主机上为新集群创建monitor 和 manager daemon守护程序。
- 为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
- 将public key的副本写入/etc/ceph/ceph.pub。
- 将与新群集进行通信所需的最小配置文件保存到/etc/ceph/ceph.conf。
- 向/etc/ceph/ceph.client.admin.keyring写入client.admin可特权管理secret key的副本。
以上操作完成后,在debian1节点上,会运行以下服务:
- ceph-mgr ceph管理程序
- ceph-monitor ceph监视器
- ceph-crash 崩溃数据收集模块
- prometheus prometheus监控组件
- grafana 监控数据展示dashboard
- alertmanager prometheus告警组件
- node_exporter prometheus节点数据收集组件
(5)在debian1节点上进入/etc/ceph目录,然后通过以下命令,将cephadm的密钥传送到debian1、debian2和debian3节点上,代码如下:
ssh-copy-id -f -i ceph.pub root@debian1
ssh-copy-id -f -i ceph.pub root@debian2
ssh-copy-id -f -i ceph.pub root@debian3
(6)在debian1上输入命令“cephadm shell -- ceph orch apply mon --unmanaged
”将自动部署mon节点的设置禁用,执行此命令的目的是,不让cephadm在后续添加主机的时候自动向添加的主机部署mon和mgr服务,如下:
(7)分别在debian2和debian3上,输入命令“apt install podman lvm2 -y
”,在相应的节点安装Ceph相关服务所需要podman和lvm2组件,如下:
(8)在debian1上输入以下命令,在Ceph集群中添加debian1、debian2和debian3节点,如下:
cephadm shell -- ceph orch host add debian1
cephadm shell -- ceph orch host add debian2
cephadm shell -- ceph orch host add debian3
(9)在debian1上输入命令“cephadm shell -- ceph orch host ls
”,查看添加的节点,如下:
(10)通过命令“cephadm shell -- ceph orch device ls
”,查看所有节点的可用设备,需要注意的是,此方式显示的可用设备可能存在错误,例如下图中debian2的节点,显示的是/dev/sda和/dev/sdb两个设备可用,实际上,是/dev/sdb和/dev/sbc可用,因此在添加osd设备时,按照实际的设备名称添加即可,如下:
(11)在debian1上分别执行以下命令,添加各个节点充当osd的硬盘设备,如下:
ceph orch daemon add osd debian1:/dev/sdb
ceph orch daemon add osd debian1:/dev/sdc
ceph orch daemon add osd debian2:/dev/sdb
ceph orch daemon add osd debian2:/dev/sdc
ceph orch daemon add osd debian3:/dev/sdb
ceph orch daemon add osd debian3:/dev/sdc
(12)为了使得mon服务在本实验中存在冗余结构,在debian1节点上通过命令“cephadm shell -- ceph orch apply mon debian1,debian2,debian3
”将mon服务扩展到每个节点,需要注意的是,受网络和服务器性能进行,此扩展过程需要时间,如下:
(13)在debian1节点上通过命令“cephadm shell -- ceph orch ls
”,查看每个节点的mon运行状态,如下:
(14)为了使得mgr服务在本实验中存在冗余结构,在debian1节点上通过命令“cephadm shell -- ceph orch apply mgr debian1,debian2
”将mon服务扩展到每个节点,需要注意的是,受网络和服务器性能进行,此扩展过程需要时间,如下:
(15)在debian1节点上通过命令“cephadm shell -- ceph -s
”查看mgr服务运行情况,如下:
(16)除上述通过命令行方式操作外,Ceph也提供了图形化操作面板,具体操作方式为在浏览器里面输入“https://IP地址:8443
”(本实验为“https://192.168.26.144:8443
”),即可登录图形化界面,需要注意的是,首次登录的用户名为admin,密码为Ceph初始化时,分配的密码,通过此密码登录后,将进入首次修改密码界面,如下:
(17)密码修改完成,并成功登录后,相应的图形化面板界面如下:
4、以文件系统形式的挂载步骤
Ceph分布式存储的应用接口一般有四种,分别是:应用直接访问的Redos接口、基于S3/Swift的对象存储接口(通常是Amazon和OpenStack使用)、基于librbd的块存储接口和基于libcephfs/posix的文件系统接口。本实验关于Ceph的挂载讲解部分,使用基于libcephfs的文件系统实现。具体步骤如下:
(1)在debian1节点上,通过命令“cephadm shell -- ceph osd pool create cephfs-metadata 32 32
”,创建保存元数据的cephfs-metadata存储池,如下:
(2)在debian1节点上,通过命令“cephadm shell -- ceph osd pool create cephfs-data 64 64
”,创建保存数据的cephfs-data存储池,如下:
(3)在debian1节点上,通过命令“cephadm shell -- ceph orch apply mds mycephfs --placement=”3 debian1 debian2 debian3”
”,创建一个名为mycephfs的mds,如下:
(4)在debian1节点上,通过命令“cephadm shell -- ceph fs new mycephfs cephfs-metadata cephfs-data
”,创建基于cephfs-metadata/cephfs-data两个存储池,名为mycephfs的cephFS文件系统,如下:
(5)在debian1节点上,通过命令“cephadm shell -- ceph -s
”,查看文件系统mycephfs的部署状态,本截图展示的是文件系统mycephfs部署过程中的状态,如下:
(6)在debian1节点上,通过命令“cephadm shell -- ceph fs ls
”查看和验证刚刚创建的文件系统mycephfs,如下:
(7)在debian1节点上,通过命令“cephadm shell -- cephfs status mycephfs
”查看文件系统mycephfs的运行状态,如下:
(8)在debian1节点上,通过以下命令,创建和查看用于客户端登录的用户ymh,如下:
cephadm shell -- ceph auth get-or-create client.ymh mon ‘allow r’ mds ‘allow rw’ osd ‘allow rwx pool=cephfs-data’
cephadm shell -- ceph auth get client.ymh
(9)在debian1节点上通过命令“cephadm shell -- ceph-authtool --create-keyring ceph.client.ymh.keyring
”,创建用户ymh的keyring文件,如下:
(10)在debian1节点上通过命令“cephadm shell -- ceph auth get client.ymh -o ceph.client.ymh.keyring
”将用户ymh的信息写入到keyring文件中,如下:
(11)在debian1节点上通过命令“cephadm shell -- ceph auth print-key client.ymh > ymh.key
”将认证相关的加密信息写入到ymh.key文件中,如下:
(12)在客户端服务器节点(本实验中,客户端服务器安装的是OpenEuler操作系统)上通过命令“yum install ceph-common -y
”安装ceph-common,如下:
(13)在debian1节点上,通过以下命令,将相关ceph配置文件和用户文件移动到同一目录下,并传送到客户端,如下:
mv ceph.client.ymh.keyring ymh.key /etc/ceph
scp /etc/ceph/ceph.conf ceph.client.ymh.keyring ymh.key root@192.168.26.146:/etc/ceph
(14)在客户端服务器节点上,通过命令“ceph --user ymh -s
”,对用户ymh进行权限验证,确认在客户端上通过用户ymh访问服务端是正常的,如下:
(15)在客户端节点上,通过命令“mount -t ceph 192.168.26.144:6789,192.168.26.151:6789,192.168.26.152:6789:/ /mnt/ceph_test -o name=ymh,secretfile=/etc/ceph/ymh.key
”,对搭建完成的Ceph分布式存储集群进行挂载(本实验中,挂载点为/mnt/ceph_test
),如下:
(16)在客户端节点上通过命令“df -Th
”,查看挂载情况,如下:
(17)此时便可以向Ceph集群中进行文件的读写。
5、其他注意事项
5.1、在cephadm下如何删除已经创建的文件系统和存储池
Ceph为了保证数据安全,在默认情况下,通过ceph监控节点(mon节点)是不能对文件系统和存储池做删除操作的,不过可以通过设置临时项放开删除权限,然后就可以进行删除操作了,以上述的mycephfs文件系统以及下层的cephfs-data、cephfs-metadata存储池为例,讲解相应的删除步骤:
(1)在debian1节点上,通过命令“cephadm shell -- ceph fs set mycephfs down true
”放开监控节点删除文件系统的权限,如下:
(2)在debian1节点上,通过命令“cephadm shell -- ceph osd pool get cephfs-metadata nodeleteceph fs rm mycephfs --yes-i-really-mean-it
”删除文件系统mycephfs,如下:
(3)在debian1节点,通过命令“cephadm shell -- ceph osd pool get cephfs-metadata nodelete
”确认nodelete参数为false,如果不是false,则需要通过命令“cephadm shell -- ceph osd pool set cephfs-metadata nodelete false
”修改为false,如下:
(4)在debian1节点上,通过命令“cephadm shell -- ceph tell mon.* injectargs --mon-allow-pool-delete=true
”将mon-allow-pool-delete
参数修改为true
,以达到放开监控节点删除存储池权限之目的,如下:
(5)在debian1节点上,通过命令“cephadm shell -- ceph osd pool rm cephfs-metadata cephfs-metadata --yes-i-really-really-mean-it
”删除存储池cephfs-metadata,如下:
(6)在debian1节点上,通过命令“cephadm shell -- ceph osd pool rm cephfs-data cephfs-data --yes-i-really-really-mean-it
”删除存储池cephfs-data,如下:
5.2、Ceph和GlasterFS的区别
Ceph和GlasterFS都是应用非常广泛的开源分布式存储系统,从部署难度上来说GlasterFS部署更加快速容易,可以通过简单的几个配置便可以达到分布式存储的目的,并且对于操作系统基础环境的要求很低,而对比之下,Ceph的部署难度则比GlasterFS高不少。然而,Ceph支持的特性比GlasterFS多很多,例如,GlasterFS只支持文件系统存储,而Ceph除了支持CephFS这一文件系统存储之外,还支持块存储和对象存储,并且每个osd硬盘上都通过文件副本和纠删码等方式进行了加密存储,因此,如果单独把一个osd设备拿出来,其中的文件是不能直接进行使用的,而GlasterFS的每个节点,文件都是直接放在存储节点上,因此这些文件在存储节点单拿出来时,是可以直接使用的。
另外在Amazon和OpenStack等云平台架构中,Ceph是其重要的组成部分,这一点相比于GlasterFS有着无可比拟的优势。
相关文章:
通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤
1、什么是Ceph Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计…...
flink+kafka实现流数据处理学习
在应用系统的建设过程中,通常都会遇到需要实时处理数据的场景,处理实时数据的框架有很多,本文将以一个示例来介绍flinkkafka在流数据处理中的应用。 1、概念介绍 flink:是一个分布式、高可用、高可靠的大数据处理引擎,…...
SpringBoot使用外置的Servlet容器(详细步骤)
嵌入式Servlet容器:应用打成可执行的jar 优点:简单、便携; 缺点:默认不支持JSP、优化定制比较复杂.; 外置的Servlet容器:外面安装Tomcat---应用war包的方式打包; 操作步骤: 方式一&…...
C# 中的委托与事件:实现灵活的回调机制
C#中的委托(Delegate)和事件(Event)。委托和事件是C#中非常重要的特性,它们允许你实现回调机制和发布-订阅模式,从而提高代码的灵活性和解耦程度。通过使用委托和事件,你可以编写更加模块化和可…...
大模型辅助测试的正确打开方式?
测试的基本目的之一,是对被测对象进行质量评估。换言之,是要提供关于被测对象质量的“确定性”。因此,我们很忌讳在测试设计中引入“不确定性”,比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等…...
设计模式之代理模式
代理模式代码示例:https://blog.csdn.net/weixin_39865508/article/details/141924680 代理模式的左右,一定程度上不暴露被代课对象的内容,更安全,也减少系统的耦合性 静态代理 代理对象和被代理对象都继承同一个接口 在代理对象…...
win11中win加方向键失效的原因
1、可能是你把win键锁了: 解决办法:先按Fn键,再按win键 2、可能是可能是 贴靠窗口设置 中将贴靠窗口关闭了,只需要将其打开就好了...
Html——11. 页面跳转
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>页面跳转</title><meta http-equiv"refresh" content"5; urlhttps://www.51zxw.net"/><!--<meta http-equiv"refresh" co…...
要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量
要查询 user 表中 we_chat_open_id 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_open_id IS NOT NULL AND we_chat_open_id ! ;解释: SELECT COUNT(*): 表示要计算符合条件的行数。FROM us…...
docker-compos mysql5.7主从配置
docker-compos mysql5.7主从配置 docker-compose目录结构 配置文件 master/my.cnf [client] port 3306 socket /var/run/mysqld/mysqld.sock[mysqld_safe] pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.sock nice 0…...
关于无线AP信道调整的优化(锐捷)
目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰,提高网络覆盖范围和信号质量。基本原则包括: 1. 选择合适的信道:根据…...
Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)
文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用(操作环境变量) 七、虚拟环境 介绍Mac/linux创建虚拟…...
解决Docker国内网络问题
6月后以来,大量Docker镜像网站停服,Docker无法下载安装 本仓库致力于解决国内网络原因无法使用Docker的问题。 特点: 使用Github Action将官网的安装脚本/安装包定时下载到本项目Release,供国内使用官方安装包,安全可…...
Anaconda 安装与虚拟环境创建完整指南
Anaconda 安装与虚拟环境创建完整指南 Anaconda 是目前最流行的 Python 和数据科学工具集之一,它不仅可以轻松管理 Python 包,还能提供强大的虚拟环境功能,避免项目之间的依赖冲突。如果你是机器学习、数据科学或计算机视觉的开发者…...
【Java数据结构】LinkedList与链表
认识LinkedList LinkedList就是一个链表,它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来,所以不需要数组。LinkedList也是以泛型的方法实现的,所以使用这个类都需要实例化对象。 链表分为很多种,比…...
Linux 搭建 nginx+keepalived 高可用 | Nginx反向代理
注意:本文为 “Linux 搭建 nginxkeepalived (主备双主模式) 高可用 | Nginx反向代理” 相关文章合辑。 KeepalivedNginx实现高可用(HA) xyang0917 于 2016-09-17 00:24:15 发布 keepalived 的 HA 分为抢占模式和非抢占模式,抢占…...
17_HTML5 Web 存储 --[HTML5 API 学习之旅]
HTML5 Web 存储(Web Storage)是 HTML5 引入的一种在用户浏览器中存储数据的机制。它提供了比传统的 cookies 更加方便和强大的功能,包括更大的存储空间、更好的性能以及更简单的 API。Web 存储主要分为两种类型:localStorage 和 s…...
uni-app(优医咨询)项目实战 - 第7天
学习目标: 能够基于 WebSocket 完成问诊全流程 能够使用 uniCloud 云存储上传文件 能够完成查看电子处方的功能 能够完成医生评价的功能 一、问诊室 以对话聊天的方式向医生介绍病情并获取诊断方案,聊天的内容支持文字和图片两种形式。 首先新建一…...
今日总结 2024-12-28
今天全身心投入到鸿蒙系统下 TCPSocket 的学习中。从最基础的 TCP 协议三次握手、四次挥手原理重新梳理,深刻理解其可靠连接建立与断开机制,这是后续运用 TCPSocket 无误通信的根基。在深入鸿蒙体系时,仔细研读了其为 TCPSocket 封装的 API&a…...
ip归属地怎么判定?如何查看自己ip属地
在当今数字化时代,IP地址作为互联网通信的基础,扮演着至关重要的角色。而IP归属地的判定与查看,不仅关乎网络安全、隐私保护,还直接影响到社交平台的信任机制与信息传播的真实性。本文将深入探讨IP归属地的判定原理以及如何查看自…...
4.采用锁操作并支持等待功能的线程安全队列
分析 书接上文 修改push()似乎并不困难:在函数末尾加上对data_cond.notify_one()的调用即可,与代码清单1(第一篇文章)一样。事情其实没那么简单,我们之所以采用精细粒度的锁,目的是尽可能提高并发操作的数量。如果在notify_one()调用期间&a…...
螺杆支撑座在运用中会出现哪些问题?
螺杆支撑座是一种用于支撑滚珠螺杆的零件,通常用于机床、数控机床、自动化生产线等高精度机械设备中。在运用中可能会出现多种问题,这些问题源于多个方面,以下是对可能出现的问题简单了解下: 1、安装不当:安装过程中没…...
OSI 七层模型 | TCP/IP 四层模型
注:本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型(七层模型) BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型,亦称 OSI(Open System Interconnection…...
秒鲨后端之MyBatis【2】默认的类型别名、MyBatis的增删改查、idea中设置文件的配置模板、MyBatis获取参数值的两种方式、特殊SQL的执行
别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! 下篇更新: 秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。 默认的类型别名 MyBatis的增删改查 添加 <!--int insertUs…...
快云服务器小助手getdetail存在任意文件文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
尚硅谷Vue3入门到实战 —— 02 编写 App 组件
根目录下的 index.html 是项目的入口文件,默认的具体内容如下: src 文件夹分析 <!DOCTYPE html> <html lang""><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"&…...
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J实现原理分析
文章目录 官网SLF4J 简单使用案例分析SLF4J 获取 Logger 的原理获取 ILoggerFactory 的过程获取 Logger 的过程SLF4J 与底层日志框架的集成 小结 官网 https://slf4j.org/ Simple Logging Facade for Java (SLF4J) 用作各种日志记录框架(e.g…...
Flutter 调试环境下浏览器网络请求跨域问题解决方案
本篇文章主要讲解,Flutter调试环境情况下,浏览器调试报错跨域问题的解决方法,通过本篇文章你可以快速掌握Flutter调试环境情况下的跨域问题。 日期:2024年12月28日 作者:任聪聪 报错现象: 报文信息…...
python编译为可执行文件
1.用py2exe生成可执行文件 目前,在py2exe 0.9.2版本已经支持python3.x,它可以将python程序打包为windows下独立的可执行文件。 要使用py2exe,首先要编写一个编译程序(例如编写一个名为setup.py的程序),然后在python中运行…...
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111
文章目录 一、算法概念111二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务…...
spring cloud微服务-OpenFeign的使用
OpenFeign的使用 openFeign的作用是服务间的远程调用 ,比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中,LoadBalancer和OpenFeign虽然都提供了服务间调用的能力,但它们的设计目的和…...
欢迪迈手机商城设计与实现基于(代码+数据库+LW)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本欢迪迈手机商城就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...
GCP Cloud Architect exam - PASS
备考指南 推荐视频课程 https://www.udemy.com/course/google-cloud-architect-certifications/?couponCodeKEEPLEARNING 推荐题库 https://www.udemy.com/course/gcp-professional-cloud-architect-exam-practice-tests-2024/?couponCodeKEEPLEARNING 错题集 http…...
通过 `@Configuration` 和 `WebMvcConfigurer` 配置 Spring MVC 中的静态资源映射
通过 Configuration 和 WebMvcConfigurer 配置 Spring MVC 中的静态资源映射 一、前言1. 了解静态资源的默认配置2. 使用 Configuration 和 WebMvcConfigurer 自定义资源映射示例:将 /upload/ 和 /img/ 映射到不同的文件系统目录解释:为什么使用 classpa…...
敏捷测试文化的转变
敏捷文化是敏捷测试转型的基础,只有具备敏捷文化的氛围,对组织架构、流程和相关测试实践的调整才能起作用。在前面的敏捷测试定义中,敏捷测试是遵从敏捷软件开发原则的一种测试实践,这意味着敏捷的价值观。 此外,从传…...
深度学习:从原理到搭建基础模型
引言: 深度学习为什么火? 深度学习在处理复杂的感知和模式识别任务方面展现出了前所未有的能力。以图像识别为例,深度学习模型(如卷积神经网络 CNN)能够识别图像中的各种物体、场景和特征,准确率远超传统的计算机视觉方法。 当然这之中也还因为 大数据时代的推动(随着…...
MySQL和HBase的对比
Mysql :关系型数据库,主要面向 OLTP ,支持事务,支持二级索引,支持 sql ,支持主从、 Group Replication 架构模型(此处以 Innodb 为例,不涉及别的存储引擎)。 HBase &am…...
Gateway Timeout504 网关超时的完美解决方法
引言 在Web开发中,遇到HTTP状态码504(Gateway Timeout)是相当常见的。这个状态码表示前端服务器(如负载均衡器或代理服务器)作为网关工作时,在尝试访问后端服务器处理请求时未能及时得到响应。本文将探讨导…...
【探花交友】day03—MongoDB基础
目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…...
总结-常见缓存替换算法
缓存替换算法 1. 总结 1. 总结 常见的缓存替换算法除了FIFO、LRU和LFU还有下面几种: 算法优点缺点适用场景FIFO简单实现可能移除重要数据嵌入式系统,简单场景LRU局部性原理良好维护成本高,占用更多存储空间内存管理,浏览器缓存L…...
宏集eX710物联网工控屏在石油开采机械中的应用与优势
案例概况 客户:天津某石油机械公司 应用产品:宏集eX710物联网工控屏 应用场景:钻井平台设备控制系统 一、应用背景 石油开采和生产过程复杂,涵盖钻井平台、采油设备、压缩机、分离器、管道输送系统等多种机械设备。这些设备通…...
【社区投稿】自动特征auto trait的扩散规则
自动特征auto trait的扩散规则 公式化地概括,auto trait marker trait derived trait。其中,等号右侧的marker与derived是在Rustonomicon书中的引入的概念,鲜见于Rust References。所以,若略感生僻,不奇怪。 marker …...
【MySQL】第一弹----库的操作及数据类型
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:MySQL 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 一、SQL 语句分类 DDL:数据定…...
【服务器主板】定制化:基于Intel至强平台的全新解决方案
随着数据处理需求不断增长,服务器硬件的发展也在持续推进。在这一背景下,为用户定制了一款全新的基于Intel至强平台的服务器主板,旨在提供强大的计算能力、优异的内存支持以及高速存储扩展能力。适用于需要高性能计算、大规模数据处理和高可用…...
Flutter路由工具类RouteUtils,可二次开发,拿来即用
一、RouteUtils路由核心类 /*** 路由封装*/ class RouteUtils {RouteUtils._();static final navigatorKey GlobalKey<NavigatorState>();// App 根节点Contextstatic BuildContext get context > navigatorKey.currentContext!;static NavigatorState get navigato…...
报错:No module named ‘pygeohash‘
如果你遇到这个错误: platform... using builtin-java classes where applicableTraceback (most recent call last):File "/home/spark-shell/AppLogDWD02.py", line 4, in <module>from pygeohash import encodeModuleNotFoundError: No module …...
SQL中的TRIM用法
TRIM 是 SQL 中用于去除字符串两端(左侧和右侧)的空格或特定字符的函数。这个函数常用于清理数据中的无效空白字符,尤其是在从外部系统导入数据时,常常会遇到数据两端有不必要的空格,使用 TRIM 可以去除这些多余的字符…...
AIGC在电影与影视制作中的应用:提高创作效率与创意的无限可能
云边有个稻草人-CSDN博客 目录 引言 一、AIGC在剧本创作中的应用 1.1 剧本创作的传统模式与挑战 1.2 AIGC如何协助剧本创作 1.3 未来的剧本创作:AI辅助的协同创作 二、AIGC在角色设计中的应用 2.1 传统角色设计的挑战 2.2 AIGC如何协助角色设计 三、AIGC在…...
【蓝桥杯——物联网设计与开发】拓展模块5 - 光敏/热释电模块
目录 一、光敏/热释电模块 (1)资源介绍 🔅原理图 🔅AS312 🌙简介 🌙特性 🔅LDR (2)STM32CubeMX 软件配置 (3)代码编写 (4&#x…...
深入探索openEuler Kernel:操作系统的心脏
title: 深入探索openEuler Kernel:操作系统的心脏 date: ‘2024-12-28’ category: blog tags: openEulerLinux Kernel操作系统性能优化 sig: Kernel archives: ‘2024-12’ author:way_back summary: openEuler Kernel作为openEuler操作系统的核心,扮演…...