小言_互联网的博客

Ceph日常运维管理和排错 --

729人阅读  评论(0)

Ceph日常运维管理

集群监控管理

集群整体运行状态


  
  1. [ root@cephnode01 ~] # ceph -s
  2. cluster:
  3. id: 8230a918-a0de -4784 -9ab8-cd2a2b8671d0
  4. health: HEALTH_WARN
  5. application not enabled on 1 pool(s)
  6. services:
  7. mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h)
  8. mgr: cephnode01(active, since 53m), standbys: cephnode03, cephnode02
  9. osd: 4 osds: 4 up (since 27h), 4 in (since 19h)
  10. rgw: 1 daemon active (cephnode01)
  11. data:
  12. pools: 6 pools, 96 pgs
  13. objects: 235 objects, 3.6 KiB
  14. usage: 4.0 GiB used, 56 GiB / 60 GiB avail
  15. pgs: 96 active+clean

  
  1. id:集群ID
  2. health:集群运行状态,这里有一个警告,说明是有问题,意思是pg数大于pgp数,通常此数值相等。
  3. mon:Monitors运行状态。
  4. osd:OSDs运行状态。
  5. mgr:Managers运行状态。
  6. mds:Metadatas运行状态。
  7. pools:存储池与PGs的数量。
  8. objects:存储对象的数量。
  9. usage:存储的理论用量。
  10. pgs:PGs的运行状态

  
  1. ~]$ ceph -w
  2. ~]$ ceph health detail

常用查询状态指令

集群状态:HEALTH_OK,HEALTH_WARN,HEALTH_ERR


  
  1. [root@ceph2 ~] # ceph health detail
  2. HEALTH_OK

  
  1. [root@ceph2 ~] # ceph -s
  2. cluster:
  3. id: 35a91e48 -8244 -4e96-a7ee -980ab989d20d
  4. health: HEALTH_OK
  5. services:
  6. mon: 3 daemons, quorum ceph2,ceph3,ceph4
  7. mgr: ceph4(active), standbys: ceph2, ceph3
  8. mds: cephfs -1/ 1/ 1 up { 0=ceph2=up:active}, 1 up:standby
  9. osd: 9 osds: 9 up, 9 in; 32 remapped pgs
  10. rbd-mirror: 1 daemon active
  11. data:
  12. pools: 14 pools, 536 pgs
  13. objects: 220 objects, 240 MB
  14. usage: 1764 MB used, 133 GB / 134 GB avail
  15. pgs: 508 active+clean
  16. 28 active+clean+remapped

ceph -w是一样的,但是出于交互状态,可以试试更新

集群标志


  
  1. noupOSD启动时,会将自己在MON上标识为UP状态,设置该标志位,则OSD不会被自动标识为up状态
  2. nodownOSD停止时,MON会将OSD标识为down状态,设置该标志位,则MON不会将停止的OSD标识为down状态,设置noupnodown可以防止网络抖动
  3. noout:设置该标志位,则mon不会从crush映射中删除任何OSD。对OSD作维护时,可设置该标志位,以防止CRUSHOSD停止时自动重平衡数据。OSD重新启动时,需要清除该flag
  4. noin:设置该标志位,可以防止数据被自动分配到OSD
  5. norecover:设置该flag,禁止任何集群恢复操作。在执行维护和停机时,可设置该flag
  6. nobackfill:禁止数据回填
  7. noscrub:禁止清理操作。清理PG会在短期内影响OSD的操作。在低带宽集群中,清理期间如果OSD的速度过慢,则会被标记为down。可以该标记来防止这种情况发生
  8. nodeep-scrub:禁止深度清理
  9. norebalance:禁止重平衡数据。在执行集群维护或者停机时,可以使用该flag
  10. pause:设置该标志位,则集群停止读写,但不影响osd自检
  11. full:标记集群已满,将拒绝任何数据写入,但可读

集群flag状态操作

只能对整个集群操作,不能针对单个osd

设置为noout状态:


  
  1. [ root@ceph2 ~] # ceph osd set noout
  2. noout is set

  
  1. [ root@ceph2 ~] # ceph -s
  2. cluster:
  3. id: 35a91e48 -8244 -4e96-a7ee -980ab989d20d
  4. health: HEALTH_WARN
  5. noout flag(s) set
  6. services:
  7. mon: 3 daemons, quorum ceph2,ceph3,ceph4
  8. mgr: ceph4(active), standbys: ceph2, ceph3
  9. mds: cephfs-1/1/1 up { 0=ceph2=up:active}, 1 up:standby
  10. osd: 9 osds: 9 up, 9 in; 32 remapped pgs
  11. flags noout
  12. rbd-mirror: 1 daemon active
  13. data:
  14. pools: 14 pools, 536 pgs
  15. objects: 220 objects, 240 MB
  16. usage: 1764 MB used, 133 GB / 134 GB avail
  17. pgs: 508 active+clean
  18. 28 active+clean+remapped
  19. io:
  20. client: 409 B/s rd, 0 op/s rd, 0 op/s wr

取消noout状态:


  
  1. [ root@ceph2 ~] # ceph osd unset noout
  2. noout is unset

  
  1. [root@ceph2 ~] # ceph -s
  2. cluster:
  3. id: 35a91e48 -8244 -4e96-a7ee -980ab989d20d
  4. health: HEALTH_OK
  5. services:
  6. mon: 3 daemons, quorum ceph2,ceph3,ceph4
  7. mgr: ceph4(active), standbys: ceph2, ceph3
  8. mds: cephfs -1/ 1/ 1 up { 0=ceph2=up:active}, 1 up:standby
  9. osd: 9 osds: 9 up, 9 in; 32 remapped pgs
  10. rbd-mirror: 1 daemon active
  11. data:
  12. pools: 14 pools, 536 pgs
  13. objects: 220 objects, 240 MB
  14. usage: 1764 MB used, 133 GB / 134 GB avail
  15. pgs: 508 active+clean
  16. 28 active+clean+remapped
  17. io:
  18. client: 2558 B/s rd, 0 B/s wr, 2 op/s rd, 0 op/s wr

设置为full状态:


  
  1. [ root@ceph2 ~] # ceph osd set full
  2. full is set

  
  1. [ root@ceph2 ~] # ceph -s
  2. cluster:
  3. id: 35a91e48 -8244 -4e96-a7ee -980ab989d20d
  4. health: HEALTH_WARN
  5. full flag(s) set
  6. services:
  7. mon: 3 daemons, quorum ceph2,ceph3,ceph4
  8. mgr: ceph4(active), standbys: ceph2, ceph3
  9. mds: cephfs-1/1/1 up { 0=ceph2=up:active}, 1 up:standby
  10. osd: 9 osds: 9 up, 9 in; 32 remapped pgs
  11. flags full
  12. rbd-mirror: 1 daemon active
  13. data:
  14. pools: 14 pools, 536 pgs
  15. objects: 220 objects, 240 MB
  16. usage: 1768 MB used, 133 GB / 134 GB avail
  17. pgs: 508 active+clean
  18. 28 active+clean+remapped
  19. io:
  20. client: 2558 B/s rd, 0 B/s wr, 2 op/s rd, 0 op/s wr

将指定文件作为对象写入到资源池 put


  
  1. [root@ceph2 ~]# rados -p ssdpool put testfull /etc/ceph/ceph.conf
  2. 2019 -03 -27 21: 59: 14.250208 7f6500913e40 0 client .65175.objecter FULL, paused modify 0x55d690a412b0 tid 0

取消full状态:


  
  1. [ root@ceph2 ~] # ceph osd unset full
  2. full is unset

  
  1. [root@ceph2 ~] # ceph -s
  2. cluster:
  3. id: 35a91e48 -8244 -4e96-a7ee -980ab989d20d
  4. health: HEALTH_OK
  5. services:
  6. mon: 3 daemons, quorum ceph2,ceph3,ceph4
  7. mgr: ceph4(active), standbys: ceph2, ceph3
  8. mds: cephfs -1/ 1/ 1 up { 0=ceph2=up:active}, 1 up:standby
  9. osd: 9 osds: 9 up, 9 in; 32 remapped pgs
  10. rbd-mirror: 1 daemon active
  11. data:
  12. pools: 14 pools, 536 pgs
  13. objects: 220 objects, 240 MB
  14. usage: 1765 MB used, 133 GB / 134 GB avail
  15. pgs: 508 active+clean
  16. 28 active+clean+remapped
  17. io:
  18. client: 409 B/s rd, 0 op/s rd, 0 op/s wr

  
  1. [root@ceph2 ~] # rados -p ssdpool put testfull /etc/ceph/ceph.conf
  2. [root@ceph2 ~] # rados -p ssdpool ls
  3. testfull
  4. test

PG状态

查看pg状态查看通常使用下面两个命令即可,dump可以查看更详细信息,如。


  
  1. ~]$ ceph pg dump
  2. ~]$ ceph pg stat

PG的状态


  
  1. CreatingPG正在被创建。通常当存储池被创建或者PG的数目被修改时,会出现这种状态
  2. ActivePG处于活跃状态。可被正常读写
  3. CleanPG中的所有对象都被复制了规定的副本数
  4. DownPG离线
  5. Replay:当某个OSD异常后,PG正在等待客户端重新发起操作
  6. SplittingPG正在初分割,通常在一个存储池的PG数增加后出现,现有的PG会被分割,部分对象被移动到新的PG
  7. ScrubbingPG正在做不一致校验
  8. DegradedPG中部分对象的副本数未达到规定数目
  9. InconsistentPG的副本出现了不一致。如果出现副本不一致,可使用ceph pg repair来修复不一致情况
  10. PeeringPerring是由主OSD发起的使用存放PG副本的所有OSDPG的所有对象和元数据的状态达成一致的过程。Peering完成后,主OSD才会接受客户端写请求
  11. RepairPG正在被检查,并尝试修改被发现的不一致情况
  12. RecoveringPG正在迁移或同步对象及副本。通常是一个OSD down掉之后的重平衡过程
  13. Backfill:一个新OSD加入集群后,CRUSH会把集群现有的一部分PG分配给它,被称之为数据回填
  14. Backfill-waitPG正在等待开始数据回填操作
  15. IncompletePG日志中缺失了一关键时间段的数据。当包含PG所需信息的某OSD不可用时,会出现这种情况
  16. StalePG处理未知状态。monitorsPG map改变后还没收到过PG的更新。集群刚启动时,在Peering结束前会出现该状态
  17. Remapped:当PGacting set变化后,数据将会从旧acting set迁移到新acting set。新主OSD需要一段时间后才能提供服务。因此这会让老的OSD继续提供服务,直到PG迁移完成。在这段时间,PG状态就会出现Remapped

管理stuck(卡住)的状态PG


  
  1. 如果PG长时间(mon_pg_stuck_threshold,默认为300s)出现如下状态时,MON会将该PG标记为stuck
  2. inactivepgpeering问题
  3. uncleanpg在故障恢复时遇到问题
  4. stalepg没有任何OSD报告,可能其所有的OSD都是downout
  5. undersizedpg没有充足的osd来存储它应具有的副本数
  6. 默认情况下,Ceph会自动执行恢复,但如果未成自动恢复,则集群状态会一直处于HEALTH_WARN或者HEALTH_ERR
  7. 如果特定PG的所有osd都是downout状态,则PG会被标记为stale。要解决这一情况,其中一个OSD必须要重生,且具有可用的PG副本,否则PG不可用
  8. Ceph可以声明osdPG已丢失,这也就意味着数据丢失。
  9. 需要说明的是,osd的运行离不开journal,如果journal丢失,则osd停止

stuck的状态pg操作

检查处于stuck状态的pg:


  
  1. [root@ceph2 ceph]# ceph pg dump_stuck
  2. ok
  3. PG_STAT STATE UP UP_PRIMARY ACTING ACTING_PRIMARY
  4. 17 .5 stale+ peering [0,2] 0 [0,2] 0
  5. 17 .4 stale+ peering [2,0] 2 [2,0] 2
  6. 17 .3 stale+ peering [2,0] 2 [2,0] 2
  7. 17 .2 stale+ peering [2,0] 2 [2,0] 2
  8. 17 .1 stale+ peering [0,2] 0 [0,2] 0
  9. 17 .0 stale+ peering [2,0] 2 [2,0] 2
  10. 17 .1f stale+ peering [2,0] 2 [2,0] 2
  11. 17 .1e stale+ peering [0,2] 0 [0,2] 0
  12. 17 .1d stale+ peering [2,0] 2 [2,0] 2
  13. 17 .1c stale+ peering [0,2] 0 [0,2] 0
  14. [root@ceph2 ceph]# ceph osd blocked-by
  15. osd num_blocked
  16. 0 19
  17. 2 13

检查导致pg一致阻塞在peering状态的osd:

ceph osd blocked-by

检查某个pg的状态:

ceph pg dump |grep pgid

声明pg丢失:

ceph pg pgid mark_unfound_lost revert|delete

声明osd丢失(需要osd状态为down且out):

ceph osd lost osdid --yes-i-really-mean-it

Pool状态


  
  1. ~]$ ceph osd pool stats
  2. ~]$ ceph osd lspools

限制Pool配置更改

主要过程

禁止池被删除

osd_pool_default_flag_nodelete

禁止池的pg_num和pgp_num被修改

osd_pool_default_flag_nopgchange

禁止修改池的size和min_size

osd_pool_default_flag_nosizechang
实验操作

  
  1. [root@ceph2 ~] # ceph daemon osd.0 config show|grep osd_pool_default_flag
  2. "osd_pool_default_flag_hashpspool": "true",
  3. "osd_pool_default_flag_nodelete": "false",
  4. "osd_pool_default_flag_nopgchange": "false",
  5. "osd_pool_default_flag_nosizechange": "false",
  6. "osd_pool_default_flags": "0",
[root@ceph2 ~]# ceph tell osd.* injectargs --osd_pool_default_flag_nodelete true

  
  1. [root@ceph2 ~] # ceph daemon osd.0 config show|grep osd_pool_default_flag
  2. "osd_pool_default_flag_hashpspool": "true",
  3. "osd_pool_default_flag_nodelete": "true",
  4. "osd_pool_default_flag_nopgchange": "false",
  5. "osd_pool_default_flag_nosizechange": "false",
  6. "osd_pool_default_flags": "0",

  
  1. [ root@ceph2 ~] # ceph osd pool delete ssdpool ssdpool yes-i-really-really-mean-it
  2. Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool ssdpool. If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it. #不能删除

改为false

[root@ceph2 ~]# ceph tell osd.* injectargs --osd_pool_default_flag_nodelete false

  
  1. [root@ceph2 ~] # ceph daemon osd.0 config show|grep osd_pool_default_flag
  2. "osd_pool_default_flag_hashpspool": "true",
  3. "osd_pool_default_flag_nodelete": "true", #依然显示为ture
  4. "osd_pool_default_flag_nopgchange": "false",
  5. "osd_pool_default_flag_nosizechange": "false",
  6. "osd_pool_default_flags": "0"
使用配置文件修改

在ceph1上修改

osd_pool_default_flag_nodelete false

  
  1. [root@ceph1 ~] # ansible all -m copy -a 'src=/etc/ceph/ceph.conf dest=/etc/ceph/ceph.conf owner=ceph group=ceph mode=0644'
  2. [root@ceph1 ~] # ansible mons -m shell -a ' systemctl restart ceph-mon.target'
  3. [root@ceph1 ~] # ansible mons -m shell -a ' systemctl restart ceph-osd.target'

  
  1. [root@ceph2 ~] # ceph daemon osd.0 config show|grep osd_pool_default_flag
  2. "osd_pool_default_flag_hashpspool": "true",
  3. "osd_pool_default_flag_nodelete": "false",
  4. "osd_pool_default_flag_nopgchange": "false",
  5. "osd_pool_default_flag_nosizechange": "false",
  6. "osd_pool_default_flags": "0",

删除ssdpool

[root@ceph2 ~]# ceph osd pool delete ssdpool ssdpool --yes-i-really-really-mean-it

成功删除!!!

OSD状态


  
  1. ~]$ ceph osd stat
  2. ~]$ ceph osd status
  3. ~]$ ceph osd dump
  4. ~]$ ceph osd tree
  5. ~]$ ceph osd df

Monitor状态和查看仲裁状态


  
  1. ~]$ ceph mon stat
  2. ~]$ ceph mon dump
  3. ~]$ ceph quorum_status

集群空间用量


  
  1. ~]$ ceph df
  2. ~]$ ceph df detail

集群配置管理(临时和全局,服务平滑重启)

有时候需要更改服务的配置,但不想重启服务,或者是临时修改。这时候就可以使用tell和daemon子命令来完成此需求。

查看运行配置


  
  1. 命令格式:
  2. # ceph daemon {daemon-type}.{id} config show
  3. 命令举例:
  4. # ceph daemon osd.0 config show

2、tell子命令格式

使用 tell 的方式适合对整个集群进行设置,使用 * 号进行匹配,就可以对整个集群的角色进行设置。而出现节点异常无法设置时候,只会在命令行当中进行报错,不太便于查找。


  
  1. 命令格式:
  2. # ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}]
  3. 命令举例:
  4. # ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1
  • daemon-type:为要操作的对象类型如osd、mon、mds等。
  • daemon id:该对象的名称,osd通常为0、1等,mon为ceph -s显示的名称,这里可以输入*表示全部。
  • injectargs:表示参数注入,后面必须跟一个参数,也可以跟多个

3、daemon子命令

使用 daemon 进行设置的方式就是一个个的去设置,这样可以比较好的反馈,此方法是需要在设置的角色所在的主机上进行设置。


  
  1. 命令格式:
  2. # ceph daemon {daemon-type}.{id} config set {name}={value}
  3. 命令举例:
  4. # ceph daemon mon.ceph-monitor -1 config set mon_allow_pool_delete false

集群操作

命令包含start、restart、status


  
  1. 1、启动所有守护进程
  2. # systemctl start ceph.target
  3. 2、按类型启动守护进程
  4. # systemctl start ceph-mgr.target
  5. # systemctl start ceph-osd@id
  6. # systemctl start ceph-mon.target
  7. # systemctl start ceph-mds.target
  8. # systemctl start ceph-radosgw.target

添加和删除OSD

添加OSD


  
  1. 1、格式化磁盘
  2. ceph-volume lvm zap /dev/sd<id>
  3. 2、进入到ceph-deploy执行目录/ my-cluster,添加OSD
  4. ceph-deploy osd create --data /dev/sd<id> $hostname

删除OSD


  
  1. 1、调整osd的crush weight为 0
  2. ceph osd crush reweight osd. <ID> 0.0
  3. 2、将osd进程stop
  4. systemctl stop ceph-osd@ <ID>
  5. 3、将osd设置out
  6. ceph osd out <ID>
  7. 4、立即执行删除OSD中数据
  8. ceph osd purge osd. <ID> --yes-i-really-mean-it
  9. 5、卸载磁盘
  10. umount /var/lib/ceph/osd/ceph-?

扩容PG


  
  1. ceph osd pool set {pool- name} pg_num 128
  2. ceph osd pool set {pool- name} pgp_num 128

注:

1、扩容大小取跟它接近的2的N次方

2、在更改pool的PG数量时,需同时更改PGP的数量。PGP是为了管理placement而存在的专门的PG,它和PG的数量应该保持一致。如果你增加pool的pg_num,就需要同时增加pgp_num,保持它们大小一致,这样集群才能正常rebalancing。

Pool操作

列出存储池

ceph osd lspools

创建存储池


  
  1. 命令格式:
  2. # ceph osd pool create {pool-name} {pg-num} [{pgp-num}]
  3. 命令举例:
  4. # ceph osd pool create rbd 32 32

设置存储池配额


  
  1. 命令格式:
  2. # ceph osd pool set-quota {pool-name} [max_objects {obj- count}] [max_bytes {bytes}]
  3. 命令举例:
  4. # ceph osd pool set-quota rbd max_objects 10000

删除存储池

ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]

重命名存储池

ceph osd pool rename {current-pool-name} {new-pool-name}

查看存储池统计信息

rados df

给存储池做快照

ceph osd pool mksnap {pool-name} {snap-name}

删除存储池的快照

ceph osd pool rmsnap {pool-name} {snap-name}

获取存储池选项值

ceph osd pool get {pool-name} {key}

调整存储池选项值


  
  1. ceph osd pool set {pool- name} { key} { value}
  2. size:设置存储池中的对象副本数,详情参见设置对象副本数。仅适用于副本存储池。
  3. min_size:设置 I/O 需要的最小副本数,详情参见设置对象副本数。仅适用于副本存储池。
  4. pg_num:计算数据分布时的有效 PG 数。只能大于当前 PG 数。
  5. pgp_num:计算数据分布时使用的有效 PGP 数量。小于等于存储池的 PG 数。
  6. hashpspool:给指定存储池设置/取消 HASHPSPOOL 标志。
  7. target_max_bytes:达到 max_bytes 阀值时会触发 Ceph 冲洗或驱逐对象。
  8. target_max_objects:达到 max_objects 阀值时会触发 Ceph 冲洗或驱逐对象。
  9. scrub_min_interval:在负载低时,洗刷存储池的最小间隔秒数。如果是 0 ,就按照配置文件里的 osd_scrub_min_interval 。
  10. scrub_max_interval:不管集群负载如何,都要洗刷存储池的最大间隔秒数。如果是 0 ,就按照配置文件里的 osd_scrub_max_interval 。
  11. deep_scrub_interval:“深度”洗刷存储池的间隔秒数。如果是 0 ,就按照配置文件里的 osd_deep_scrub_interval 。

获取对象副本数

ceph osd dump | grep 'replicated size'

用户管理

Ceph 把数据以对象的形式存于各存储池中。Ceph 用户必须具有访问存储池的权限才能够读写数据。另外,Ceph 用户必须具有执行权限才能够使用 Ceph 的管理命令。

查看用户信息


  
  1. 查看所有用户信息
  2. # ceph auth list
  3. 获取所有用户的 key与权限相关信息
  4. # ceph auth get client.admin
  5. 如果只需要某个用户的 key信息,可以使用pring- key子命令
  6. # ceph auth print-key client.admin

添加用户


  
  1. # ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
  2. # ceph auth get- or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
  3. # ceph auth get- or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
  4. # ceph auth get- or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key

修改用户权限


  
  1. # ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
  2. # ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
  3. # ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
  4. # ceph auth caps client.ringo mon ' ' osd ' '

删除用户


  
  1. # ceph auth del {TYPE}.{ID}
  2. 其中, {TYPE} 是 client,osd,mon 或 mds 的其中一种。{ID} 是用户的名字或守护进程的 ID 。

增加和删除Monitor

一个集群可以只有一个 monitor,推荐生产环境至少部署 3 个。 Ceph 使用 Paxos 算法的一个变种对各种 map 、以及其它对集群来说至关重要的信息达成共识。建议(但不是强制)部署奇数个 monitor 。Ceph 需要 mon 中的大多数在运行并能够互相通信,比如单个 mon,或 2 个中的 2 个,3 个中的 2 个,4 个中的 3 个等。初始部署时,建议部署 3 个 monitor。后续如果要增加,请一次增加 2 个。

新增一个monitor


  
  1. # ceph-deploy mon create $hostname
  2. 注意:执行ceph-deploy之前要进入之前安装时候配置的目录。/ my-cluster

删除Monitor


  
  1. # ceph-deploy mon destroy $hostname
  2. 注意: 确保你删除某个 Mon 后,其余 Mon 仍能达成一致。如果不可能,删除它之前可能需要先增加一个。

Ceph故障排除

nearfull osd(s) or pool(s) nearfull

此时说明部分osd的存储已经超过阈值,mon会监控ceph集群中OSD空间使用情况。如果要消除WARN,可以修改这两个参数,提高阈值,但是通过实践发现并不能解决问题,可以通过观察osd的数据分布情况来分析原因。

配置文件设置阈值


  
  1. "mon_osd_full_ratio": "0.95",
  2. "mon_osd_nearfull_ratio": "0.85"

自动处理


  
  1. ceph osd reweight- by-utilization
  2. ceph osd reweight- by-pg 105 cephfs_data(pool_name)

手动处理:

ceph osd reweight osd.2 0.8

全局处理


  
  1. ceph mgr module ls
  2. ceph mgr module enable balancer
  3. ceph balancer on
  4. ceph balancer mode crush-compat
  5. ceph config- key set "mgr/balancer/max_misplaced": "0.01"

PG 故障状态

PG状态概述
一个PG在它的生命周期的不同时刻可能会处于以下几种状态中:

Creating(创建中)
在创建POOL时,需要指定PG的数量,此时PG的状态便处于creating,意思是Ceph正在创建PG。

Peering(互联中)
peering的作用主要是在PG及其副本所在的OSD之间建立互联,并使得OSD之间就这些PG中的object及其元数据达成一致。

Active(活跃的)
处于该状态意味着数据已经完好的保存到了主PG及副本PG中,并且Ceph已经完成了peering工作。

Clean(整洁的)
当某个PG处于clean状态时,则说明对应的主OSD及副本OSD已经成功互联,并且没有偏离的PG。也意味着Ceph已经将该PG中的对象按照规定的副本数进行了复制操作。

Degraded(降级的)
当某个PG的副本数未达到规定个数时,该PG便处于degraded状态,例如:

在客户端向主OSD写入object的过程,object的副本是由主OSD负责向副本OSD写入的,直到副本OSD在创建object副本完成,并向主OSD发出完成信息前,该PG的状态都会一直处于degraded状态。又或者是某个OSD的状态变成了down,那么该OSD上的所有PG都会被标记为degraded。
当Ceph因为某些原因无法找到某个PG内的一个或多个object时,该PG也会被标记为degraded状态。此时客户端不能读写找不到的对象,但是仍然能访问位于该PG内的其他object。

Recovering(恢复中)
当某个OSD因为某些原因down了,该OSD内PG的object会落后于它所对应的PG副本。而在该OSD重新up之后,该OSD中的内容必须更新到当前状态,处于此过程中的PG状态便是recovering。

Backfilling(回填)
当有新的OSD加入集群时,CRUSH会把现有集群内的部分PG分配给它。这些被重新分配到新OSD的PG状态便处于backfilling。

Remapped(重映射)
当负责维护某个PG的acting set变更时,PG需要从原来的acting set迁移至新的acting set。这个过程需要一段时间,所以在此期间,相关PG的状态便会标记为remapped。

Stale(陈旧的)
默认情况下,OSD守护进程每半秒钟便会向Monitor报告其PG等相关状态,如果某个PG的主OSD所在acting set没能向Monitor发送报告,或者其他的Monitor已经报告该OSD为down时,该PG便会被标记为stale。

OSD状态

单个OSD有两组状态需要关注,其中一组使用in/out标记该OSD是否在集群内,另一组使用up/down标记该OSD是否处于运行中状态。两组状态之间并不互斥,换句话说,当一个OSD处于“in”状态时,它仍然可以处于up或down的状态。

OSD状态为in且up
这是一个OSD正常的状态,说明该OSD处于集群内,并且运行正常。

OSD状态为in且down
此时该OSD尚处于集群中,但是守护进程状态已经不正常,默认在300秒后会被踢出集群,状态进而变为out且down,之后处于该OSD上的PG会迁移至其它OSD。

OSD状态为out且up
这种状态一般会出现在新增OSD时,意味着该OSD守护进程正常,但是尚未加入集群。

OSD状态为out且down
在该状态下的OSD不在集群内,并且守护进程运行不正常,CRUSH不会再分配PG到该OSD上。

关于Ceph的一些参考

参考1:https://my.oschina.net/diluga/blog/1501203#h4_6 (详解了Ceph上线的注意事项和日志维护须知,并没有命令,是最终要的架构概念)

参考2:http://www.zphj1987.com/tag/server/ (ceph工程师博客)

参考3:https://www.cnblogs.com/hukey/p/11899710.html


转载:https://blog.csdn.net/songfei_dream/article/details/103975585
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场