从零到一:基于Rook构建云原生Ceph存储的全面指南(下)

接上篇:《从零到一:基于Rook构建云原生Ceph存储的全面指南(上)》
链接: link

六.Rook部署云原生CephFS文件系统

6.1 部署cephfs storageclass

cephfs文件系统与RBD服务类似,要想在kubernetes pod里使用cephfs,需要创建一个cephfs-provisioner storageclass服务,在rook代码里已有资源文件,单独部署即可

[root@node1 examples]#
kubectl create -f deploy/examples/csi/cephfs/storageclass.yaml


查看cephfs storageclass名称
[root@node1 examples]# kubectl get storageclasses.storage.k8s.io  | grep rook-cephfs
rook-cephfs                   rook-ceph.cephfs.csi.ceph.com   Delete          Immediate           true                   21d
[root@node1 examples]#

6.2 创建容器所需cephfs文件系统

创建容器所需pvc指定rook部署rook-cephfs存储类名称
[root@node1 cephfs]# cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cephfs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: rook-cephfs
[root@node1 cephfs]#
[root@node1 cephfs]# kubectl apply -f pvc.yaml


查看pvc所提供是rook-cephfs
[root@node1 cephfs]# kubectl get pvc | grep cephfs-pvc
cephfs-pvc             Bound    pvc-da18c8f9-00c1-4c39-8c53-68a628fa8bdd   1Gi        RWO            rook-cephfs                   21d
           rook-cephfs                   7d23h
[root@node1 cephfs]#

6.3创建容器pod使用rook-cephfs提供pvc

[root@node1 cephfs]# cat pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: csicephfs-demo-pod
spec:
  containers:
    - name: web-server
      image: nginx:latest
      volumeMounts:
        - name: mypvc
          mountPath: /var/lib/www/html
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: cephfs-pvc
        readOnly: false
[root@node1 cephfs]#
[root@node1 cephfs]# kubectl apply -f pod.yaml


查看pod运行状况
[root@node1 cephfs]# kubectl get pod | grep cephfs
csicephfs-demo-pod                           1/1     Running     0            21d
[root@node1 cephfs]#

6.4 查看pod是否使用rook-cephfs

[root@node1 cephfs]# kubectl exec -it csicephfs-demo-pod -- bash
root@csicephfs-demo-pod:/# df -hT | grep csi-vol
10.68.91.46:6789,10.68.110.0:6789,10.68.225.251:6789:/volumes/csi/csi-vol-50d5c216-3e2a-11ed-9773-9a6110af61d6/f4e696bf-757d-4793-b2c2-3091d38ccec5 ceph     1.0G     0  1.0G   0% /var/lib/www/html
root@csicephfs-demo-pod:/#
root@csicephfs-demo-pod:/# echo "cephfs" > /var/lib/www/html/index.html
root@csicephfs-demo-pod:/# cat /var/lib/www/html/index.html
cephfs
root@csicephfs-demo-pod:/#

注:登录相应pod容器可以看到pod已经挂载cephfs文件系统地址,可以在相应挂载目录创建内容。

七.Ceph Dashboard界面

ceph有一个dashboard web管理界面,通过web界面在可以查看集群的状态,包括总体运行状态,mgr、osd、rgw等服务状态,还可以查看ceph pool池及pg状态等相关信息。

7.1 启用dashboard开关

在cluster.yaml文件中,dashboard.enable=true即可。rookoperator就会启用ceph-mgr dashboard模块,默认已启用。Ceph-dashboard默认会通过service的方式将服务暴露给外部,通过8443的https端口进行访问。

[root@node1 examples]# kubectl get svc -n rook-ceph | grep rook-ceph-mgr-dashboard
rook-ceph-mgr-dashboard                  ClusterIP   10.68.218.45    <none>        8443/TCP            24d
[root@node1 examples]#

7.2 ceph-dashboard配置外部访问

Dashboard web界面外部访问可以通过ingress或者NodePort方式,这里使用NodePort方式将dashboard服务暴露给kubernetes集群外部访问,外部通过nodeport端口访问dashboard服务。

Dashboard-external-https资源文件应用
[root@node1 examples]# kubectl apply -f dashboard-external-https.yaml


查看dashboard nodeport端口32367
[root@node1 examples]# kubectl get svc -n rook-ceph | grep rook-ceph-mgr-dashboard
rook-ceph-mgr-dashboard                  ClusterIP   10.68.218.45    <none>        8443/TCP            24d
rook-ceph-mgr-dashboard-external-https   NodePort    10.68.104.233   <none>        8443:32367/TCP      22d
[root@node1 examples]#


7.3 Dashboard web admin密码查看

用户名默认是admin,密码通过下面方式查看
[root@node1 examples]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo ""
Z(M(@>GBC4TUZXQgT6%$
[root@node1 examples]#

7.4 dashboard web登录查看

Dashboard web界面访问https://node_ip:32367
在这里插入图片描述
登录后dashboard界面,ceph集群状态,hosts、monitors、osds、rgw、pools、block等相关信息。
在这里插入图片描述

八.Prometheus监控

rook部署ceph集群默认没有安装prometheus监控服务,这里我们使用prometheus以容器化运行在kubernetes中,使用prometheus-operator部署方式。
prometheus监控系统包括组件:
Exporter:监控agent端,用于上报,ceph-mgr默认已提供内置监控指标
Prometheus:服务端用于存储监控数据、提供查询、告警等
Grafana:展示监控信息,通常从prometheus获取监控指标通过模板来展示图表信息

8.1 查看rook-ceph-mgr metrics监控指标

[root@node1 examples]# kubectl get svc -n rook-ceph | grep rook-ceph-mgr
rook-ceph-mgr                            ClusterIP   10.68.33.103    <none>        9283/TCP            24d


Ceph-mgr metrics监控指标访问
[root@node1 examples]# curl http://10.68.33.103:9283/metrics

# HELP ceph_health_status Cluster health status
# TYPE ceph_health_status untyped
ceph_health_status 0.0
# HELP ceph_mon_quorum_status Monitors in quorum
# TYPE ceph_mon_quorum_status gauge
ceph_mon_quorum_status{ceph_daemon="mon.b"} 1.0
ceph_mon_quorum_status{ceph_daemon="mon.c"} 1.0
ceph_mon_quorum_status{ceph_daemon="mon.d"} 1.0
# HELP ceph_fs_metadata FS Metadata
# TYPE ceph_fs_metadata untyped
ceph_fs_metadata{data_pools="5",fs_id="1",metadata_pool="4",name="myfs"} 1.0
# HELP ceph_mds_metadata MDS Metadata
# TYPE ceph_mds_metadata untyped
ceph_mds_metadata{ceph_daemon="mds.myfs-b",fs_id="1",hostname="10.255.82.25",public_addr="172.20.166.175:6801/2538469664",rank="0",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
ceph_mds_metadata{ceph_daemon="mds.myfs-a",fs_id="1",hostname="10.255.82.27",public_addr="172.20.135.49:6801/1468538095",rank="0",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
# HELP ceph_mon_metadata MON Metadata
# TYPE ceph_mon_metadata untyped
ceph_mon_metadata{ceph_daemon="mon.b",hostname="10.255.82.25",public_addr="10.68.225.251",rank="0",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
ceph_mon_metadata{ceph_daemon="mon.c",hostname="10.255.82.26",public_addr="10.68.91.46",rank="1",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
ceph_mon_metadata{ceph_daemon="mon.d",hostname="10.255.82.27",public_addr="10.68.243.187",rank="2",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
# HELP ceph_mgr_metadata MGR metadata
# TYPE ceph_mgr_metadata gauge
ceph_mgr_metadata{ceph_daemon="mgr.b",hostname="10.255.82.25",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
ceph_mgr_metadata{ceph_daemon="mgr.a",hostname="10.255.82.27",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
# HELP ceph_mgr_status MGR status (0=standby, 1=active)
# TYPE ceph_mgr_status gauge
ceph_mgr_status{ceph_daemon="mgr.b"} 0.0
ceph_mgr_status{ceph_daemon="mgr.a"} 1.0
# HELP ceph_mgr_module_status MGR module status (0=disabled, 1=enabled, 2=auto-enabled)
# TYPE ceph_mgr_module_status gauge
ceph_mgr_module_status{name="alerts"} 0.0
ceph_mgr_module_status{name="balancer"} 2.0
ceph_mgr_module_status{name="cephadm"} 0.0
ceph_mgr_module_status{name="crash"} 2.0
ceph_mgr_module_status{name="dashboard"} 1.0
ceph_mgr_module_status{name="devicehealth"} 2.0
ceph_mgr_module_status{name="diskprediction_local"} 0.0
ceph_mgr_module_status{name="influx"} 0.0
ceph_mgr_module_status{name="insights"} 0.0
ceph_mgr_module_status{name="iostat"} 1.0
ceph_mgr_module_status{name="k8sevents"} 0.0
ceph_mgr_module_status{name="localpool"} 0.0
ceph_mgr_module_status{name="mds_autoscaler"} 0.0
ceph_mgr_module_status{name="mirroring"} 0.0
ceph_mgr_module_status{name="nfs"} 1.0
ceph_mgr_module_status{name="orchestrator"} 2.0
ceph_mgr_module_status{name="osd_perf_query"} 0.0
ceph_mgr_module_status{name="osd_support"} 0.0
ceph_mgr_module_status{name="pg_autoscaler"} 2.0
ceph_mgr_module_status{name="progress"} 2.0
ceph_mgr_module_status{name="prometheus"} 1.0
ceph_mgr_module_status{name="rbd_support"} 2.0
ceph_mgr_module_status{name="restful"} 1.0
ceph_mgr_module_status{name="rook"} 0.0
ceph_mgr_module_status{name="selftest"} 0.0
ceph_mgr_module_status{name="snap_schedule"} 0.0
ceph_mgr_module_status{name="stats"} 0.0
ceph_mgr_module_status{name="status"} 2.0
ceph_mgr_module_status{name="telegraf"} 0.0
ceph_mgr_module_status{name="telemetry"} 2.0
ceph_mgr_module_status{name="test_orchestrator"} 0.0
ceph_mgr_module_status{name="volumes"} 2.0
ceph_mgr_module_status{name="zabbix"} 0.0
# HELP ceph_mgr_module_can_run MGR module runnable state i.e. can it run (0=no, 1=yes)
# TYPE ceph_mgr_module_can_run gauge
ceph_mgr_module_can_run{name="alerts"} 1.0
ceph_mgr_module_can_run{name="balancer"} 1.0
ceph_mgr_module_can_run{name="cephadm"} 1.0
ceph_mgr_module_can_run{name="crash"} 1.0
ceph_mgr_module_can_run{name="dashboard"} 1.0
ceph_mgr_module_can_run{name="devicehealth"} 1.0
ceph_mgr_module_can_run{name="diskprediction_local"} 1.0
ceph_mgr_module_can_run{name="influx"} 0.0
ceph_mgr_module_can_run{name="insights"} 1.0
ceph_mgr_module_can_run{name="iostat"} 1.0
ceph_mgr_module_can_run{name="k8sevents"} 1.0
ceph_mgr_module_can_run{name="localpool"} 1.0
ceph_mgr_module_can_run{name="mds_autoscaler"} 1.0
ceph_mgr_module_can_run{name="mirroring"} 1.0
ceph_mgr_module_can_run{name="nfs"} 1.0
ceph_mgr_module_can_run{name="orchestrator"} 1.0
ceph_mgr_module_can_run{name="osd_perf_query"} 1.0
ceph_mgr_module_can_run{name="osd_support"} 1.0
ceph_mgr_module_can_run{name="pg_autoscaler"} 1.0
ceph_mgr_module_can_run{name="progress"} 1.0
ceph_mgr_module_can_run{name="prometheus"} 1.0
ceph_mgr_module_can_run{name="rbd_support"} 1.0
ceph_mgr_module_can_run{name="restful"} 1.0
ceph_mgr_module_can_run{name="rook"} 1.0
ceph_mgr_module_can_run{name="selftest"} 1.0
ceph_mgr_module_can_run{name="snap_schedule"} 1.0
ceph_mgr_module_can_run{name="stats"} 1.0
ceph_mgr_module_can_run{name="status"} 1.0
ceph_mgr_module_can_run{name="telegraf"} 1.0
ceph_mgr_module_can_run{name="telemetry"} 1.0
ceph_mgr_module_can_run{name="test_orchestrator"} 1.0
ceph_mgr_module_can_run{name="volumes"} 1.0
ceph_mgr_module_can_run{name="zabbix"} 1.0
# HELP ceph_osd_metadata OSD Metadata
# TYPE ceph_osd_metadata untyped
ceph_osd_metadata{back_iface="",ceph_daemon="osd.0",cluster_addr="172.20.166.156",device_class="hdd",front_iface="",hostname="10.255.82.25",objectstore="bluestore",public_addr="172.20.166.156",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
ceph_osd_metadata{back_iface="",ceph_daemon="osd.1",cluster_addr="172.20.104.37",device_class="hdd",front_iface="",hostname="10.255.82.26",objectstore="bluestore",public_addr="172.20.104.37",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
ceph_osd_metadata{back_iface="",ceph_daemon="osd.2",cluster_addr="172.20.135.32",device_class="hdd",front_iface="",hostname="10.255.82.27",objectstore="bluestore",public_addr="172.20.135.32",ceph_version="ceph version 17.2.3 (dff484dfc9e19a9819f375586300b3b79d80034d) quincy (stable)"} 1.0
# HELP ceph_disk_occupation Associate Ceph daemon with disk used
.....
.....
.....
[root@node1 examples]#

8.2部署prometheus-operator

[root@node1 examples]#
kubectl apply -f https://raw.githubusercontent.com/coreos/prometheus-operator/v0.40.0/bundle.yaml


Prometheus-operator部署后以容器方式运行
[root@node1 examples]# kubectl get pod | grep prometheus-operator
prometheus-operator-5944b5f9dd-5r789         1/1     Running     0            8d
[root@node1 examples]#

8.3 部署prometheus实例

[root@node1 monitoring]# pwd
/opt/rook/deploy/examples/monitoring
[root@node1 monitoring]#
[root@node1 monitoring]# kubectl apply -f prometheus.yaml -f prometheus-service.yaml -f service-monitor.yaml


prometheus默认提供了9090端口访问,这里更改nodeport类型方式访问

[root@node1 monitoring]# kubectl get svc -n rook-ceph | grep rook-prometheus
rook-prometheus                          NodePort    10.68.232.216   <none>        9090:30900/TCP      8d
[root@node1 monitoring]#


prometheus访问地址http://node_ip:30900

在这里插入图片描述

8.4部署grafana

grafana是一个数据展示的平台,数据展示主要依赖后端的数据源。这里使用prometheus作为数据源,grafana作为展示。grafana部署在kubernetes中,参考grafana on kubernetes官方yaml文件。地址如下,根据自己需求进行修改。
https://grafana.com/docs/grafana/latest/setup-grafana/installation/kubernetes/

Grafana.yaml部署资源文件

---apiVersion: v1kind: PersistentVolumeClaimmetadata:
  name: grafana-pvcspec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi---apiVersion: apps/v1kind: Deploymentmetadata:
  labels:
    app: grafana
  name: grafanaspec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: grafana/grafana:9.1.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3000
              name: http-grafana
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /robots.txt
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 2
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 3000
            timeoutSeconds: 1
          resources:
            requests:
              cpu: 250m
              memory: 750Mi
          volumeMounts:
            - mountPath: /var/lib/grafana
              name: grafana-pv
      volumes:
        - name: grafana-pv
          persistentVolumeClaim:
            claimName: grafana-pvc---apiVersion: v1kind: Servicemetadata:
  name: grafanaspec:
  ports:
    - port: 3000
      protocol: TCP
      targetPort: http-grafana
  selector:
    app: grafana
  sessionAffinity: None
  type: LoadBalancer

# kubectl apply -f grafana.yaml

查看grafana运行状态,grafana对外访问使用nodeport形式。
[root@node1 rook]# kubectl get pod,svc | grep grafana
pod/grafana-b8b88d68-z8qpf                       1/1     Running     2 (8d ago)   8d
service/grafana                                                  NodePort    10.68.99.199    <none>        3000:30780/TCP                                                                            8d
[root@node1 rook]#

grafana访问地址如下,默认用户名和密码均为admin。登录后需要修改密码。
http://node_ip:30780
在这里插入图片描述

8.5配置grafana监控ceph模板

通常下面模板已满足ceph集群监控信息

ceph-cluster模板ID:2842
ceph-osd 模板ID:5336
ceph-pool 模板ID:5342

导入模板ID步骤1
在这里插入图片描述
导入模板ID步骤2,输入ID载入即可
在这里插入图片描述

8.6 在grafana上查看ceph集群状态

在这里插入图片描述
在这里插入图片描述

九.常见故障排查

9.1 ceph集群出现警告mgr modules have recently crashed

解决方法:
# kubectl exec -it rook-ceph-tools-5d8c78cd5b-kr6m9 -n rook-ceph -- bash

bash-4.4$ ceph crash ls-new
ID                                                                ENTITY  NEW
bash-4.4$ ceph crash archive 2022-09-30T07:59:23.681099Z_31814cfb-a08d-423e-b8dd-b5f0fd4fb097
bash-4.4$

bash-4.4$ ceph health
HEALTH_OK
bash-4.4$

9.2 ceph集群出现警告 mons are allowing insecure global_id reclaim

解决方法:
ceph config set mon auth_allow_insecure_global_id_reclaim false

9.3 rook部署ceph集群某个pod异常或者pending状态

解决问题思路:

  1. 查看pod log查看容器内部异常日志信息
  2. 通过describe查看pod事件异常信息

9.4 PVC处于pending状态

解决问题思路:
1.集群中确认是否有OSD
2.CSI配置程序pod未运行或者未响应配置存储的请求

9.5 rook-ceph osd down格式化硬盘重新挂载

// 重新格式化硬盘准备
# yum -y install gdisk
# kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=0
deployment.apps/rook-ceph-operator scaled

// 查询osd的状态,找到要移除的osd id
# ceph osd status

// ID为2的osd标识为out,此时会进⾏元数据的同步
# ceph osd out osd.2
# ceph osd purge 2 --yes-i-really-mean-it

// 删除ID为2的OSD
# ceph auth del osd.2
entity osd.2 does not exist

// 删除相关osd节点的deployment
# kubectl delete deploy -n rook-ceph rook-ceph-osd-2
deployment.apps "rook-ceph-osd-2" deleted

// 删除硬盘分区信息
# sgdisk --zap-all /dev/sdb
Creating new GPT entries.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

// 清理硬盘数据(hdd硬盘使用dd,ssd硬盘使用blkdiscard,二选一)
# dd if=/dev/zero of="/dev/sdb" bs=1M count=500000 oflag=direct,dsync
500000+0 records in
500000+0 records out
524288000000 bytes (524 GB) copied, 258.146 s, 2.0 GB/s

// ssd硬盘选择此命令
# blkdiscard /dev/sdb

// 删除原osd的lvm信息(如果单个节点有多个osd,那么就不能用*拼配模糊删除,而根据lsblk -f查询出明确的lv映射信息再具体删除)
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
rm -rf /dev/ceph-*
lsblk -f

// 恢复rook的operator,使检测到格式化后的osd硬盘,osd启动后ceph集群会自动平衡数据
kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=1
deployment.aps/rook-ceph-operator scaled

十.ceph集群常用命令

10.1查看集群状态命令

ceph -v //查看ceph的版本

ceph -s //查看集群的状态

ceph -w //监控集群的实时更改|查看正在操作的动作

ceph osd tree #查看osd目录树

ceph osd df //详细列出集群每块磁盘的使用情况|查看osd的使用信息

ceph osd stat #查看osd状态

ceph mon stat //查看mon状态

ceph mds stat # 检查 MDS 状态

ceph osd find osd.o//查看osd.0节点ip和主机名

ceph auth get client.admin # 查看ceph授权信息

10.2 Ceph mds命令

ceph mds
ceph mds stat #查看msd状态

ceph mds dump #msd的映射信息

ceph mds rm 0 mds.node1#删除一个mds节点

10.3 ceph osd命令

ceph osd stat #查看osd状态

ceph osd dump #osd的映射信息

ceph osd tree#查看osd目录树

ceph osd down 0 #down掉osd.0节点

ceph osd rm 0#集群删除一个osd硬盘

ceph osd crush remove osd.4#删除标记

ceph osd getmaxosd#查看最大osd个数

ceph osd setmaxosd 10#设置osd的个数

ceph osd out osd.3#把一个osd节点逐出集群

ceph osd in osd.3#把逐出的osd加入集群

ceph osd pause#暂停osd (暂停后整个集群不再接收数据)

ceph osd unpause#再次开启osd (开启后再次接收数据)

ceph osd df //查看osd的使用信息

要定位对象,只需要对象名和存储池名字即可,例如:

ceph osd map {poolname} {object-name}

10.4 ceph pg命令

ceph pg stat#查看pg状态

ceph pg dump#查看pg组的映射信息

ceph pg map 0.3f#查看一个pg的map //查看单个pg和osd的映射信息

ceph pg 0.26 query#查看pg详细信息

ceph pg dump --format plain#显示一个集群中的所有的pg统计

ceph pg {pg-id} query //获取pg的详细信息

10.5 ceph osd pool命令

ceph osd lspools #查看ceph集群中的pool数量

创建和删除存储池​

ceph osd pool create myPoolName 100#创建一个pool 这里的100指的是PG组

ceph osd pool delete myPoolName myPoolName --yes-i-really-really-mean-it #删除,集群名字需要重复两次

rados df#显示集群中pool的详细信息

ceph osd pool get data pg_num #查看data池的pg数量

ceph osd pool set data target_max_bytes 100000000000000#设置data池的最大存储空间为100T(默认是1T)

ceph osd pool set data size 3 #设置data池的副本数是3

ceph osd pool set data min_size 2 #设置data池能接受写操作的最小副本为2

ceph osd pool set data pg_num 100#设置一个pool的pg数量

ceph osd pool set data pgp_num 100#设置一个pool的pgp数量

ceph osd pool ls //查看集群中的存储池名称

ceph osd pool ls detail //查看池的的详细信息

ceph osd pool stats //查看池的IO情况

10.6 rados命令

rados lspools#查看ceph集群中有多少个pool (只是查看pool)

rados df #查看存储池使用情况:多少个pool,每个pool容量及利用情况

rados mkpool test#创建一个pool,名字:test

rados create testobject -p testpool#testpool中创建一个对象testobject

rados rm test-object-1 -p test#删除(test存储池的)一个对象object

rados -p test ls #查看存储池test的对象

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能之深度学习的革命性突破

深度学习的革命性突破 深度学习是机器学习的一个子领域&#xff0c;通过模拟人脑神经网络的结构和功能&#xff0c;实现对复杂数据的高效处理。近年来&#xff0c;深度学习在计算机视觉、自然语言处理、语音识别等领域取得了革命性突破。本文将深入探讨深度学习的核心架构、突…

C#快速排序QuickSort将递归算法修改为堆栈Stack非递归方式

我们知道,方法的调用是采用Stack的方式[后进先出:LIFO], 在DeepSeek中快速搜索C#快速排序, 搜索结果如图: 我们会发现是采用递归的方式 . 递归的优点: 简单粗暴,类似于直接写数学公式,因代码量较少,易于理解.递归与循环迭代的运行次数都是一致的 递归的缺点: 占用大量的内…

Django开发入门 – 3.用Django创建一个Web项目

Django开发入门 – 3.用Django创建一个Web项目 Build A Web Based Project With Django By JacksonML 本文简要介绍如何利用最新版Python 3.13.2来搭建Django环境&#xff0c;以及创建第一个Django Web应用项目&#xff0c;并能够运行Django Web服务器。 创建该Django项目需…

SQL布尔盲注、时间盲注

一、布尔盲注 布尔盲注&#xff08;Boolean-based Blind SQL Injection&#xff09;是一种SQL注入技术&#xff0c;用于在应用程序不直接显示数据库查询结果的情况下&#xff0c;通过构造特定的SQL查询并根据页面返回的不同结果来推测数据库中的信息。这种方法依赖于SQL查询的…

【Python网络爬虫】爬取网站图片实战

【Python网络爬虫】爬取网站图片实战 Scrapying Images on Website in Action By Jackson@ML *声明:本文简要介绍如何利用Python爬取网站数据图片,仅供学习交流。如涉及敏感图片或者违禁事项,请注意规避;笔者不承担相关责任。 1. 创建Python项目 1) 获取和安装最新版…

【docker知识】快速找出服务器中占用内存较高的容器

本文由Markdown语法编辑器编辑完成。 1.背景&#xff1a; 近期在处理现场问题&#xff0c;观察服务器时&#xff0c;会遇到某些进程占用较高内存的情况。由于我们的服务&#xff0c;基本上都是以容器的方式在运行&#xff0c;因此就需要找到&#xff0c;到底是哪个容器&#…

图数据库neo4j进阶(一):csv文件导入节点及关系

CSV 一、load csv二、neo4j-admin import<一>、导入入口<二>、文件准备<三>、命令详解 一、load csv 在neo4j Browser中使用Cypher语句LOAD CSV,对于数据量比较大的情况,建议先运行create constraint语句来生成约束 create constraint for (s:Student) req…

10. Hbase Compaction命令

一. 什么是Compaction 在 HBase 中&#xff0c;频繁进行数据插入、更新和删除操作会生成许多小的 HFile&#xff0c;当 HFile 数量增多时&#xff0c;会影响HBase的读写性能。此外&#xff0c;垃圾数据的存在也会增加存储需求。因此&#xff0c;定期进行 Compact操作&#xff…

【工业场景】用YOLOv8实现火灾识别

火灾识别任务是工业领域急需关注的重点安全事项,其应用场景和背景意义主要体现在以下几个方面: 应用场景:工业场所:在工厂、仓库等工业场所中,火灾是造成重大财产损失和人员伤亡的主要原因之一。利用火灾识别技术可以及时发现火灾迹象,采取相应的应急措施,保障人员安全和…

软件开发 | GitHub企业版常见问题解读

什么是GitHub企业版&#xff1f; GitHub企业版是一个企业级软件开发平台&#xff0c;专为现代化开发的复杂工作流程而设计。 作为可扩展的平台解决方案&#xff0c;GitHub企业版使组织能够无缝集成其他工具和功能&#xff0c;并根据特定需求定制开发环境&#xff0c;提高整体…

CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)

1. 引言 在 CEF132&#xff08;Chromium Embedded Framework&#xff09;的编译过程中&#xff0c;depot_tools 扮演着举足轻重的角色。这套由 Chromium 项目精心打造的脚本和工具集&#xff0c;专门用于获取、管理和更新 Chromium 及其相关项目&#xff08;包括 CEF&#xff…

NLP Word Embeddings

Word representation One-hot形式 在上一周介绍RNN类模型时&#xff0c;使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的&#xff0c;算法很难学习到单词之间的关系。 比如下面的例子&#xff0c;即使语言模型已经知道orange juice是常用组合词&#xf…

python实现YouTube关键词爬虫(2025/02/11)

在当今数字化时代&#xff0c;YouTube作为全球最大的视频分享平台之一&#xff0c;拥有海量的视频资源。无论是进行市场调研、内容创作还是学术研究&#xff0c;能够高效地获取YouTube上的相关视频信息都显得尤为重要。今天&#xff0c;我将为大家介绍一个基于Python实现的YouT…

Jenkins 配置 Git Parameter 四

Jenkins 配置 Git Parameter 四 一、开启 项目参数设置 勾选 This project is parameterised 二、添加 Git Parameter 如果此处不显示 Git Parameter 说明 Jenkins 还没有安装 Git Parameter plugin 插件&#xff0c;请先安装插件 Jenkins 安装插件 三、设置基本参数 点击…

自然语言处理NLP入门 -- 第三节词袋模型与 TF-IDF

目标 了解词袋模型&#xff08;BoW&#xff09;和 TF-IDF 的概念通过实际示例展示 BoW 和 TF-IDF 如何将文本转换为数值表示详细讲解 Scikit-learn 的实现方法通过代码示例加深理解归纳学习难点&#xff0c;并提供课后练习和讲解 3.1 词袋模型&#xff08;Bag of Words, BoW&a…

C++模板编程——typelist的实现

文章最后给出了汇总的代码&#xff0c;可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似&#xff0c;只不过typelist存储的不是变量&#xff0c;而是类型。 typelist简单来说就是一个类型容器&#xff0c;能够提供一…

fastadmin 接口请求提示跨域

问题描述 小程序项目&#xff0c;内嵌h5页面&#xff0c;在h5页面调用后端php接口&#xff0c;提示跨域。网上查找解决方案如下&#xff1a; 1&#xff0c;设置header // 在入口文件index.php直接写入直接写入 header("Access-Control-Allow-Origin:*"); header(&q…

只需三步!5分钟本地部署deep seek——MAC环境

MAC本地部署deep seek 第一步:下载Ollama第二步:下载deepseek-r1模型第三步&#xff1a;安装谷歌浏览器插件 第一步:下载Ollama 打开此网址&#xff1a;https://ollama.com/&#xff0c;点击下载即可&#xff0c;如果网络比较慢可使用文末百度网盘链接 注&#xff1a;Ollama是…

idea 错误: 找不到或无法加载主类 @C:\Users\admin\AppData\Local\Temp\idea_arg_file1549212448

idea 错误: 找不到或无法加载主类 C:\Users\admin\AppData\Local\Temp\idea_arg_file1549212448 该错误往往和左下角爱弹出的如下提示是一个意思 Error running ‘PayV3Test1.testTransferBatchesBatchId’ Error running PayV3Test1.testTransferBatchesBatchId. Command lin…

Excel 笔记

实际问题记录 VBA脚本实现特殊的行转列 已知&#xff1a;位于同一Excel工作簿文件中的两个工作表&#xff1a;Sheet1、Sheet2。 问题&#xff1a;现要将Sheet2中的每一行&#xff0c;按Sheet1中的样子进行转置&#xff1a; Sheet2中每一行的黄色单元格&#xff0c;为列头。…