ceph介绍和搭建
1 为什么要使用ceph存储
- 什么是对象存储?
对象存储并没有向文件系统那样划分为元数据区域和数据区域,而是按照不同的对象进行存储,而且每个对象内部维护着元数据和数据区域。因此每个对象都有自己独立的管理格式。
- 对象存储优点:
基于对象的一个好处是对于同一个文件始终只存储一份,尽管有上千个用户上传了同一个文件,无论该文件名称是否一致,但只要内容是同一个文件,则始终会上传一个文件哟。这也是为什么我们在上传一个文件时能达到秒传的目的。如何校验不同文件名称其存储的数据相同呢?方法有很多种,比如Linux的"md5sum"命令。
2 ceph术语/组件/概述
2.1 ceph术语
1️⃣ceph集群也被称之为 RADOS
==(Reliable Automatic Distributed Object Store)==存储集群,即可靠的自动分布式对象存储
2️⃣OSD: 英文全称为Object Storage Daemon,即对象存储设备,通常指的是磁盘设备,它是真正负责存储数据的设备。
GPT回答:负责实际存储数据和管理数据的复制、恢复、重新平衡等操作
3️⃣mon: 全称为"monitor",即监视器,也就是我们所说的集群元数据节点(而非文件元数据)。它是用来管理整个ceph集群的运行状态(比如集群有多少台服务器,每个服务器有多少OSD及其状态信息等等)。
它是为了能够让整个集群能够正常运行而设计的角色,因此为了避免该角色存在单点故障,因此会配置高可用集群,其底层基于POSIX协议实现。
通常我们需要关注以下几点:
- Ceph Monitor(进程名称为Ceph-mon)维护集群状态的映射,包括Monitor映射、manager映射、OSD映射,CRUSH映射和PG映射等;
- 这些映射是Ceph守护进程相互协调所需的关键集群状态,例如哪些OSD是正常工作的状态,哪些PG不可用等等;
- 监视器还负责管理守护程序和客户端之间的身份验证(基于Cephx协议实现);
- 为了实现冗余和高可用性,通常至少需要三个监视器,这不仅仅提供了高可用性,还提供了负载均衡的能力,因为通常Monitors还扮演着"身份验证"的角色,如果配置多个监视器可以很好的进行负载均衡。
4️⃣mgr: 全称为"manager",即管理者。它的作用就是用来维护查询类的操作,它将很多查询操作按照自己的方式先缓存下来,一旦有人做监控,它能做及时的响应。有点类似于zabbix agent的功能。
早期ceph的版本是没有mgr组件的,但由于mon组件每次读取数据都是实时查询的,这种代价很高昂,而监控集群又是必须的,因此在ceph的L版本引入了mgr组件
通常我们需要关注以下几点:
- ceph管理器守护程序(进程名称为ceph-mgr)负责跟踪运行时度量和ceph集群的当前状态,包括存储利用率、当前性能度量和系统负载
- Ceph管理器守护进程还托管基于python的插件来管理和Rest API
- 高可用性通常至少需要两个管理器
5️⃣pool: 存储池,存储池的大小取决于底层的OSD的存储空间大小。一个ceph集群是可以由多个存储池构成的,而且每个存储池还可以被划分为多个不同的名称空间,而且每个名称空间可以划分成多个PG资源。
6️⃣PG: 全称为"placement groups",即安置组(归置组)。注意,Pool和PG都是抽象的概念,即实际上并不存在,它是一个虚拟的概念。我们暂时可以理解他是用来存储数据的安置组即可
-
PG(Placement Group),负责将数据均匀分布在集群中的各个OSD(Object Storage Device)上。
-
PG是数据存储和访问的基本单位
-
当某个OSD发生故障时,可以通过PG中的副本在其他OSD上进行恢复,保证数据的可用性和可靠性
7️⃣MDS: (类似于HDFS的namenode,如果不用cephfs,该组件可以不安装)
全称为MetaData Server,即对应cephfs文件系统的元数据服务器。如果要用的话,建议安装多个节点,以免出现单点故障的情况。从严格意义上来讲,MDS只能算作构建于Rados存储集群之上的文件存取接口,它同RBD和RadowGW属于同一个级别,而非Ceph的基础组件。
但它却是ceph的第一个(最初也是除librados API之外的唯一一个)客户端数据存取组件
通常需要关心以下几点:
-
Ceph元数据服务器(MDS,进程名称为"ceph-mds")代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储不使用MDS)
-
Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls、find等),而不会给Ceph存储集群带来巨大负担;
推荐阅读:http://docs.ceph.org.cn/glossary/#term-56http://docs.ceph.org.cn/architecture/#pg-idhttp://docs.ceph.org.cn/architecture/#pg-osd
提示:(1)如果我们给定的存储路径是一块裸的物理磁盘(我们称之为"裸设备",也就是该设备没有被格式化指(2)通常情况下我们的ceph集群会有OSDs,Monitors,Managers和MDSs这几个基础组件,其中MDSs是可(3)RBD不需要通过运行守护进程来提供服务的,它基于librbd模块,它提供了相应的API来进行使用
2.2 ceph客户端介绍
RadosGw,RBD和CephFS都是RADOS存储服务的客户端,他们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象
RadosGw:
它是一个更抽象的能够跨互联网的云存储对象,它是基于RESTful风格提供的服务。每一个文件都是一个对象,而文件大小是各不相同的。
它和Ceph集群的内部的对象(object,它是固定大小的存储块,只能在Ceph集群内部使用,基于RPC协议工作的)并不相同。
值得注意的是,RadosGw依赖于librados,访问他可以基于http/https协议来进行访问。
RBD:
将ceph集群提供的存储空间模拟成一个又一个独立的块设备。每个块设备都相当于一个传统磁(硬)盘一样,可以对它做格式化,分区,挂载等处理
值得注意的是,RBD依赖于librados,访问需要Linux内核支持librdb相关模块
cephFS:
这是Ceph集群的文件系统,我们可以很轻松的像NFS那样使用,但它的性能瓶颈相比NFS来说是很难遇到的。
值得注意的是,CephFS并不依赖于librados,它和librados是两个不同的组件。但该组件使用的热度相比RadosGw和RBD要低。
查看ceph的官方文档:https://docs.ceph.com/en/latest/
官方架构图:https://docs.ceph.com/en/latest/architecture/
提示:
(1)CRUSH算法是Ceph内部数据对象存储路由的算法。它没有中心节点,即没有元数据中心服务器
(2)无论使用librados,RadosGw,RBD,CephFS哪个客户端来存储数据,最终的数据都会被写入到Rados Cluster
(3)值得注意的是这些客户端和Rados Cluster之间应该有多个存储池(pool),每个客户端类型都有自己的存储池资源
2.3 cep集群的管理方式
Ceph的常用管理接口是一组命令行工具程序,例如rados,ceph,rbd等命令,管理员可以从某个特定的MON节点执行管理操作,但也有人更倾向于使用专用的管理节点。
事实上,专用的管理节点有助于在ceph相关的程序升级或硬件维护期间为管理员提供一个完整的,独立的并隔离于存储集群之外的操作系统,从而避免因重启或意外中断而导致维护操作异常中断。
3 ceph版本选择指南
3.1 ceph版本及生命周期
Name | Initial release | Latest | End of life |
---|---|---|---|
Pacific | 2021-03-31 | 16.2.15 | 2024-03-04 |
Octopus | 2020-03-23 | 15.2.17 | 2022-08-09 |
Nautilus | 2019-03-19 | 14.2.22 | 2021-06-30 |
Mimic | 2018-06-01 | 13.2.10 | 2020-07-22 |
Luminous | 2017-08-01 | 12.2.13 | 2020-03-01 |
Kraken | 2017-01-01 | 11.2.1 | 2017-08-01 |
Jewel | 2016-04-01 | 10.2.11 | 2018-07-01 |
Infernalis | 2015-11-01 | 9.2.1 | 2016-04-01 |
Hammer | 2015-04-01 | 0.94.10 | 2017-08-01 |
Giant | 2014-10-01 | 0.87.2 | 2015-04-01 |
Firefly | 2014-05-01 | 0.80.11 | 2016-04-01 |
Emperor | 2013-11-01 | 0.72.2 | 2014-05-01 |
Dumpling | 2013-08-01 | 0.67.11 | 2015-05-01 |
Date | Reef | Quincy |
---|---|---|
2024-07-24 | 18.2.4 | – |
2024-03-11 | 18.2.2 | – |
2023-12-18 | 18.2.1 | – |
2023-10-30 | – | 17.2.7 |
2023-08-07 | 18.2.0 | – |
2023-04-10 | – | 17.2.6 |
2022-10-19 | – | 17.2.5 |
2022-09-30 | – | 17.2.4 |
2022-07-29 | – | 17.2.3 |
2022-07-21 | – | 17.2.2 |
2022-06-23 | – | 17.2.1 |
2022-04-19 | – | 17.2.0 |
ceph的版本版本选择及生命周期
ceph版本特性:
- 开发版本:x.0.z
- 候选版本:x.1.z
- 稳定版本:x.2.z。如此次使用的ceph18.2.4版本
3.2 ceph部署方式介绍
cephadm
-
使用容器和systemd安装和管理ceph集群并与cli和仪表盘GUI紧密集成
-
仅支持Octopus和更新版本,需要容器和Python3支持
-
与新的编排API完全集成; 需要提前安装docker和python环境,官方推荐方法
rook
- 在Kubernetes中运行的ceph集群,同时还支持通过Kubernete
- 仅支持Nautilus和较新版本的ceph; 需要准备一套k8s环境
ceph-ansible
- 使用ansible部署ceph集群,对于新的编排器功能,管理功能和仪表盘支持不好。 需要你熟练使用ansible功能
ceph-deploy
-
是一个快速部署集群的工具,不支持CentOS 8系统。对于
-
对于O版本也可以部署成功,但是dashboard功能并不友
-
官方已经弃用了,但对于学习来说是一个不错的工具
==提示:==使用Ubuntu基于ceph-deploy部署,建议选择python3.8以前的版本,推荐python 3.6最新版即可。因为python3.8移除了一部分函数库,而ceph-deploy用到了该函数库,否则就报错!
推荐阅读:
https://www.cnblogs.com/yinzhengjie/tag/Ceph/https://docs.ceph.com/en/latest/releases/general/
https://docs.ceph.com/en/latest/install/
https://docs.ceph.com/en/latest/releases/
4 ceph集群管理
01 环境准备
节点 | 额外硬盘 |
---|---|
ceph141 | sdb 300G,sdc 500G |
ceph142 | sdb 300G,sdc 500G, sdd 1000G |
ceph143 | sdb 300G,sdc 500G |
2.ceph所有节点基础环境准备
2.1.基于cephadm部署前提条件,官方提的要求Ubuntu 22.04 LTS出了容器运行时其他都满足- Python 3- Systemd- podman or Docker for running containers- Time synchronization (such as Chrony or the legacy ntpd)- LVM2 for provisioning storage devices参考链接:https://docs.ceph.com/en/latest/cephadm/install/#requirements2.2 设置时区
timedatectl set-timezone Asia/Shanghai
ll /etc/localtime 2.3.安装docker环境2.4 添加hosts文件解析
cat >> /etc/hosts <<EOF
10.0.0.141 ceph141
10.0.0.142 ceph142
10.0.0.143 ceph143
EOF2.5 集群时间同步【可跳过】
参考链接:https://www.cnblogs.com/yinzhengjie/p/14238720.html
02 ceph部署
1.下载需要安装ceph版本的cephadm,然后初始化集群
1.设置环境变量下载指定版本
[root@ceph141~]# CEPH_RELEASE=18.2.4
[root@ceph141~]# curl --silent --remote-name --location \
https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
[root@ceph141~]# ls
cephadm2.将cephadm添加到PATH环境变量
[root@ceph141 ~]# mv cephadm /usr/local/bin/
[root@ceph141 ~]# chmod +x /usr/local/bin/cephadm
[root@ceph141 ~]# ls -l /usr/local/bin/cephadm
-rwxr-xr-x 1 root root 215316 Aug 20 22:19 /usr/local/bin/cephadm3.创建新集群
cephadm bootstrap --mon-ip 10.0.0.141 --cluster-network 10.0.0.0/24 --allow-fqdn-hostname
# 此步骤会去官方下载镜像,可能存在镜像无法拉取问题。拉取时间比较长,1G多
Pulling container image quay.io/ceph/ceph:v18.2.4# 最后提示访问页面URL: https://ceph141:8443/User: adminPassword: xztz3sc8al
查看ceph相关的容器
[root@ceph141~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
dc05d1416659 quay.io/ceph/ceph-grafana:9.4.7 "/bin/sh -c 'grafana…" 4 minutes ago Up 4 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-grafana-ceph141
5ca5bb8f3cd2 quay.io/prometheus/alertmanager:v0.25.0 "/bin/alertmanager -…" 4 minutes ago Up 4 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-alertmanager-ceph141
001734df78dc quay.io/prometheus/prometheus:v2.43.0 "/bin/prometheus --c…" 4 minutes ago Up 4 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-prometheus-ceph141
3cc04e4f7af2 quay.io/prometheus/node-exporter:v1.5.0 "/bin/node_exporter …" 7 minutes ago Up 7 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-node-exporter-ceph141
7f6f02484d0b quay.io/ceph/ceph "/usr/bin/ceph-crash…" 7 minutes ago Up 7 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-crash-ceph141
8df49ff819eb quay.io/ceph/ceph "/usr/bin/ceph-expor…" 7 minutes ago Up 7 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-ceph-exporter-ceph141
e022ac1069a7 quay.io/ceph/ceph:v18 "/usr/bin/ceph-mgr -…" 8 minutes ago Up 8 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-mgr-ceph141-yvswvf
8cc214cdb16b quay.io/ceph/ceph:v18 "/usr/bin/ceph-mon -…" 8 minutes ago Up 8 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-mon-ceph141
5191940317f4 quay.io/ceph/ceph:v18 "ceph --version" 8 minutes ago Created admiring_clarke
监听8443端口的进程是mgr
相关文章:
ceph介绍和搭建
1 为什么要使用ceph存储 什么是对象存储? 对象存储并没有向文件系统那样划分为元数据区域和数据区域,而是按照不同的对象进行存储,而且每个对象内部维护着元数据和数据区域。因此每个对象都有自己独立的管理格式。 对象存储优点:…...
树莓派安装FreeSWITCH
1、下载相关资源: # 假设所有资源都下载到/opt/目录下 cd /opt # 下载FreeSWITCH源码 git clone https://github.com/signalwire/freeswitch # 下载libks源码 git clone https://github.com/signalwire/libks # 下载sofia-sip源码 git clone https://github.com/fr…...
OpenSSL 生成根证书、中间证书和网站证书
OpenSSL 生成根证书、中间证书和网站证书 一、生成根证书(ChinaRootCA)二、生成中间 CA(GuangDongCA)三、生成网站证书(gdzwfw) 一、生成根证书(ChinaRootCA) 创建私钥: …...
MySQL核心业务大表归档过程
记录一下2年前的MySQL大表的归档,当时刚到公司,发现MySQL的业务核心库,超过亿条的有7张表,最大的表有9亿多条,有37张表超过5百万条,部分表行数如下: 在测试的MySQL环境 : pt-archiv…...
dapp获取钱包地址,及签名
npm install ethersimport {ethers} from ethers const accounts await ethereum.request({method: eth_requestAccounts}); // 获取钱包地址 this.form.address accounts[0] console.log("accounts:" this.address)const provider new ethers.BrowserProvider(…...
探索Dijkstra算法的普遍最优性:从经典算法到最新学术突破
引言 在计算机科学中,Dijkstra算法是解决单源最短路径问题的经典算法,尤其在地图导航、网络通信和机器人路径规划等领域有着广泛应用。近期,学术界在此算法上取得了重大突破:研究人员证明了Dijkstra算法的“普遍最优性”ÿ…...
️代码的华尔兹:在 Makefile 的指尖上舞动自动化的诗篇
文章目录 😶🌫️😶🌫️😶🌫️背景——一个优秀工程师必备技能😶🌫️😶🌫️😶🌫️一、🤩🤩快速了解…...
函数式编程Stream流(通俗易懂!!!)
目录 1.Lambda表达式 1.1 基本用法 1.2 省略规则 2.Stream流 2.1 常规操作 2.1.1 创建流 2.1.2 中间操作 filter map distinct sorted limit 编辑skip flatMap 2.1.3 终结操作 foreach count max&min collect anyMatch allMatch noneMatch …...
数据分析:转录组差异fgsea富集分析
文章目录 介绍加载R包数据链接导入数据数据预处理DE testing: 2BP vs no-BP比较limma-voomLoad steroid dataIn No-BP patientsIn 2BP patientsCompare gene expression vs bacterial mass其他系统信息介绍 转录组差异fgsea富集分析是一种基于基因集的富集分析方法,它关注的是…...
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
在Django中可以使用CKEditor4和CKEditor5两个版本,分别对应软件包django-ckeditor和django-ckeditor-5。原来使用的是CKEditor4,python manager.py makemigrations时总是提示CKEditor4有安全风险,建议升级到CKEditor5。故卸载了CKEditor4&…...
AI笔筒操作说明及应用场景
AI笔筒由来: 在快节奏的现代办公环境中,我们一直在寻找既能提升效率、增添便利,又能融入企业文化、展现个人品味的桌面伙伴。为此,我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版,它集高科技与实用性于一身…...
Android自启动管控
1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外,还会导致占用过多的系统CPU和内存资源,造成系统卡顿、发热、电池消耗过快;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…...
把握鸿蒙生态崛起的机遇:开发者视角的探讨
大家好,我是程序员小羊! 前言: 近年来,鸿蒙系统(HarmonyOS)的发展备受瞩目。随着其在智能手机、智能穿戴、车载系统和智能家居等领域的广泛应用,鸿蒙系统正逐渐形成与安卓、iOS并列的三足鼎立…...
MySQL初学之旅(1)配置与基础操作
目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习ÿ…...
一款革命性的视频剪辑工具,AI剪辑新纪元:Clapper
如果说AI视频剪辑工具哪家强?还真想不出有什么让人眼前一亮的AI视频剪辑应用。 毕竟随着AI技术的发展越来越快,各种AI应用如雨后春笋般涌现,然而,真正能够在视频剪辑领域脱颖而出的工具却寥寥无几。 今天我要介绍的 Clapper 就是…...
HTML 区块
HTML 区块 HTML(HyperText Markup Language)是构建网页的标准语言,它定义了网页的结构和内容。在HTML中,区块元素是指那些能够定义较大块状结构的元素,比如段落、标题、列表、表格和 divis 等。这些元素通常对页面的布…...
复杂度的讲解
数据结构可以简单理解为在内存中管理数据 它具有速度快 带电存储的特点(临时存储) 如何衡量一个算法的好坏 因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算…...
[ Linux 命令基础 2 ] Linux 命令详解-系统管理命令
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
使用docker部署Prometheus和Grafana去监控mysql和redis
自动化性能监控系统安装部署 相关工具的安装部署 服务工具分配 服务器工具端口10.0.20.9grafana300010.0.20.9prometheus909010.0.20.10mysql330610.0.20.10mysql-exporter910410.0.20.10redis330610.0.20.10redis_exporter9121 使用docker-compose安装prometheus 先拉取p…...
日志管理 | Log360 实现PCI DSS v4.0数据安全合规要求
PCI DSS 是一项网络安全标准,得到所有主要信用卡和支付处理公司的支持,旨在确保信用卡和借记卡号码的安全。最新的PCI DSS v4.0 代表支付卡行业数据安全标准。 任何依赖信用卡交易的企业都不能将数字安全视为一个偷工减料的领域,因为数据泄露…...
JAVA中的string和stringbuffer
【之前面试测试岗位的时候有被问到这个问题,面试结束后特地来学习一下】 目录 谁先被提出的String的使用StringBuffer的使用两者区别 谁先被提出的 String类先于StringBuffer被提出,作为Java语言的基础部分,而StringBuffer是为了解决实际开…...
轻型民用无人驾驶航空器安全操控------理论考试多旋翼部分笔记
官网:民用无人驾驶航空器综合管理平台 (caac.gov.cn) 说明:一是法规部分;二是多旋翼部分 本笔记全部来源于轻型民用无人驾驶航空器安全操控视频讲解平台 目录 官网:民用无人驾驶航空器综合管理平台 (caac.gov.cn) 一、轻型民用无人…...
计算用户订购率梧桐数据库和oracle数据库sql分析
一、背景说明 移动运营商平台提供多种类型的产品权益,用户可以通过订购来使用。平台需要定期统计各个产品的用户订购情况,以便了解各个产品的受欢迎程度。这些统计数据将用于优化产品、提升用户体验和制定市场推广策略。 二、表结构说明 梧桐数据库建…...
通过DNS服务器架构解释DNS请求过程
在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。 当前网络空间中比较常见DNS请求的流程如下…...
OKG Research:用户意图驱动的Web3应用变革
出品| OKG Research 作者|Samuel QIN 当前加密市场的快速演变中,用户增长成为行业可持续发展的基石。目前主流观点在推动行业前进的路上,从单纯的技术探索在向更注重应用价值的方向转变。尽管近年来Web3生态系统发展迅速…...
hbase 工具类
hbase 工具类 pom.xml <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.5.10-hadoop3</version> </dependency> <dependency><groupId>com.google.guava<…...
会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力
11月10日,2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行,美格智能CEO杜国彬受邀出席,并参与“中央域控:重塑汽车智能架构的未来”主题圆桌论坛讨论,与行业伙伴共同探讨智能网联汽车产业领域…...
在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程
在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程 引言 数据可视化是数据分析的重要组成部分,能够帮助我们更直观地理解数据。Matplotlib 是 Python 中最流行的绘图库之一,而 Jupyter Notebook 则是进行数据分析和可视化的理想环境。本文…...
Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑
一、前言 接上回说到,修改了程序,增加了接口,却不知道有没有什么问题,于是心怀忐忑等了几天。果然过了几天,应用那边的小伙伴报过来了问题。用户证书安装没有问题,系统证书(新增的接口)还是出现了问题。调…...
【C++ 算法进阶】算法提升十三
目录标题 抽牌概率问题 (动态规划)动态规划题目分析代码 洗衣机问题 (贪心)题目题目分析 抽牌概率问题 (动态规划) 动态规划 假设现在有1~N N张牌 每张牌的序号就代表着他的大小 (1 2 … N&am…...
中文域名注册价格/独立站seo外链平台
OpenFileDialog openFileDialog new OpenFileDialog(); //打开的文件选择对话框上的标题 openFileDialog.Title "请选择文件"; //设置文件类型 openFileDialog.Filter "文本文件(*.txt)|*.txt|全部文件(*.*)|*.*"; //设置默认文件类型显示顺序 openFile…...
四川做网站有哪些公司/宣传软文怎么写
在日常工作和生活中,我们经常会遇到一件事情要重复做很多次的这种情况发生。在编程中,我们也会遇到这种情况,循环这种机制,就是专门用来处理这种需要不断重复做的事情的方法。通过几分钟的阅读,你将会掌握这种机制和编…...
做有关兼职网站的需求分析/思亿欧seo靠谱吗
一、基本类型C11标准定义了包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于特殊的场合。例如最常用的,当函数不返回任何值时使用空类型(void)作为返回类…...
网站建设费计入什么科目/灰色词网站seo
高中信息技术 知识7数据类型、常量和变量.pptx01 | 一段似曾相识的代码Dim x As IntegerDim y As IntegerDim z As IntegerDim max As IntegerxVal(Text1.Text)yVal(Text2.Text)zVal(Text3.Text)max0If x>y Then maxx Else maxyIf z>max Then maxzText4.textStr(max)对任…...
wordpress页面打开404错误/有没有好用的网站推荐
MIUI团队是目前国内升级版本最快的一个手机开发团队,相对于其他手机厂商来说,小米手机的升级非常快,基本上旗舰或者次旗舰,发布后都有大的版本迭代,让我们真正体验到安卓新系统的魅力,这也是很多极客甚至玩…...
上海网站推广公司/厦门网站建设公司
功能 说明 查看app通过Log类输出的日志. 日志类型 系统信息,异常时堆栈信息,开发者输出信息. 内容 介绍logcat指令.UI操作可用Android Studio查看. 日志系统 说明 安卓的日志系统是由系统进程logd进行管理.logd将部分日志通过循环链表缓存. 缓存 日志缓冲集合: main,crash,syst…...