sharpds77 发表于 2019-2-2 10:40:02

删除 Ceph 集群异常客户端 watcher

  在Ceph集群日常运维中,管理员可能会遇到有的image删除不了的情况,有一种情况是由于image下有快照信息,只需要先将快照信息清除,然后再删除该image即可,还有一种情况是因为该image仍旧被一个客户端在访问,具体表现为该image中有watcher,如果该客户端异常了,那么就会出现无法删除该image的情况。
  watcher是什么?
  

  Ceph中有一个watch/notify机制(粒度是object),它用来在不同客户端之间进行消息通知,使得各客户端之间的状态保持一致,而每一个进行watch的客户端,对于Ceph集群来说都是一个watcher。
  如何查看当前image上的watcher?
  

  因为watch的粒度是object,想要了解一个image上的watcher信息,最简单的方法就是查看该image的header对象上的watcher信息。
  首先找到image的header对象
  

  # rbd info test_img
  rbd image 'test_img':
  size 5000 MB in 1250 objects
  order 22 (4096 kB objects)
  block_name_prefix: rbd_data.fa7b2ae8944a
  format: 2
  features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
  查询到该image的block_name_prefix为 rbd_data.fa7b2ae8944a那么该image的header对象则为rbd_header.fa7b2ae8944a,然后我们就可以通过命令查看该image的header对象上的watcher信息。
  

  # rados listwatchers -p rbd rbd_header.fa7b2ae8944a
  

  watcher=192.8.8.10:0/1262448884 client.170939 cookie=140096303678368
  Ceph集群异常客户端Watcher处理
  

  刚才查看到test_img这个image上有一个watcher,假设客户端watcher=192.8.8.10:0/1262448884出现异常,那么我们如何处理呢?其实我们只需要将此异常客户端设置到OSD的黑名单即可:
  

  # ceph osd blacklist add 192.8.8.10:0/1262448884
  blacklisting 192.8.8.10:0/1262448884 until 2017-03-27 02:11:54.206165 (3600 sec)
  此时我们再去查看该image的header对象的watcher信息:
  

  # rados listwatchers -p rbd rbd_header.fa7b2ae8944a
  异常客户端的watcher信息已经不存在了,这个时候我们就可以对该image进行删除操作了。
  




页: [1]
查看完整版本: 删除 Ceph 集群异常客户端 watcher