Ceph分布式存储集群搭建

一.Ceph分布式存储	(1)Ceph概念:Ceph是一种高性能、可扩展的分布式存储系统,它提供了对象存储、块存储和文件系统存储三种存储接口,Ceph的设计目标是提供无单点故障的、高性能的、可扩展的存储解决方案,同时能够降低存储成本。(2)常用分布式存储方案LustreHadoopFastDFSGlusterFSCeph(3)Ceph集群(服务)的组成部分(可理解为5个服务)1)MON(Monitor)监视器,监控与地图负责监控Ceph集群的整体状态、配置信息和监控数据,为了高可用性,通常至少需要三台Monitor.2)MGR(Manager)管理器负责管理集群,包括集群状态监控、元数据管理、REST API接口等.高可用性至少两台Manager.3)OSD(Object Storage Daemon)负责存储数据和处理数据的复制、恢复和再平衡.4)MDS(Metadata Server)MDS用于支持Ceph文件系统 (CephFS),负责维护文件系统的元数据.5)RGW(RADOS Gateway)RGW是Ceph提供的对象存储,兼容S3和Swift协议.二.Cephadm脚本安装ceph-common包,命令行可以补全2.Cephadm 命令: Cephadm 命令 --helpcephadm bootstrap:初始化集群cephadm ls:列出主机上cephadm已知的守护程序实例。cephadm logs:打印守护程序容器的journald日志。cephadm join:将其他节点加入Ceph集群。三.ceph集群搭建				1.Ceph搭建,实验环境准备虚拟机准备:所有主机至少2G内存,关闭防火墙和SELinuxceph1-->192.168.88.11-->额外3块硬盘ceph2-->192.168.88.12-->额外3块硬盘ceph3-->192.168.88.13-->额外3块硬盘client-->192.168.88.102.ceph搭建前置准备工作(1)配置所有节点主机名解析# 192.168.88.240必须解析为quay.io!!!:公开的域名,存放ceph的镜像文件[root@pubserver ceph]# vim 01_update_hosts.yml---- name: update hostshosts: alltasks:- name: add host resolv     #修改/etc/hosts文件添加主机名映射blockinfile:path: /etc/hostsblock: |192.168.88.10 client192.168.88.11 ceph1192.168.88.12 ceph2192.168.88.13 ceph3192.168.88.240  quay.io :公开的域名,存放ceph的镜像文件(这里做的假的)(2)配置yum仓库和时间同步服务 1)服务端:yum -y install chronyvim /etc/chrony.conf...25 allow 192.168.88.0/24   #允许88网段主机同步时间26  27 # Serve time even if not synchronized to a time source.28 local stratum 10        #向下10层同步时间...systemctl enable chronyd            #设置服务开机自启动systemctl restart chronyd           #重启chronyd服务2)客户端通过ansible使用时间系统角色配置yum list | grep roles  #查看系统角色包3.ceph集群的搭建镜像准备工作(1)ceph节点安装podman或docker,lvm2软件---- name: install pkgshosts: cephtasks:- name: install pkgs    #安装必备软件yum:name: python39,podman,lvm2state: present(2)搭建私有ceph镜像仓库1)scp上传相关的镜像包到控制机5个镜像文件+2个软件包altermanager_v0.23.0.tar :告警模块镜像ceph-grafana_8.3.5.tar :监控和可视化Ceph集群的性能和状态镜像 prometheus_v2.33.4.tar:系统监控和警报工具包镜像node-exporter_v1.3.1.tar:采集到机器的CPU、内存、磁盘等信息镜像        ceph_v17.tar : Ceph 分布式存储的镜像,包括5大服务cephadm #ceph的操作工具#Docker Distribution 是 Docker 的一个工具包,用于打包、运输、存储和发送 Docker 镜像docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm  2)调整私有仓库端口:这里是教学环境为了可以成功下载镜像#安装软件包yum -y localinstall docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm #调整端口[root@pubserver ~]#vim /etc/docker-distribution/registry/config.yml version: 0.1log:fields:service: registrystorage:cache:layerinfo: inmemoryfilesystem:rootdirectory: /var/lib/registryhttp:addr: :80       #端口由5000调整为80,必须调整,否则后续下载镜像时会有报错systemctl enable docker-distribution.service --nowcurl http://localhost/v2/_catalog{"repositories":[]}     #查看本地仓库的镜像,此时仓库为空3)控制机配置域名解析,模拟官方网站vim /etc/hosts192.168.88.240 quay.io4)配置私有仓库地址vim /etc/containers/registries.conftail -3 /etc/containers/registries.conf[[registry]]location = "quay.io"    #指定了容器仓库的地址,这里的实验映射到本机insecure = true         #可以使用http协议5)控制机导入Ceph相关镜像到本地其导入到本地的Podman镜像库中,导入成功后,用户就可以在Podman中看到这个镜像.[root@pubserver ceph-server]# for i in *.tar    > do> podman load -i $i> done6)将镜像推送到私有,远程仓库podman push命令用于将镜像推送到远程仓库,以便其他用户可以下载和使用。[root@pubserver ceph-server]#podman push quay.io/ceph/ceph:v17 podman push quay.io/ceph/ceph-grafana:8.3.5 podman push quay.io/prometheus/prometheus:v2.33.4podman push quay.io/prometheus/node-exporter:v1.3.1podman push quay.io/prometheus/alertmanager:v0.23.0 验证私有仓库中Ceph镜像保存情况[root@pubserver ceph-server]# curl http://quay.io/v2/_catalog7)配置Ceph节点机器使用私有镜像仓库地址---- name: config private registryhosts: cephtasks:- name: add quay.io #配置私有registry仓库blockinfile:path: /etc/containers/registries.confblock: |[[registry]]location = "quay.io"insecure = true建议搭建Ceph集群前临时撤掉Ceph节点网关,禁止Ceph节点连接公网,防止去公网拉取镜像ansible ceph -m shell -a "route del default gw 192.168.88.254"4.ceph集群搭建步骤流程Ceph在使用过程中是无中心化结构,但搭建过程中选择集群某一个节点作为初始化管理节点,然后扩容其他节点1)利用cephadm脚本初始化ceph集群[root@ceph1 ~]# ./cephadm bootstrap \	           #初始化集群 > --mon-ip 192.168.88.11 \                  #指定初始化节点IP地址> --initial-dashboard-password=123456 \     #指定dashboard面板密码> --dashboard-password-noupdate             #不更新dashboard面板密码2)同步ceph密钥Ceph 集群通常由多个节点组成,包括监视器(MON)、对象存储守护进程(OSD)和管理器(MGR)等通过将 Ceph 公钥同步到所有节点,可以简化管理员通过 SSH 登录到这些节点的过程,无需每次输入密码。ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph1 #-f强制 3)扩容ceph集群ceph orch host add ceph2 192.168.88.12  #将ceph2加入集群4)绑定OSD服务ceph orch daemon add osd ceph1:/dev/vdb #绑定单个硬盘ceph orch apply osd --all-available-device #OSD绑定所有可用状态硬盘5)确认集群状态ceph -s5.ceph orch 集群服务管理的命令。ceph orch ls:列出Ceph 集群中运行的服务。ceph orch ps:查看Ceph集群所有的容器,列出 Ceph 集群中运行的状态,健康状态、运行节点等信息ceph orch device ls:列出所有Ceph集群节点上的可用存储设备ceph orch ps --daemon-type=mon  #3个容器ceph orch host ls :要列出与集群关联的所有主机ceph orch host add <hostname> [<ip>] [<label1> ...]:将新主机添加到 Ceph 集群中ceph orch apply:配置应用于 Ceph 集群,用于部署新服务、更新或删除服务。如 osd、mon、mgr等ceph orch rm:此命令用于从 Ceph 集群中删除服务ceph orch upgrade:将 Ceph 集群升级到新版本ceph orch service restart:重启指定的服务(如 OSD 等)ceph orch daemon add:在指定的主机上添加一个新的守护进程实例。ceph orch daemon rm:从指定的主机上删除一个守护进程实例(守护进程:osd,mon,等)。ceph orch device ls|osd create:此命令用于查看存储设备列表或创建 OSD。6.Ceph集群相关容器的命令1、集群管理命令查看集群健康状态ceph -s:显示集群的简要状态和健康状况。ceph health detail:显示集群健康状态的详细信息。显示集群的容量和使用情况ceph df2、监视器(MON)管理命令查看MON状态信息ceph mon stat:显示MON的状态信息,包括集群中的MON节点、选举状态等。查看MON的选举状态ceph quorum_status:显示MON的选举状态和仲裁信息。查看MON的映射信息ceph mon dump:输出MON的映射信息。删除MON节点ceph mon remove <mon-name>:从集群中删除指定的MON节点。4、对象存储守护进程(OSD)管理命令查看OSD状态ceph osd stat:显示OSD的简要状态信息。查看OSD树形结构ceph osd tree:以树形结构显示OSD的层级关系。查看OSD磁盘使用情况ceph osd df:显示OSD的磁盘使用情况。将OSD设置为down状态ceph osd down <osd-id>:将指定的OSD设置为down状态。将OSD重新加入集群ceph osd in <osd-id>:将之前设置为down的OSD重新加入集群。将OSD踢出集群ceph osd out <osd-id>:将指定的OSD踢出集群。4、存储池(Pool)管理命令列出所有存储池ceph osd pool ls:列出集群中的所有存储池。查看存储池详细信息ceph osd pool ls detail:列出存储池的详细信息。创建存储池ceph osd pool create <pool-name>:创建新的存储池。删除存储池ceph osd pool delete <pool-name> :删除指定的存储池。设置存储池副本数ceph osd pool set <pool-name> size <replica-count>:设置存储池的副本数。获取存储池副本数ceph osd pool get <pool-name> size:获取存储池的副本数。设置存储池配额ceph osd pool set-quota <pool-name> :设置存储池的对象数或容量配额。重命名存储池ceph osd pool rename <old-pool-name> <new-pool-name>:重命名指定的存储池。5、Placement Groups(PG)管理命令列出所有PGceph pg ls:列出集群中的所有PG。查看PG的副本分布ceph pg map <pg-id>:查看指定PG的副本分布在哪些OSD上。执行PG修复ceph pg repair <pg-id>:尝试修复指定的PG。执行数据一致性校验ceph pg scrub <pg-id> 或 deep-scrub <pg-id>:执行数据一致性校验或深度校验。6、元数据服务器(MDS)管理命令查看MDS状态ceph mds stat:显示MDS的状态信息查看MDS的映射信息ceph mds dump:输出MDS的映射信息。删除MDS节点ceph mds rm <mds-id> <mds-name>:从集群中删除指定的MDS节点。7、其他常用命令查看Ceph日志ceph-conf --name <daemon-name> --show-config-value log_file:查看指定守护进程的日志文件路径。启动或停止Ceph服务systemctl start/stop/restart ceph.target。

一.Ceph分布式存储    
        (1)Ceph概念:Ceph是一种高性能、可扩展的分布式存储系统,它提供了对象存储、块存储和文件系统存储三种存储接口,Ceph的设计目标是提供无单点故障的、高性能的、可扩展的存储解决方案,同时能够降低存储成本。

        (2)常用分布式存储方案
            Lustre
            Hadoop
            FastDFS
            GlusterFS
            Ceph
        

        (3)Ceph集群(服务)的组成部分(可理解为5个服务)
        
            1)MON(Monitor)监视器,监控与地图
            负责监控Ceph集群的整体状态、配置信息和监控数据,为了高可用性,通常至少需要三台Monitor.
    
            2)MGR(Manager)管理器
            负责管理集群,包括集群状态监控、元数据管理、REST API接口等.高可用性至少两台Manager.
                    
            3)OSD(Object Storage Daemon)
                负责存储数据和处理数据的复制、恢复和再平衡.
    
            4)MDS(Metadata Server)
                MDS用于支持Ceph文件系统 (CephFS),负责维护文件系统的元数据.
    
            5)RGW(RADOS Gateway)
                RGW是Ceph提供的对象存储,兼容S3和Swift协议.

二.Cephadm脚本
        安装ceph-common包,命令行可以补全
        2.Cephadm 命令: Cephadm 命令 --help
                    
            cephadm bootstrap:初始化集群
            
            cephadm ls:列出主机上cephadm已知的守护程序实例。
                    
            cephadm logs:打印守护程序容器的journald日志。
                
            cephadm join:将其他节点加入Ceph集群。

三.ceph集群搭建                
    1.Ceph搭建,实验环境准备
        虚拟机准备:所有主机至少2G内存,关闭防火墙和SELinux
        ceph1-->192.168.88.11-->额外3块硬盘
        ceph2-->192.168.88.12-->额外3块硬盘
        ceph3-->192.168.88.13-->额外3块硬盘
        client-->192.168.88.10

    2.ceph搭建前置准备工作

        (1)配置所有节点主机名解析
           # 192.168.88.240必须解析为quay.io!!!:公开的域名,存放ceph的镜像文件
            [root@pubserver ceph]# vim 01_update_hosts.yml
            ---
            - name: update hosts
              hosts: all
              tasks:
                - name: add host resolv     #修改/etc/hosts文件添加主机名映射
                  blockinfile:
                    path: /etc/hosts
                    block: |
                      192.168.88.10 client
                      192.168.88.11 ceph1
                      192.168.88.12 ceph2
                      192.168.88.13 ceph3
                      192.168.88.240  quay.io :公开的域名,存放ceph的镜像文件(这里做的假的)
          (2)配置yum仓库和时间同步服务 
            1)服务端:
                 yum -y install chrony
                 vim /etc/chrony.conf
                    ...
                     25 allow 192.168.88.0/24   #允许88网段主机同步时间
                     26  
                     27 # Serve time even if not synchronized to a time source.
                     28 local stratum 10        #向下10层同步时间
                ...
                 systemctl enable chronyd            #设置服务开机自启动
                 systemctl restart chronyd           #重启chronyd服务
            2)客户端
                通过ansible使用时间系统角色配置
                yum list | grep roles  #查看系统角色包
        
    3.ceph集群的搭建镜像准备工作

        (1)ceph节点安装podman或docker,lvm2软件
            ---
            - name: install pkgs
            hosts: ceph
            tasks:
               - name: install pkgs    #安装必备软件
                 yum:
                   name: python39,podman,lvm2
                 state: present

        (2)搭建私有ceph镜像仓库

            1)scp上传相关的镜像包到控制机
        
                5个镜像文件+2个软件包
                altermanager_v0.23.0.tar :告警模块镜像
                ceph-grafana_8.3.5.tar :监控和可视化Ceph集群的性能和状态镜像 
                prometheus_v2.33.4.tar:系统监控和警报工具包镜像
                node-exporter_v1.3.1.tar:采集到机器的CPU、内存、磁盘等信息镜像        
                ceph_v17.tar : Ceph 分布式存储的镜像,包括5大服务
                cephadm #ceph的操作工具
            #Docker Distribution 是 Docker 的一个工具包,用于打包、运输、存储和发送 Docker 镜像
                docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm  
        
            2)调整私有仓库端口:这里是教学环境为了可以成功下载镜像
            #安装软件包
            yum -y localinstall docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm 
            #调整端口
            [root@pubserver ~]#vim /etc/docker-distribution/registry/config.yml 
                version: 0.1
                log:
                  fields:
                    service: registry
                storage:
                    cache:
                        layerinfo: inmemory
                    filesystem:
                        rootdirectory: /var/lib/registry
                http:
                    addr: :80       #端口由5000调整为80,必须调整,否则后续下载镜像时会有报错
            systemctl enable docker-distribution.service --now
            curl http://localhost/v2/_catalog
            {"repositories":[]}     #查看本地仓库的镜像,此时仓库为空

            3)控制机配置域名解析,模拟官方网站
                vim /etc/hosts
                192.168.88.240 quay.io
            
            4)配置私有仓库地址
                vim /etc/containers/registries.conf
                tail -3 /etc/containers/registries.conf
                [[registry]]
                location = "quay.io"    #指定了容器仓库的地址,这里的实验映射到本机
                insecure = true         #可以使用http协议


            5)控制机导入Ceph相关镜像到本地
                其导入到本地的Podman镜像库中,导入成功后,用户就可以在Podman中看到这个镜像.
                [root@pubserver ceph-server]# for i in *.tar    
                > do
                > podman load -i $i
                > done
            
            6)将镜像推送到私有,远程仓库
                podman push命令用于将镜像推送到远程仓库,以便其他用户可以下载和使用。
                [root@pubserver ceph-server]#podman push quay.io/ceph/ceph:v17 
                podman push quay.io/ceph/ceph-grafana:8.3.5 
                podman push quay.io/prometheus/prometheus:v2.33.4
                podman push quay.io/prometheus/node-exporter:v1.3.1
                podman push quay.io/prometheus/alertmanager:v0.23.0 
                验证私有仓库中Ceph镜像保存情况
                [root@pubserver ceph-server]# curl http://quay.io/v2/_catalog
            
            7)配置Ceph节点机器使用私有镜像仓库地址
                ---
                - name: config private registry
                  hosts: ceph
                  tasks:
                    - name: add quay.io #配置私有registry仓库
                      blockinfile:
                        path: /etc/containers/registries.conf
                        block: |
                          [[registry]]
                          location = "quay.io"
                          insecure = true
                 建议搭建Ceph集群前临时撤掉Ceph节点网关,禁止Ceph节点连接公网,防止去公网拉取镜像
                      ansible ceph -m shell -a "route del default gw 192.168.88.254"

    4.ceph集群搭建步骤流程
    Ceph在使用过程中是无中心化结构,但搭建过程中选择集群某一个节点作为初始化管理节点,然后扩容其他节点
        
        1)利用cephadm脚本初始化ceph集群
        
        [root@ceph1 ~]# ./cephadm bootstrap \               #初始化集群 
            > --mon-ip 192.168.88.11 \                  #指定初始化节点IP地址
            > --initial-dashboard-password=123456 \     #指定dashboard面板密码
            > --dashboard-password-noupdate             #不更新dashboard面板密码

        2)同步ceph密钥
        Ceph 集群通常由多个节点组成,包括监视器(MON)、对象存储守护进程(OSD)和管理器(MGR)等
        通过将 Ceph 公钥同步到所有节点,可以简化管理员通过 SSH 登录到这些节点的过程,无需每次输入密码。
            ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph1 #-f强制 
        
        3)扩容ceph集群
            ceph orch host add ceph2 192.168.88.12  #将ceph2加入集群
                
        4)绑定OSD服务
            ceph orch daemon add osd ceph1:/dev/vdb #绑定单个硬盘
            ceph orch apply osd --all-available-device #OSD绑定所有可用状态硬盘

        5)确认集群状态
            ceph -s

    5.ceph orch 集群服务管理的命令。

        ceph orch ls:列出Ceph 集群中运行的服务。

        ceph orch ps:查看Ceph集群所有的容器,列出 Ceph 集群中运行的状态,健康状态、运行节点等信息

        ceph orch device ls:列出所有Ceph集群节点上的可用存储设备

        ceph orch ps --daemon-type=mon  #3个容器

        ceph orch host ls :要列出与集群关联的所有主机

        ceph orch host add <hostname> [<ip>] [<label1> ...]:将新主机添加到 Ceph 集群中

        ceph orch apply:配置应用于 Ceph 集群,用于部署新服务、更新或删除服务。如 osd、mon、mgr等

        ceph orch rm:此命令用于从 Ceph 集群中删除服务

        ceph orch upgrade:将 Ceph 集群升级到新版本

        ceph orch service restart:重启指定的服务(如 OSD 等)

        ceph orch daemon add:在指定的主机上添加一个新的守护进程实例。

        ceph orch daemon rm:从指定的主机上删除一个守护进程实例(守护进程:osd,mon,等)。

        ceph orch device ls|osd create:此命令用于查看存储设备列表或创建 OSD。

    6.Ceph集群相关容器的命令
    
        1、集群管理命令
        
            查看集群健康状态
                ceph -s:显示集群的简要状态和健康状况。
                ceph health detail:显示集群健康状态的详细信息。
    
            显示集群的容量和使用情况
                ceph df
            
        2、监视器(MON)管理命令
        
            查看MON状态信息
                ceph mon stat:显示MON的状态信息,包括集群中的MON节点、选举状态等。
            
            查看MON的选举状态
                ceph quorum_status:显示MON的选举状态和仲裁信息。
            
            查看MON的映射信息
                ceph mon dump:输出MON的映射信息。
            
            删除MON节点
                ceph mon remove <mon-name>:从集群中删除指定的MON节点。
    
            
        4、对象存储守护进程(OSD)管理命令

            查看OSD状态
                ceph osd stat:显示OSD的简要状态信息。
            
            查看OSD树形结构
                ceph osd tree:以树形结构显示OSD的层级关系。
            
            查看OSD磁盘使用情况
                ceph osd df:显示OSD的磁盘使用情况。
            
            将OSD设置为down状态
                ceph osd down <osd-id>:将指定的OSD设置为down状态。
            
            将OSD重新加入集群
                ceph osd in <osd-id>:将之前设置为down的OSD重新加入集群。
            
            将OSD踢出集群
                ceph osd out <osd-id>:将指定的OSD踢出集群。
            
    
        4、存储池(Pool)管理命令
        
            列出所有存储池
                ceph osd pool ls:列出集群中的所有存储池。
            
            查看存储池详细信息
                ceph osd pool ls detail:列出存储池的详细信息。
            
            创建存储池
                ceph osd pool create <pool-name>:创建新的存储池。
            
            删除存储池
                ceph osd pool delete <pool-name> :删除指定的存储池。
            
            设置存储池副本数
                ceph osd pool set <pool-name> size <replica-count>:设置存储池的副本数。
            
            获取存储池副本数
                ceph osd pool get <pool-name> size:获取存储池的副本数。
            
            设置存储池配额
                ceph osd pool set-quota <pool-name> :设置存储池的对象数或容量配额。
            
            重命名存储池
                ceph osd pool rename <old-pool-name> <new-pool-name>:重命名指定的存储池。
        
        
        5、Placement Groups(PG)管理命令
        
            列出所有PG
                ceph pg ls:列出集群中的所有PG。
            
            查看PG的副本分布
                ceph pg map <pg-id>:查看指定PG的副本分布在哪些OSD上。
            
            执行PG修复
                ceph pg repair <pg-id>:尝试修复指定的PG。
            
            执行数据一致性校验
                ceph pg scrub <pg-id> 或 deep-scrub <pg-id>:执行数据一致性校验或深度校验。
    
            
        6、元数据服务器(MDS)管理命令
            查看MDS状态
                ceph mds stat:显示MDS的状态信息
    
            查看MDS的映射信息
                ceph mds dump:输出MDS的映射信息。
    
            删除MDS节点
                ceph mds rm <mds-id> <mds-name>:从集群中删除指定的MDS节点。
    
        7、其他常用命令
        
            查看Ceph日志
                ceph-conf --name <daemon-name> --show-config-value log_file:查看指定守护进程的日志文件路径。
            启动或停止Ceph服务
                systemctl start/stop/restart ceph.target。

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

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

相关文章

docker及docker exec命令学习笔记

docker exec 是一个常用的 Docker 命令&#xff0c;允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法&#xff1a; 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…

<工具 Claude Desktop> 配置 MCP server 连接本地 SQLite, 本机文件夹(目录) 网络驱动器 Windows 11 系统

也是在学习中... 起因&#xff1a; 抖音博客 艾克AI分享 他的视频 #143《Claude开源MCP彻底打破AI的信息孤岛》 提到: Claude开源的MCP太强了&#xff0c;视频后面是快速演示&#xff0c;反正看了好几遍也没弄明白。菜单都不一样&#xff0c;感觉用的不是同一家 Claude. 探…

(78)MPSK基带调制通信系统瑞利平坦衰落信道传输性能的MATLAB仿真

文章目录 前言一、MATLAB仿真1.仿真代码2.仿真结果 二、子函数与完整代码总结 前言 本文给出瑞利平坦衰落信道上的M-PSK通信系统性能仿真的MATLAB源代码与仿真结果。其中&#xff0c;调制方式M-PSK包括BPSK、QPSK、8-PSK、16-PSK、32-PSK等方式。 一、MATLAB仿真 1.仿真代码 …

go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

go Pool Pool用于展示如何使用有缓冲的通道实现资源池&#xff0c;来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况&#xff08;如共享数据库连接或者内存缓冲区&#xff09;下非 常有用。如果goroutine需要从池里得到这些资…

LeetCode70. 爬楼梯(2024冬季每日一题 24)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#xf…

Android 系统之Init进程分析

1、Init进程流程 2、Init细节逻辑 2.1 Init触发shutdown init进程触发系统重启是一个很合理的逻辑&#xff0c;为什么合理&#xff1f; init进程是android世界的一切基石&#xff0c;如果android世界的某些服务或者进程出现异常&#xff0c;那么会导致整个系统无法正常使用…

用micropython 操作stm32f4单片机的定时器实现蜂鸣器驱动

import pyb import time # 初始化引脚和定时器通道作为PWM输出 # 注意&#xff1a;这里我们假设您使用的是支持PWM的引脚和定时器 # 在不同的MicroPython板上&#xff0c;支持的引脚和定时器可能不同 # 请查阅您的板的文档以确认正确的引脚和定时器 buzzer_pin pyb.Pin(PD15,…

长沙市的科技查新单位

1、中南大学图书馆科技查新站&#xff1a; 中南大学图书馆科技查新站成立于2003年12月&#xff0c;中南大学图书馆科技查新站作为教育部首批批准的科技查新工作站之一&#xff0c;具备了在全国范围内开展科技查新工作的专业资质。 2、湖南大学科技查新站&#xff1a; 湖南大学…

java基础语法光速入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理Java的基础语法部分 适合有编程基础的人快点掌握语法使用 没学过一两门语言的话。。还是不建议看了 极致的浓缩没有一点解释 注释 单行注释 // 多行注释 /**/ 数据类型 布尔型:true false 整型:int,lon…

【redis】集群详解

redis集群 一、集群的概念二、数据分片算法2.1哈希求余算法2.2一致性哈希算法2.3哈希槽分区算法 三、集群的搭建3.1配置docker-compose.yml文件3.2配置generate.sh脚本文件3.3构建redis集群3.4简单测试redis集群 四、故障处理流程4.1故障判定4.2故障转移 五、集群扩容 一、集群…

Linux | Linux的开机启动流程

对于linux系统的初学者来说&#xff0c;理解并掌握linux系统启动流程能够使你够深入的理解linux系统&#xff0c;还可以通过系统的启动过程来分析问题解决问题。 Linux开机启动的流程如下图 power on 开机 post自检&#xff08;检查一部分大的硬件&#xff09; BIOS&#xf…

Scala的模式匹配(5)

package hfd.test32 //匹配 变量的类型 object Test34_4 {def main(args: Array[String]): Unit {val i1val j:Double1.2val b:Booleanfalseval x:Anybx match {case _:Int>println(s"当前是Int")case _:Double>println(s"当前是Double")case a:Boo…

TiDB如何保证数据一致性

1. 分布式事务协议 TiDB 采用了类似 Google Percolator 的分布式事务协议来处理分布式事务。这个协议基于两阶段提交&#xff08;2PC&#xff09;的思想&#xff0c;但进行了优化和改进&#xff0c;以适应分布式环境的特殊需求。在 TiDB 中&#xff0c;当一个事务需要跨多个节…

【Maven系列】深入解析 Maven 常用命令

前言 在当今的软件开发过程中&#xff0c;项目管理是至关重要的一环。项目管理包括了项目构建、依赖管理以及发布部署等诸多方面。而在Java生态系统中&#xff0c;Maven已经成为了最受欢迎的项目管理工具之一。Maven 是一套用于构建、依赖管理和项目管理的工具&#xff0c;主要…

DBA面试题-1

面临失业&#xff0c;整理一下面试题&#xff0c;找下家继续搬砖 主要参考&#xff1a;https://www.csdn.net/?spm1001.2101.3001.4476 略有修改 一、mysql有哪些数据类型 1&#xff0c; 整形 tinyint,smallint,medumint,int,bigint&#xff1b;分别占用1字节、2字节、3字节…

【Rust WebAssembly 入门实操遇到的问题】

Rust WebAssembly 入门实操遇到的问题 什么是WebAssembly跟着教程走wasm-pack build error总结 什么是WebAssembly WebAssembly&#xff08;简称Wasm&#xff09;是一种基于堆栈的虚拟机的二进制指令 格式。Wasm 被设计为编程语言的可移植编译目标&#xff0c;支持在 Web 上部…

数据挖掘之数据预处理

​​​​​​​ 引言 数据挖掘是从大量数据中提取有用信息和知识的过程。在这个过程中&#xff0c;数据预处理是不可或缺的关键步骤。数据预处理旨在清理和转换数据&#xff0c;以提高数据质量&#xff0c;从而为后续的数据挖掘任务奠定坚实的基础。由于现实世界中的数据通常…

21个Python脚本自动执行日常任务(1)

引言 作为编程领域摸爬滚打超过十年的老手&#xff0c;我深刻体会到&#xff0c;自动化那些重复性工作能大大节省我们的时间和精力。 Python以其简洁的语法和功能强大的库支持&#xff0c;成为了编写自动化脚本的首选语言。无论你是专业的程序员&#xff0c;还是希望简化日常工…

C++ 游戏开发:开启游戏世界的编程之旅(2)

三、游戏输入处理 &#xff08;一&#xff09;键盘输入处理 在游戏中&#xff0c;玩家通过键盘输入来控制角色的行动。我们需要在游戏循环中不断检测键盘事件&#xff0c;并根据不同的按键按下或松开状态来执行相应的操作。例如&#xff0c;在 SDL 中&#xff0c;可以这样处理…

重生归来之正确使用gcc.md

environment gcc --version g --version gdb --versionsudo apt update sudo apt install gcc g build-essential gdb cmake 项目目录结构 MyProject/ │ ├── CMakeLists.txt # CMake 配置文件 ├── src/ │ └── main.cpp # 源代码 ├── build/ …