我积极解决 发表于 2019-2-2 07:55:51

最新ceph集群常用命令梳理

  结合网络、官网、手动查询等多方渠道,整理ceph维护管理常用命令,并且梳理常规命令在使用过程中的逻辑顺序。另外整理期间发现ceph 集群的命令体系有点乱,详细情况各自体验。
  

  一:ceph集群启动、重启、停止
  1:ceph 命令的选项如下:
  选项简写描述
  --verbose-v详细的日志。
  --valgrindN/A(只适合开发者和质检人员)用 Valgrind 调试。
  --allhosts-a在 ceph.conf 里配置的所有主机上执行,否 则它只在本机执行。
  --restartN/A核心转储后自动重启。
  --norestartN/A核心转储后不自动重启。
  --conf-c使用另外一个配置文件。
  

  Ceph 子命令包括:
  命令描述
  start启动守护进程。
  stop停止守护进程。
  forcestop暴力停止守护进程,等价于 kill -9
  killall杀死某一类守护进程。
  cleanlogs清理掉日志目录。
  cleanalllogs清理掉日志目录内的所有文件。
  

  2:启动所有守护进程
  要启动、关闭、重启 Ceph 集群,执行 ceph 时加上 相关命令,语法如下:
  /etc/init.d/ceph
  下面是个典型启动实例:
  sudo /etc/init.d/ceph -a start
  加 -a (即在所有节点上执行)执行完成后Ceph本节点所有进程启动。
  

  把 CEPH 当服务运行,按此语法:
  service ceph
  典型实例:service ceph -a start
  

  3:启动单一实例
  要启动、关闭、重启一类守护进程本例以要启动本节点上某一类的所有 Ceph 守护进程,
  /etc/init.d/ceph
  /etc/init.d/ceph start osd.0
  

  把ceph当做服务运行,启动一节点上某个 Ceph 守护进程,
  按此语法: service cephstart {daemon-type}.{instance}
  service cephstart osd.0
  

  二:集群维护常用命令概览
  1:检查集群健康状况
  启动集群后、读写数据前,先检查下集群的健康状态。你可以用下面的命令检查:
  ceph health   或者 ceph health detail (输出信息更详细)
  要观察集群内正发生的事件,打开一个新终端,然后输入:
  ceph -w
  输出信息里包含:
  集群唯一标识符
  集群健康状况
  监视器图元版本和监视器法定人数状态
  OSD 版本和 OSD 状态摘要
  其内存储的数据和对象数量的粗略统计,以及数据总量等。
  

  新版本新增选项如下:
  -s, --status          show cluster status
  -w, --watch         watch live cluster changes
  --watch-debug         watch debug events
  --watch-info          watch info events
  --watch-sec         watch security events
  --watch-warn          watch warn events
  --watch-error         watch error events
  --version, -v         display version
  --verbose             make verbose
  --concise             make less verbose
  使用方法演示:
  ceph -w --watch-info
  

  2:检查集群的使用情况
  检查集群的数据用量及其在存储池内的分布情况,可以用 df 选项,它和 Linux 上的 df 相似。如下:
  ceph df
  输出的 GLOBAL 段展示了数据所占用集群存储空间的概要。
  SIZE: 集群的总容量;
  AVAIL: 集群的空闲空间总量;
  RAW USED: 已用存储空间总量;
  % RAW USED: 已用存储空间比率。用此值参照 full ratio 和 near full \ ratio 来确保不会用尽集群空间。
  详情见存储容量。
  输出的 POOLS 段展示了存储池列表及各存储池的大致使用率。没有副本、克隆品和快照占用情况。例如,如果你把 1MB 的数据存储为对象,理论使用率将是 1MB ,但考虑到副本数、克隆数、和快照数,实际使用率可能是 2MB 或更多。
  NAME: 存储池名字;
  ID: 存储池唯一标识符;
  USED: 大概数据量,单位为 KB 、 MB 或 GB ;
  %USED: 各存储池的大概使用率;
  Objects: 各存储池内的大概对象数。
  

  新版本新增ceph osd df命令,可以详细列出集群每块磁盘的使用情况,包括大小、权重、使用多少空间、使用率等等
  

  3:检查集群状态
  要检查集群的状态,执行下面的命令::
  ceph status
  

  4:检查MONITOR状态
  查看监视器图,执行下面的命令::
  ceph mon stat
  或者:
  ceph mon dump
  要检查监视器的法定人数状态,执行下面的命令:
  ceph quorum_status
  5:检查 MDS 状态:
  元数据服务器为 Ceph 文件系统提供元数据服务,元数据服务器有两种状态: up | \ down 和 active | inactive ,执行下面的命令查看元数据服务器状态为 up 且 active :
  ceph mds stat
  要展示元数据集群的详细状态,执行下面的命令:
  ceph mds dump
  

  三:集群命令详解
  

  ######################mon 相关####################
  1:查看mon的状态信息
  # ceph mon stat
  

  2:查看mon的选举状态
  # ceph quorum_status
  

  3:查看mon的映射信息
  # ceph mon dump
  

  4:删除一个mon节点
  # ceph mon remove cs1
  

  5:获得一个正在运行的mon map,并保存在1.txt文件中
  # ceph mon getmap -o 1.txt
  

  6:读取上面获得的map
  # monmaptool --print 1.txt
  

  7:把上面的mon map注入新加入的节点
  # ceph-mon -i nc3 --inject-monmap 1.txt
  

  8:查看mon的amin socket
  # ceph-conf --name mon.nc3 --show-config-value admin_socket
  

  

  9:查看ceph mon log日志所在的目录
  # ceph-conf --name mon.nc1 --show-config-value log_file
  /var/log/ceph/ceph-mon.nc1.log
  

  10:查看一个集群ceph-mon.nc3参数的配置、输出信息特别详细,集群所有配置生效可以在此参数下确认
  # ceph --admin-daemon /var/run/ceph/ceph-mon.nc3.asok config show | less
  

  ######################### msd 相关 ###################
  1:查看msd状态
  # ceph mds stat
  

  2:删除一个mds节点
  # cephmds rm 0 mds.nc1
  

  3:设置mds状态为失败
  # ceph mds rmfailed
  4:新建pool
  # ceph mds add_data_pool
  

  5:关闭mds集群
  # mds cluster_down
  

  6:启动mds集群
  # mds cluster_up
  7:设置cephfs文件系统存储方式最大单个文件尺寸
  # ceph mds set max_file_size 1024000000000
  

  ### 清除cephfs 文件系统步骤 ####
  

  强制mds状态为featrue
  # ceph mds fail 0
  

  删除mds文件系统
  # ceph fs rm leadorfs --yes-i-really-mean-it
  #删除fs数据文件夹
  # ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
  

  #删除元数据文件夹
  # ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
  

  然后再删除 mds key,残留文件等
  

  拆除文件系统前推荐先删除节点,待验证
  # cephmds rm 0 mds.node242
  ################################ ceph auth 相关 ################################
  1:查看ceph集群中的认证用户及相关的key
  # ceph auth list
  

  2:为ceph创建一个admin用户并为admin用户创建一个密钥,把密钥保存到/etc/ceph目录下:
  # ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.admin.keyring
  或
  # ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' -o /etc/ceph/ceph.client.admin.keyring
  

  3:为osd.0创建一个用户并创建一个key
  # ceph auth get-or-create osd.0 mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-0/keyring
  

  4:为mds.nc3创建一个用户并创建一个key
  # ceph auth get-or-create mds.nc3 mon 'allow rwx' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mds/ceph-cs1/keyring
  

  5:导入key信息
  # ceph auth import   /var/lib/ceph/mds/ceph-cs1/keyring
  

  6:删除集群中的一个认证用户
  # ceph auth del osd.0
  

  ################################ osd相关 ################################
  1:查看osd列表
  # ceph osd tree
  

  2:查看数据延迟
  # ceph osd perf
  osd fs_commit_latency(ms) fs_apply_latency(ms)
  0                     3                  4
  1                   333                  871
  2                  33                   49
  3                     1                  2
  。。。。。。。。。。。。
  

  

  3:详细列出集群每块磁盘的使用情况,包括大小、权重、使用多少空间、使用率等等
  # ceph osd df
  

  4:down掉一个osd硬盘
  # ceph osd down 0   #down掉osd.0节点
  5:在集群中删除一个osd硬盘
  # ceph osd rm 0
  

  6:在集群中删除一个osd 硬盘 crush map
  # ceph osd crush rm osd.0
  

  7:在集群中删除一个osd的host节点
  # ceph osd crush rm cs1
  

  8:查看最大osd的个数
  # ceph osd getmaxosd
  max_osd = 90 in epoch 1202   #默认最大是90个osd节点
  

  9:设置最大的osd的个数(当扩大osd节点的时候必须扩大这个值)
  # ceph osd setmaxosd 2048
  10:设置osd crush的权重为1.0
  ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]]
  例如:
  # ceph osd crush set osd.1 0.5 host=node241
  

  11:设置osd的权重
  # ceph osd reweight 3 0.5
  reweighted osd.3 to 0.5 (8327682)
  

  或者用下面的方式
  # ceph osd crush reweight osd.1 1.0
  

  

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

  3       1    osd.3   up      0      # osd.3的reweight变为0了就不再分配数据,但是设备还是存活的
  

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

  14:暂停osd (暂停后整个集群不再接收数据)
  # ceph osd pause
  15:再次开启osd (开启后再次接收数据)
  # ceph osd unpause
  

  16:查看一个集群osd.0参数的配置、输出信息特别详细,集群所有配置生效可以在此参数下确认
  # ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less
  

  

  17:设置标志 flags ,不允许关闭osd、解决网络不稳定,osd 状态不断切换的问题
  # ceph osd set nodown
  

  取消设置
  # ceph osd unset nodown
  

  ################################pool相关################################
  

  1:查看ceph集群中的pool数量
  # ceph osd lspools   或者 ceph osd pool ls
  

  2:在ceph集群中创建一个pool
  # ceph osd pool create rbdtest 100            #这里的100指的是PG组:
  

  3:查看集群中所有pool的副本尺寸
  # ceph osd dump | grep 'replicated size'
  

  4:查看pool 最大副本数量
  # ceph osd pool get rbdpool size
  size: 3
  

  5:查看pool 最小副本数量
  # ceph osd pool get rbdpool min_size
  min_size: 2
  

  6:设置一个pool的pg数量
  # ceph osd pool set rbdtest pg_num 100
  

  7:设置一个pool的pgp数量
  # ceph osd pool set rbdtest pgp_num 100
  

  8: 修改ceph,数据最小副本数、和副本数
  ceph osd pool set $pool_name min_size 1
  ceph osd pool set $pool_name size 2
  

  示例:
  # ceph osd pool set rbdpool min_size 1
  # ceph osd pool set rbdpool size 2
  

  验证:
  # ceph osd dump
  pool 3 'rbdpool' replicated size 2 min_size 1
  

  

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

  

  10: 为一个ceph pool配置配额、达到配额前集群会告警,达到上限后无法再写入数据
  # ceph osd pool set-quota rbdtest max_objects 10000
  

  11: 在集群中删除一个pool,注意删除poolpool 映射的image 会直接被删除,线上操作要谨慎。
  # ceph osd pool delete rbdtestrbdtest--yes-i-really-really-mean-it#集群名字需要重复两次
  

  12: 给一个pool创建一个快照
  # ceph osd pool mksnap rbdtest   rbdtest-snap20150924
  

  13: 查看快照信息
  # rados lssnap -p rbdtest
  1       rbdtest-snap20150924    2015.09.24 19:58:55
  2       rbdtest-snap20150924012015.09.24 20:31:21
  2 snaps
  

  14:删除pool的快照
  # ceph osd pool rmsnap rbdtestrbdtest-snap20150924
  

  验证,剩余一个snap
  # rados lssnap -p rbdtest
  2       rbdtest-snap20150924012015.09.24 20:31:21
  1 snaps
  

  

  ################################rados命令相关##################
  rados 是和Ceph的对象存储集群(RADOS),Ceph的分布式文件系统的一部分进行交互是一种实用工具。
  

  1:查看ceph集群中有多少个pool (只是查看pool)
  # rados lspools    同ceph osd pool ls 输出结果一致
  

  2:显示整个系统和被池毁掉的使用率统计,包括磁盘使用(字节)和对象计数
  # rados df
  

  3:创建一个pool
  # rados mkpool test
  

  4:创建一个对象object
  # rados create test-object -p test
  

  5:查看对象文件
  # rados -p test ls
  test-object
  

  6:删除一个对象
  # rados rm test-object-1 -p test
  

  7:删除foo池 (和它所有的数据)
  # rados rmpool test test –yes-i-really-really-mean-it
  
  8:查看ceph pool中的ceph object (这里的object是以块形式存储的)
  # rados ls -p test | more
  

  9:为test pool创建快照
  # rados -p test mksnap testsnap
  created pool test snap testsnap
  

  10:列出给定池的快照
  # rados -p test lssnap
  1       testsnap      2015.09.24 21:14:34
  

  11:删除快照
  # rados -p test rmsnap testsnap
  removed pool test snap testsnap
  

  12:上传一个对象到test pool
  # rados -p test put myobject blah.txt
  

  13:
  ###使用rados 进行性能测试###
  

  测试用例如下:
  rados bench 600 writerand -t 100 -b 4K -p datapool
  

  选项解释:
  测试时间 :600
  

  支持测试类型:write/read ,加rand就是随机,不加就是顺序
  

  并发数( -t选项):100
  

  pool的名字是:datapool
  

  

  ################################ PG 相关 ################################
  PG =“放置组”。当集群中的数据,对象映射到编程器,被映射到这些PGS的OSD。
  

  1:查看pg组的映射信息
  # ceph pg dump    或者 ceph pg ls
  

  2:查看一个PG的map
  # ceph pg map 0.3f
  osdmap e88 pg 0.3f (0.3f) -> up acting    #其中的代表存储在osd.0、osd.2节点,osd.0代表主副本的存储位置
  

  3:查看PG状态
  # ceph pg stat
  

  4:查询一个pg的详细信息
  # ceph pg0.26 query
  

  5:要洗刷一个pg组,执行命令:
  # ceph pg scrub {pg-id}
  

  6:查看pg中stuck的状态
  要获取所有卡在某状态的归置组统计信息,执行命令:
  ceph pg dump_stuck inactive|unclean|stale [--format ] [-t|--threshold ]
  

  # ceph pg dump_stuck unclean
  # ceph pg dump_stuck inactive
  # ceph pg dump_stuck stale
  Inactive (不活跃)归置组不能处理读写,因为它们在等待一个有最新数据的 OSD 复活且进入集群。
  Unclean (不干净)归置组含有复制数未达到期望数量的对象,它们应该在恢复中。
  Stale (不新鲜)归置组处于未知状态:存储它们的 OSD 有段时间没向监视器报告了(由 mon_osd_report_timeout 配置)。
  可用格式有 plain (默认)和 json 。阀值定义的是,归置组被认为卡住前等待的最小时间(默认 300 秒)
  

  

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

  8:恢复一个丢失的pg
  如果集群丢了一个或多个对象,而且必须放弃搜索这些数据,你就要把未找到的对象标记为丢失( lost )。
  如果所有可能的位置都查询过了,而仍找不到这些对象,你也许得放弃它们了。这可能是罕见的失败组合导致的,集群在写入完成前,未能得知写入是否已执行。
  当前只支持 revert 选项,它使得回滚到对象的前一个版本(如果它是新对象)或完全忽略它。要把 unfound 对象标记为 lost ,执行命令:
  ceph pg {pg-id} mark_unfound_lost revert|delete
  

  

  9:查看某个PG内分布的数据状态,具体状态可以使用选项过滤输出
  ceph pg ls {} {active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|
  backfill_toofull|recovery_wait|undersized [active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|
  deep_scrub|backfill|backfill_toofull|recovery_wait|undersized...]} :list pg with specific pool, osd, state
  实例如下:
  pg号   过滤输出的状态
  # ceph   pg   ls       1   clean
  

  

  10:查询osd 包含pg 的信息,过滤输出pg的状态信息
  pg ls-by-osd      list pg on osd
  {} {active|clean|down|replay|splitting|scrubbing|scrubq|degraded|
  inconsistent|peering|repair|recovering| backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized[active|clean|down|replay|splitting|
  scrubbing|scrubq|degraded|inconsistent| peering|repair|recovering|backfill_ wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized...]}
  实例如下:
  # ceph pg ls-by-osd osd.5
  

  11:查询pool包含pg 的信息,过滤输出pg的状态信息
  ceph pgls-by-pool   poolname   选项
  ceph pg ls-by-pool   {active|clean| down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair| recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|
  backfill_toofull|recovery_wait| undersized [active|clean|down|replay|splitting|scrubbing|scrubq|degraded| inconsistent|peering|repair|recovering| backfill_wait|incomplete|stale| remapped|deep_scrub|backfill|backfill_
  实例如下:
  # ceph pg ls-by-pool test
  

  

  12:查询某个osd状态为 primary pg ,可以根据需要过滤状态
  pg ls-by-primary{} {active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|
  backfill_toofull|recovery_wait|undersized [active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|
  backfill_toofull|recovery_wait|undersized...]} :list pg with primary =
  实例如下:
  osd号   过滤输出的状态
  # ceph pg ls-by-primary    osd.3    clean
  ############################### rbd命令相关 #########################3
  

  1:在test池中创建一个命名为kjh的10000M的镜像
  # rbd create -p test --size 10000 kjh
  

  2:查看ceph中一个pool里的所有镜像
  # rbd ls test
  kjh
  

  3:查看新建的镜像的信息
  # rbd -p test info kjh
  

  4:查看ceph pool中一个镜像的信息
  # rbd info -p test--image kjh
  rbd image 'kjh':
  size 1000 MB in 250 objects
  order 22 (4096 kB objects)
  block_name_prefix: rb.0.92bd.74b0dc51
  format: 1
  
  5:删除一个镜像
  # rbd rm-p testkjh
  

  6:调整一个镜像的尺寸
  # rbd resize -p test --size 20000 kjh
  

  # rbd -p test info kjh   #调整后的镜像大小
  rbd image 'kjh':
  size 2000 MB in 500 objects
  order 22 (4096 kB objects)
  block_name_prefix: rb.0.92c1.74b0dc51
  format: 1
  

  #########rbd pool 快照功能测试###########
  

  1:新建个pool叫’ptmindpool’同时在下面创建一个’kjhimage’
  

  # ceph osd pool create ptmindpool 256 256
  pool 'ptmindpool' created
  

  

  2:创建镜像
  # rbd create kjhimage --size 1024 --pool ptmindpool
  

  3:查看镜像
  # rbd --pool ptmindpool ls
  kjhimage
  

  4:创建snap,快照名字叫’snapkjhimage’
  # rbd snap create ptmindpool/kjhimage@snapkjhimage
  

  

  5:查看kjhimage的snap
  # rbd snap ls ptmindpool/kjhimage
  SNAPID NAME         SIZE
  2 snapkjhimage 1024 MB
  
  6:回滚快照,
  # rbd snap rollback ptmindpool/kjhimage@snapkjhimage
  

  

  7:删除snap 删除snap报(rbd: snapshot 'snapshot-xxxx' is protected from removal.)写保护 ,使用 rbd snap unprotect volumes/snapshot-xxx' 解锁,然后再删除
  # rbd snap rm ptmindpool/kjhimage@snapkjhimage
  

  

  8:删除kjhimage的全部snapshot
  

  # rbd snap purge ptmindpool/kjhimage
  

  

  9: 把ceph pool中的一个镜像导出
  导出镜像
  # rbd export -p ptmindpool --image kjhimage /tmp/kjhimage.img
  Exporting image: 100% complete...done.
  

  验证查看导出文件
  l /tmp/kjhimage.img
  -rw-r--r-- 1 root root 1073741824 Sep 24 23:15 /tmp/kjhimage.img
  

  

  10:把一个镜像导入ceph中
  # rbd import /tmp/kjhimage.img-p ptmindpool --image importmyimage1
  Importing image: 100% complete...done.
  

  验证查看导入镜像文件
  rbd -pptmindpool ls
  importmyimage1
  

  

  




页: [1]
查看完整版本: 最新ceph集群常用命令梳理