ceph (cephadm)集群部署

2023-05-16

ceph 集群部署(cephadm)


方法1: (ansible)

ceph-ansible使用Ansible部署和管理Ceph集群。
(1)ceph-ansible被广泛部署。
(2)ceph-ansible未与Nautlius和Octopus中引入的新的Orchestrator API集成在一起,意味着更新的管理功能和仪表板集成不可用。

方法2:(ceph-deploy)

不再积极维护ceph-deploy。未在Nautilus之前的Ceph版本上进行测试。它不支持RHEL8,CentOS 8或更新的操作系统。

方法3:(cephadm)

版本说明:
ceph版本: Octopus / v15.2.1
安装方式: cephadm
系统版本: Centos8.1
python: python3

节点规划:

主机名ip角色
cmaster10.1.1.12monitor,mgr,rgw,mds,osd
cnode110.1.1.13monitor,mgr,rgw,mds,osd
cnode210.1.1.14monitor,mgr,rgw,mds,osd

节点说明:

monitor:Ceph监视管理节点,承担Ceph集群重要的管理任务,一般需要3或5个节点。
mgr: Ceph 集群管理节点(manager),为外界提供统一的入口。
rgw: Ceph对象网关,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群
mds:Ceph元数据服务器,MetaData Server,主要保存的文件系统服务的元数据,使用文件存储时才需要该组件
osd:Ceph存储节点Object Storage Daemon,实际负责数据存储的节点

初始化环境:

hostnamectl set-hostname master

hostnamectl set-hostname cnode1

hostnamectl set-hostname cnode2
各节点配置hosts:
cat >> /etc/hosts <<EOF
10.1.1.12 cmaster
10.1.1.13 cnode1
10.1.1.14 cnode2

可选命令:for i in {2..3};do scp /etc/hosts root@10.1.1.1$i:/etc/hosts
基础配置:
#关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#配置时间同步
yum install -y chrony
systemctl enable --now chronyd
配置yum源:
#epel源
yum install -y epel-release  (epel-release-8-8.el8.noarch.rpm)
#阿里云ceph源,该源指定了ceph安装版本
cat >/etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for \$basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF

ssh免密配置:

ssh-keygen
...一路Enter
ssh-copy-id root@cmaster  //会有一次密码输入
ssh-copy-id root@cnode1
ssh-copy-id root@cnode2

安装docker :(所有节点操作,包括新增)

#配置阿里云yum源
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装containerd.io
dnf install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
dnf install -y  https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm  --allowerasing

#安装docker-ce
dnf install -y docker-ce

#配置docker镜像加速
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF

#启动docker服务
systemctl enable --now docker

安装cephadm:

下载cephadm脚本: (只在主节点操作)
mkdir my-cluster //没要求,我自己为了方便建的文件夹
cd my-cluster
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm  -o cephadm
或者:
curl https://raw.githubusercontent.com/ceph/ceph/v15.2.1/src/cephadm/cephadm -o cephadm
chmod +x cephadm 
//**//下载出错:配置/etc/hosts 文件--—> 199.232.28.133 raw.githubusercontent.com

安装python3:(所有节点执行)
yum install python3 -y

配置ceph存储库  :(或指定版本)
./cephadm add-repo --release octopus

或

./cephadm add-repo --version 15.2.1

安装适当软件包:
./cephadm install ceph-common  ceph  //可能出现编码格式错误

./cephadm install

修改编码(可选)
   
1. export LANGUAGE=en_US.UTF-8
    
2. export LANG=en_US.UTF-8

引导新集群:

您需要知道用于集群的第一个监视器守护程序的IP地址。
如果有多个网络和接口,要确保选择任何可供访问Ceph群集的主机访问的网络和接口。

mkdir -p /etc/ceph
cephadm bootstrap --mon-ip 10.1.1.12

##### 命令特点:

在本地主机上为新集群创建监视和管理器守护程序。
为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
将与新集群进行通信所需的最小配置文件编写为/etc/ceph/ceph.conf。
将client.admin管理密钥的副本写入/etc/ceph/ceph.client.admin.keyring。
将公用密钥的副本写入 /etc/ceph/ceph.pub。
启动ceph:
该命令在安装了所有Ceph软件包的容器中启动bash shell
cephadm shell
添加新主机到集群:

在新主机的根用户authorized_keys文件中安装群集的公共SSH密钥 :

ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*
例如:
ssh-copy-id -f -i /etc/ceph/ceph.pub root@cnode1
ssh-copy-id -f -i /etc/ceph/ceph.pub root@cnode2

告诉Ceph,新节点是集群的一部分:

ceph orch host add *newhost*
例如
ceph orch host add cnode1
ceph orch host add cnode2

第一次部署新节点时直接用上边的命令即可:
但是之后的节点新增有可能上述命令出错:
ceph orch host add cnode3 10.1.1.x  //后边跟上对应的IP    
部署监视器

如果存在监视器使用的特定IP子网,则可以使用以下命令以CIDR格式(例如10.1.1.0/24)配置该IP子网:

ceph config set mon public_network *<mon-cidr-network>*
例如:
ceph config set mon public_network 10.1.1.0/24

要将监视器部署在一组特定的主机上

# ceph orch apply mon *<number-of-monitors>*
# ceph orch apply mon cmaster,cnode1,cnode2 //确保在此列表中包括第一台(引导)主机。
以下可选

可以通过使用主机标签来控制运行监视器的主机。要将mon标签设置为适当的主机:

ceph orch host label add *<hostname>* mon
例如:
ceph orch host label add cmaster mon
ceph orch host label add cnode1 mon
ceph orch host label add cnode2 mon
要查看当前的主机和标签:
ceph orch host ls

告诉cephadm根据标签部署监视器:

ceph orch apply mon label:mon

可以为每个监视器和控件明确地指定IP地址或CIDR网络。要禁用自动监视器部署:

ceph orch apply mon --unmanaged

要部署其他监视器:

ceph orch apply mon "cmaster,cnode1,cnode2"
# ceph orch daemon add mon *<host1:ip-or-network1> [<host1:ip-or-network-2>...]*
例如,要在newhost1IP地址上部署第二台监视器,10.1.2.123并newhost2在网络中部署第三台监视器10.1.2.0/24:
# ceph orch apply mon --unmanaged
# ceph orch daemon add mon newhost1:10.1.1.123
# ceph orch daemon add mon newhost2:10.1.1.0/24
该命令可能会造成混淆。因此,建议使用YAML规范。
每个“ ceph orch apply mon”命令都将取代之前的命令。
这意味着要将监视器应用于多个主机时,必须使用正确的基于逗号分隔列表的语法
如果使用的语法不正确,那么ceph将无法进行工作。

例如:
# ceph orch apply mon cmaster
# ceph orch apply mon cnode1
# ceph orch apply mon cnode2


这样只会导致一个主机上应用了监视器:主机3。
(第一个命令在host1上创建一个监视器。然后第二个命令在host1上创建一个监视器,然后在host2上创建一个监视器。然后第三个命令在host2上创建一个监视器,然后在host3上创建一个监视器。在这种情况下,此时,在host3上只有一个监视器。)

为了确保将监视器应用于这三个主机,请运行以下命令:
# ceph orch apply mon "cmaster,cnode1,cnode2"
而不是使用“ ceph orch apply mon”命令,而是运行以下命令:
# ceph orch apply -i file.yaml
这是一个示例file.yaml文件:
service_type: mon
placement:
  hosts:
   - cmaster
   - cnode1
   - cnode2

部署osd:

存储设备清单可以显示为:
ceph orch device ls
可用存储设备的条件:
设备必须没有分区。
设备不得具有任何LVM状态。
不得安装设备。
该设备不得包含文件系统。
该设备不得包含Ceph BlueStore OSD。
设备必须大于5 GB。
创建osd的方法:
告诉Ceph使用任何可用和未使用的存储设备:
ceph orch apply osd --all-available-devices
1. ceph orch daemon add osd *<host>*:*<device-path>*
例如:
从特定主机上的特定设备创建OSD:
    ceph orch daemon add osd cmaster:/dev/sdb
    ceph orch daemon add osd cnode1:/dev/sdb
    ceph orch daemon add osd cnode2:/dev/sdb
2. 使用yaml文件定义设备的类型,型号,大小,等信息。完成创建
   ceph orch apply osd -i spec.yml (进行)
删除OSD节点:(安全)
1.停止osd进程
ceph osd stop x  //(x 可以通过ceph osd ls 查看)
停止osd的进程,这个是通知集群这个osd进程不在了,不提供服务了,因为本身没权重,就不会影响到整体的分布,也就没有迁移
2.将节点状态标记为out
ceph osd out osd.x
停止到osd的进程,这个是通知集群这个osd不再映射数据了,不提供服务了,因为本身没权重,就不会影响到整体的分布,也就没有迁移
3. 从crush中移除节点
ceph osd crush remove osd.x
这个是从crush中删除,
4. 删除节点
ceph osd rm osd.x
这个是从集群里面删除这个节点的记录ls
5. 删除节点认证(不删除编号会占住)
ceph auth del osd.x
这个是从认证当中去删除这个节点的信息

**注意**
比如卸载了node3的某osd,(osd.x 即: node:/dev/sdb),在node3上执行以下操作,可以后继续使用node3:/dev/sdb

1. lvremove /dev/ceph-3f728c86-8002-47ab-b74a-d00f4cf0fdd2/osd-block-08c6dc02-85d1-4da2-8f71-5499c115cd3c  // dev 后的参数可以通过lsblk查看
2. vgremove  ceph-3f728c86-8002-47ab-b74a-d00f4cf0fdd2
部署mds:(cephFS元数据守护程序)
ceph orch apply mds *<fs-name>* --placement="*<num-daemons>* [*<host1>* ...]"

例如:
ceph orch apply mds myfs --placement="3 master node1 node2"
部署RGWS:
为特定领域和区域部署一组radosgw守护程序:
ceph orch apply rgw *<realm-name>* *<zone-name>* --placement="*<num-daemons>* [*<host1>* ...]"
例如:要 在myhost1和myhost2上部署两个服务于*<realm-name>*领域和*<zone-name>*区域的rgw守护程序:
# ceph orch apply rgw myorg us-east-1 --placement="2 cmaster cnode1 cnode2"

说明:
myorg : 领域名  (realm-name)
us-east-1: 区域名 (zone-name)myrgw

Cephadm将等待运行正常的群集,并在部署rgw守护程序之前自动创建所提供的领域和区域(realm-name和zone-name不存在的情况)

可以使用以下radosgw-admin命令手动创建领域,区域组和区域:
(添加osd后下边的命令才会成功执行)

# radosgw-admin realm create --rgw-realm=<realm-name> --default
radosgw-admin realm create --rgw-realm=myrgw --default

# radosgw-admin zonegroup create --rgw-zonegroup=<zonegroup-name>  --master --default
radosgw-admin zonegroup create --rgw-zonegroup=myzg  --master --default

# radosgw-admin zone create --rgw-zonegroup=<zonegroup-name> --rgw-zone=<zone-name> --master --default
radosgw-admin zone create --rgw-zonegroup=myzg --rgw-zone=myzone --master --default

# radosgw-admin period update --rgw-realm=<realm-name> --commit
radosgw-admin period update --rgw-realm=myrgw --commit
为RGW开启dashborad

此处请看(s3客户端配置)

部署NF网络文件系统:
要部署NFS Ganesha网关,请执行以下操作:
# ceph orch apply nfs *<svc_id>* *<pool>* *<namespace>* --placement="*<num-daemons>* [*<host1>* ...]"
例如,同一个服务ID部署NFS FOO,将使用RADOS池NFS和命名空间NFS-NS,:
# ceph orch apply nfs foo nfs-ganesha nfs-ns
ceph fs 部署:
ceph fs volume create *myfs*   //自定义文件系统名

此命令回自动创建cephfs_date 和 cephfs_matedata 两个池



创建:
ceph osd pool create cephfs_data  <pg_num>  // 可指定pg 数,默认最高副本级,128pg
ceph osd pool create cephfs_metadata  <pg_num> //可指定pg数

创建文件系统:
ceph fs new <fs_name> <metadata> <data>  
例如:
ceph fs new myfs cephfs_metadata cephfs_data
ceph fs ls  //进行fs 的查看
在CEPHFS中使用擦除编码池:(官网内容,可选)
您可以将擦除编码池用作CephFS数据池,只要它们启用了覆盖即可,操作如下:
ceph osd pool set my_ec_pool allow_ec_overwrites true

请注意,仅当将OSDS与BlueStore后端一起使用时,才支持EC覆盖。
挂载文件系统:
启用密钥挂载:
1. (osd节点执行)
mkdir /mnt/mycephfs
2. (cephadm 版本,在主节点执行)
    1) cat /etc/ceph/ceph.client.admin.keyring   //获取admin密钥,保存为admin.secret  ,也可以不保存
    2) vi admin.secret
    3) 挂载cephfs (cnode1,cnode2为osd节点)
        3.1: mount -t ceph cnode1:6789,cnode2:6789:/ /mnt/mycephfs -o name=admin,secretfile=/root/admin.secret
        或  (AQD5ZORZsJYbMhAAoGEw/H9SGMpEy1KOz0WsQQ==)第一步所得密钥
        3.2: mount -t ceph master:6789,node1:6789,node2:6789:/ /mnt/mycephfs -o name=admin,secret=AQD5ZORZsJYbMhAAoGEw/H9SGMpEy1KOz0WsQQ==   
关闭密钥挂载:
mount -t ceph cnode1:6789:/ /mnt/mycephfs

永久挂载:
添加以下内容到/etc/fstab
[{ipaddress}:{port}]:/ {mount}/{mountpoint} ceph [name=username,secret=secretkey|secretfile=/path/to/secretfile],[{mount.options}]
例如:
10.1.1.8:6789/ /mnt/mycephfs ceph name=admin,secretfile=/etc/ceph/admin.secret 0 2

卸载文件系统:
umount /mnt/mycephfs
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ceph (cephadm)集群部署 的相关文章

  • ceph 17版本:使用cephadm部署单节点集群

    ceph 17版本 xff1a 使用cephadm部署17 2版本的单节点集群 文章目录 前言一 环境版本信息二 基础环境部署1 服务器准备2 配置DNS3 安装时间服务4 关闭防火墙5 安装docker服务5 安装lvm服务 二 ceph
  • 【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)

    目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数 xff1a FIO结果说明 I O 的重放 xff08 39 录 39 下实际工况的IO xff0c 用fio 39 重放 39 xff09 fi
  • Ceph运维操作

    1 操控集群 1 1 UPSTART Ubuntu系统下 xff0c 基于ceph deploy部署集群后 xff0c 可以用这种方法来操控集群 列出节点上所有Ceph进程 xff1a start ceph all 启动节点上特定类型的Ce
  • K8S集群部署

    环境准备 由于k8s 集群比较吃配置 xff0c 使用 按量计费 来进行学习 xff0c 三台 4核8G 的费用大概再 1 6元 小时 三台云服务器 配置 xff1a 2核2G 三台服务器内网互通 xff08 内网可以互相访问 VPC xf
  • Ceph文件存储-挂载文件系统

    文章目录 1 创建文件系统1 1 方法11 2 方法2 2 挂载文件系统3 卸载 1 创建文件系统 1 1 方法1 span class token number 1 span 创建存储池 ceph osd pool create tgmf
  • 手把手带你部署Ceph集群

    前言 xff1a Ceph作为开源的分布式文件系统 xff0c 可以轻松地将存储容量扩展到PB以上并拥有不错的性能 Ceph提供对象存储 块存储和文件系统三种存储方式 xff0c 如果不想花时间安装ceph xff0c 可以通过ceph d
  • ceph学习(3)——rbd-mirror双机热备

    一 概述 本文主要关注于rbd mirror的使用以及使用过程中的遇到的问题 二 环境准备 ceph版本 14 2 16 服务器 3台centos7服务器 ceph1 ceph2 ceph3 硬盘 每台服务器1块10GB以上硬盘做osd 分
  • ceph学习(故障恢复)——mon全部故障,从osd中恢复集群

    在生产环境中 ceph集群要求最少配置3个MON 一般情况下很少出现3个MON同时挂掉的情况 但是也不排除出现这种情况的可能 如果集群中的所有MON都损坏了 是不是集群数据就丢失了呢 能不能恢复集群 当然是可以的 ceph中国的一位开发者写
  • k8s使用ceph rbd

    环境 节点 k8s角色 ceph 安装组件 192 168 122 120 k8s master ceph admin mon1 osd0 osd1 osd2 osd9 192 168 122 121 k8s slave1 ceph mon
  • PG概述及OSD对PG状态的影响

    前言 随着分布式存储的广泛应用 目前对PG的关注越来越多 本文基于ONStor分布式存储系统简要介绍一下PG的状态变化 重点说明OSD对PG状态的影响 一 Ceph分布式存储概述 Ceph是一个统一的分布式存储系统 设计初衷是提供较好的性能
  • cephadm快速部署指定版本ceph集群

    官方文档 https docs ceph com en pacific 1 虚拟机规划 主机名 IP 角色 ceph1 192 168 150 120 cephadm mon mgr osd ceph2 192 168 150 121 mo
  • ceph-deploy命令应用

    记录 336 场景 在CentOS 7 9操作系统上 使用ceph deploy创建ceph集群 部署集群的mon mgr mds osd rgw等组件 版本 操作系统 CentOS 7 9 ceph版本 ceph 13 2 10 名词 c
  • 学一点Ceph知识:初识Ceph

    Ceph是什么 Ceph是一个开源的分布式存储系统 可大规模扩展 高性能 无单点故障 在普通的服务器上可以支持到PB级容量 商用机器上支持的容量可以达到EB级别 Ceph的竞争力 市面上提供云存储的分布式系统如阿里云的OSS 底层存储框架为
  • ceph环境清理

    第一步 在 root ceph 目录下执行 第一个节点 ceph deploy purge ceph01 ceph02 ceph03 ceph04 ceph deploy purgedata ceph01 ceph02 ceph03 cep
  • ceph安装部署

    Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储 软件定义的存储 SDS Ceph 架构 Ceph 核心组件 编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph
  • springboot + 读写分离+redis集群+集群部署

    记录一次 集群部署springboot 项目 1 nginx 使用 upstream 进行集群管理 upstream serviceGroup server 127 0 0 1 9090 server xxxxx 9090 server x
  • Ceph入门到精通-存储集群ceph df 用量统计算法说明

    3 2 5 Ceph 如何计算数据使用量 used 值反映了使用的实际原始存储量 xxx GB xxx GB 代表可用的存储 其中较小的数字 和总存储容量 总容量反映了在复制 克隆或快照前存储数据的大小 因此 实际存储的数据量通常会超过名义
  • ceph 维护系列(二)--卸载osd

    一 摘要 本文主要介绍从ceph 某台节点上卸载一块或者多块osd 硬盘 二 环境信息 2 1 操作系统版本 root proceph05 cat etc centos release CentOS Linux release 7 6 18
  • rdb map出錯rbd sysfs write failed

    創建了一個rbd鏡像 rbd create size 4096 docker test 然後 在Ceph client端將該rbd鏡像映射為本地設備時出錯 rbd map docker test name client admin rbd
  • Ceph入门到精通-smartctl 查看硬盘参数

    smartctl 参数含义 Model Family Toshiba s Enterprise Capacity HDD Device Model TOSHIBA MG08ACss Serial Number sssssss LU WWN

随机推荐

  • Linux gzip gunzip(压缩与解压缩)命令

    gzip xff1a 压缩命令 格式 xff1a gzip 源文件 xff08 不保留源文件 xff09 例 xff1a 格式 xff1a gzip r 目录 xff08 只能压缩目录下的文件 xff0c 不能压缩目录 xff09 例 xf
  • 猿创征文|Spring5梦开始的地方:入门必看

    x1f6d2 本文收录与专栏 xff1a Spring5 专栏 x1f4e2 专栏目的是记录学习攻克难点 xff0c 与各位一路同行 xff0c 会持续输出 xff0c 欢迎免费订阅 xff01 xff01 阅己 xff0c 越己 xff0
  • 2022年互联网大厂的中秋仪式感

    续上篇2021年互联网大厂的中秋仪式感 xff0c 最新的2022年互联网大厂中秋仪式感来了 目录 中秋礼盒 x1f96e 创新乐知阿里巴巴腾讯字节跳动京东网易百度新浪美团哔哩哔哩小红书华为小米大疆知乎快手 中秋礼盒 x1f96e 创新乐知
  • 结构体的冒泡排序

    C 数组允许定义可存储相同类型数据项的变量 xff0c 结构是 C 编程中另一种用户自定义的可用的数据类型 xff0c 它允许您存储不同类型的数据项 首先要先定义结构体类型 xff0c 再定义相应的结构体变量 xff0c 定义结构体类型的一
  • ftp外网访问小知识

    ftp是一种处于应用层的用于文件传输的协议 是基于TCP协议的应用层协议 xff0c 用于在网络上传输文件 ftp协议较其他网络协议更为复杂 xff0c 与一般的C S应用不同点在于 xff1a 一般的C S应用程序只会建立一个Socket
  • Mybatis_plus使用自定义sql 查询并分页时,sql后自己添加LIMIT ? OFFSET?

    64 Select IPage lt Map gt select String batchId String type String tableName Page lt T gt page Page lt DLGMetaDataField
  • C语言程序设计课后习题:利润问题

    题目 xff1a 使用switch 或者 if 语句完成 注 xff1b 此代码没有问题但在qinglen下不会通过 企业发放的奖金根据利润提成 利润 I 低于或等于100000元时 奖金可提10 xff1b 利润高于100000元 低于2
  • Ubuntu显示lines 1-14/14(end)

    Ubuntu下载MySQL xff0c 运行MySQL时 xff0c 终端显示这个 xff0c 一直退出不了 xff0c 我查了之后以为是要你输入密码 xff0c 结果不行 xff0c 然后搜到按q键退出 xff0c md
  • 3Dslicer在windows下源码编译源码并打包程序亲测可用

    对于医疗图像数据可视化有一些比较成熟的开源软件库 xff0c 其中包括volview 2011年已经停止维护和更新 xff0c MITK xff08 德国非中科大版 xff09 xff0c 3Dslicer和ITK SNAP 3Dslice
  • mysql 8.0以上重置密码

    命令行都要以管理员运行 1 xff1a net stop mysql 停止mysql服务 2 xff1a mysqld console skip grant tables shared memory 启动MySQL服务的时候跳过权限表认证
  • 硬件iic与软件iic的正确使用

    MCU中常见的通讯方式 xff1a USART SPI CAN 485 Bluetooth WIFI 4G xff0c 而IIC是除这些外另一种通讯方式 对于STC的MCU只能用软件IIC xff0c 对于stm8和stm32的MCU可以用
  • Linux连接外网

    1 右键虚拟机 xff0c 选择设置 2 点击网络适配器 xff0c 选择NAT模式 xff0c 点击确认 xff0c 返回 3 点击右上角区域 xff0c 点击小圆圈有钳子样的图标 xff0c 进入设置界面 xff0c 点击网络并打开 4
  • C基础 输入一个日期判断是否为闰年 并计算是这一年的第几天

    1 首先要搞清闰年的判断方法 闰年 xff1a xff08 1 xff09 如果year能够被4整除 xff0c 但是不能被100整除 xff0c 则year是闰年 xff08 2 xff09 如果year能够被400整除 xff0c 则y
  • C语言经典题目50题

    程序1 题目 xff1a 有1 2 3 4个数字 xff0c 能组成多少个互不相同且无重复数字的三位数 xff1f 都是多少 xff1f 1 程序分析 xff1a 可填在百位 十位 个位的数字都是1 2 3 4 组成所有的排列后再去 掉不满
  • 用c语言多种实现快速排序(有完整代码带注释)

    快速排序是一种把大问题分成小问题的算法 它的目的是把一个无序的数组变成有序的数组 它的思想如下 xff1a 首先选择数组的第一个数作为 中间值 然后把数组分成两半 xff0c 左边的数都比中间值小 xff0c 右边的数都比中间值大 对左边和
  • MySQL 8.0.29 设置和修改默认密码

    MySQL 8 0 29 设置和修改默认密码 修改密码 xff1a 登录时因为你没设置root的初始密码 xff0c 导致报错 密码以加密的形式存储在mysql数据库中的user表中的authentication string字段中 参考链
  • Manjaro Linux / Arch Linux 换源命令

    span class token function sudo span pacman mirrors i c China m rank 输入密码 xff0c 选择最快的源
  • C语言中形参和实参对类型的要求

    实参 xff1a 常量 变量 表达式 函数等任意类型 形参 xff1a 变量 xff0c 在被定义的函数中 xff0c 必须指定形参的类型 形式参数就是定义函数名和函数体时需要用的参数 xff0c 目的是用来接收调用该函数时传递的参数 实际
  • 位操作符【左移、右移、按位取反、按位与、按位或、按位异或】【详解】

    本期介绍 x1f356 主要介绍 xff1a 位操作符有哪些 xff0c 位操作符操作的对象 xff0c 整数在内存中是如何存放的 xff0c 有哪些位操作符 xff0c 各自又都具备何种功能 x1f440 文章目录 一 前言二 整数在内存
  • ceph (cephadm)集群部署

    ceph 集群部署 cephadm 方法1 xff1a ansible ceph ansible使用Ansible部署和管理Ceph集群 xff08 1 xff09 ceph ansible被广泛部署 xff08 2 xff09 ceph