返回介绍

第三部分:Ceph 进阶 - 4. 更换 OSD Journal

发布于 2020-08-30 11:37:27 字数 8954 浏览 1252 评论 0 收藏 0


本篇中部分内容来自 zphj1987 —— 如何替换 Ceph 的 Journal

Ceph 在一块单独的磁盘上部署 OSD 的时候,是默认把 journal 和 OSD 放在同一块磁盘的不同分区上。有时候,我们可能需要把 OSD 的 journal 分区从一个磁盘替换到另一个磁盘上去。那么应该怎样替换 Ceph 的 journal 分区呢?

有两种方法来修改 Ceph 的 journal:

  • 创建一个 journal 分区,在上面创建一个新的 journal。
  • 转移已经存在的 journal 分区到新的分区上,这个适合整盘替换。

Ceph 的 journal 是基于事务的日志,所以正确的下刷 journal 数据,然后重新创建 journal 并不会引起数据丢失,因为在下刷 journal 的数据的时候,osd 是停止的,一旦数据下刷后,这个 journal 是不会再有新的脏数据进来的。

第一种方法

1、首先给 Ceph 集群设置 noout 标志。

  1. root@mon:~# ceph osd set noout
  2. set noout

2、假设我们现在想要替换 osd.0 的 journal。首先查看 osd.0 当前的 journal 位置,当前使用的是 /dev/sdb2 分区。

  1. root@mon:~# ceph-disk list | grep osd.0
  2. /dev/sdb1 ceph data, active, cluster ceph, osd.0, journal /dev/sdb2
  3. root@mon:~# ll /var/lib/ceph/osd/ceph-0/journal
  4. lrwxrwxrwx 1 root root 58 May 24 15:06 /var/lib/ceph/osd/ceph-0/journal -> /dev/disk/by-partuuid/8e95b09d-ffa9-4163-b24c-b78020022797
  5. root@mon:~# ls -l /dev/disk/by-partuuid/
  6. total 0
  7. lrwxrwxrwx 1 root root 10 Nov 8 09:21 39e9ad34-d7aa-4dec-865e-08952aa8aab5 -> ../../sdc1
  8. lrwxrwxrwx 1 root root 10 Nov 8 09:21 8e95b09d-ffa9-4163-b24c-b78020022797 -> ../../sdb2
  9. lrwxrwxrwx 1 root root 10 Nov 8 09:21 aaeca5fa-456a-4f45-8a8b-9de0c2642f44 -> ../../sdc2
  10. lrwxrwxrwx 1 root root 10 Nov 8 09:21 d30a6d4a-6da4-4a81-a9e5-4bc69ebeec8f -> ../../sdb1

3、停止 osd.0 进程。

  1. stop ceph-osd id=0

4、下刷 journal 到 osd,使用 -i 指定需要替换 journal 的 osd 的编号。

  1. root@mon:~# ceph-osd -i 0 --flush-journal
  2. SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  3. SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  4. 2016-11-08 13:17:58.355025 7f8351a72800 -1 flushed journal /var/lib/ceph/osd/ceph-0/journal for object store /var/lib/ceph/osd/ceph-0

5、删除旧的 journal 。

  1. root@mon:~# ll /var/lib/ceph/osd/ceph-0/journal
  2. lrwxrwxrwx 1 root root 58 May 24 15:06 /var/lib/ceph/osd/ceph-0/journal -> /dev/disk/by-partuuid/8e95b09d-ffa9-4163-b24c-b78020022797
  3. root@mon:~# rm -rf /var/lib/ceph/osd/ceph-0/journal

6、下面用 /dev/sdc2 分区重建 osd.0 的 journal 。查看 /dev/sdc2uuid

  1. root@mon:~# ls -l /dev/disk/by-partuuid/
  2. total 0
  3. lrwxrwxrwx 1 root root 10 Nov 8 09:21 39e9ad34-d7aa-4dec-865e-08952aa8aab5 -> ../../sdc1
  4. lrwxrwxrwx 1 root root 10 Nov 8 13:17 8e95b09d-ffa9-4163-b24c-b78020022797 -> ../../sdb2
  5. lrwxrwxrwx 1 root root 10 Nov 8 09:21 aaeca5fa-456a-4f45-8a8b-9de0c2642f44 -> ../../sdc2
  6. lrwxrwxrwx 1 root root 10 Nov 8 09:21 d30a6d4a-6da4-4a81-a9e5-4bc69ebeec8f -> ../../sdb1

新的 journal 的 uuid 的路径为 /dev/disk/by-partuuid/aaeca5fa-456a-4f45-8a8b-9de0c2642f44

7、新建 journal 的链接和 journal_uuid 文件:

  1. root@mon:~# ln -s /dev/disk/by-partuuid/aaeca5fa-456a-4f45-8a8b-9de0c2642f44 /var/lib/ceph/osd/ceph-0/journal
  2. root@mon:~# echo aaeca5fa-456a-4f45-8a8b-9de0c2642f44 > /var/lib/ceph/osd/ceph-0/journal_uuid

8、给 osd.0 创建 journal,使用 -i 指定 osd 的编号 。

  1. root@mon:~# ceph-osd -i 0 --mkjournal
  2. SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  3. 2016-11-08 13:29:36.115461 7f64ec851800 -1 created new journal /var/lib/ceph/osd/ceph-0/journal for object store /var/lib/ceph/osd/ceph-0

9、查看新 journal 。

  1. root@mon:~# ceph-disk list | grep osd.0
  2. /dev/sdb1 ceph data, active, cluster ceph, osd.0, journal /dev/sdc2

10、启动 osd.0 。

  1. start ceph-osd id=0

11、去除 noout 的标记。

  1. ceph osd unset noout

12、检查集群的状态。

  1. root@mon:~# ceph -s
  2. cluster 614e77b4-c997-490a-a3f9-e89aa0274da3
  3. health HEALTH_OK
  4. monmap e5: 1 mons at {osd1=10.95.2.43:6789/0}
  5. election epoch 796, quorum 0 osd1
  6. osdmap e1067: 3 osds: 3 up, 3 in
  7. flags sortbitwise
  8. pgmap v309733: 384 pgs, 6 pools, 1148 MB data, 311 objects
  9. 3597 MB used, 73162 MB / 76759 MB avail
  10. 384 active+clean
  11. root@mon:~# ceph osd tree
  12. ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
  13. -4 0.05997 root default
  14. -1 0.01999 host mon
  15. 0 0.01999 osd.0 up 1.00000 1.00000
  16. -2 0.01999 host osd0
  17. 1 0.01999 osd.1 up 1.00000 1.00000
  18. -3 0.01999 host osd1
  19. 2 0.01999 osd.2 up 1.00000 1.00000

第二种方法

这个属于备份和转移分区表的方法。

1、首先按方法一中的第 1 ~ 4 步,设置 noout 标志,停进程,下刷 journal。

2、备份需要替换 journal 的分区表。

  1. root@lab8106 ~# sgdisk --backup=/tmp/backup_journal_sdd /dev/sdd

3、 还原分区表。

  1. root@lab8106 ~# sgdisk --load-backup=/tmp/backup_journal_sde /dev/sde
  2. root@lab8106 ~# parted -s /dev/sde print

新的 journal 磁盘现在跟老的 journal 的磁盘的分区表一样的了。这意味着新的分区的 UUID 和老的相同的。如果选择的是这种备份还原的方法,那么 journal 的那个软连接是不需要进行修改的,因为两个磁盘的 uuid 是一样的,所以需要注意将老的磁盘拔掉或者清理掉分区,以免冲突。

4、重建 journal 。

  1. root@lab8106 ~# ceph-osd -i 0 --mkjournal

5、启动进程。

  1. root@lab8106 ~# start ceph-osd id=0

6、去除 noout 的标记。

  1. root@lab8106 ~# ceph osd unset noout

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文