cephCeph

更换 OSD Journal

2018-08-11  本文已影响18人  Joncc

4. 更换 OSD Journal


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

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

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

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

第一种方法

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

root@mon:~# ceph osd set noout
set noout

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

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

root@mon:~# ll /var/lib/ceph/osd/ceph-0/journal
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
root@mon:~# ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx 1 root root 10 Nov  8 09:21 39e9ad34-d7aa-4dec-865e-08952aa8aab5 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Nov  8 09:21 8e95b09d-ffa9-4163-b24c-b78020022797 -> ../../sdb2
lrwxrwxrwx 1 root root 10 Nov  8 09:21 aaeca5fa-456a-4f45-8a8b-9de0c2642f44 -> ../../sdc2
lrwxrwxrwx 1 root root 10 Nov  8 09:21 d30a6d4a-6da4-4a81-a9e5-4bc69ebeec8f -> ../../sdb1

3、停止 osd.0 进程。

systemctl stop ceph-osd@

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

root@mon:~# ceph-osd -i 0 --flush-journal
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
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
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 。

root@mon:~# ll /var/lib/ceph/osd/ceph-0/journal
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
root@mon:~# rm -rf /var/lib/ceph/osd/ceph-0/journal

磁盘分区 : (磁盘标签类型:gpt)

fdisk /dev/sdc

磁盘标签类型:gpt

命令(输入 m 获取帮助):g
Building a new GPT disklabel (GUID: EF7E0316-6057-46DD-B00F-E33ECE5A7BFC)

命令(输入 m 获取帮助):n
分区号 (1-128,默认 1):
第一个扇区 (2048-20971486,默认 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971486,默认 20971486):1000000
已创建分区 1
命令(输入 m 获取帮助):w

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

root@mon:~# ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx 1 root root 10 Nov  8 09:21 39e9ad34-d7aa-4dec-865e-08952aa8aab5 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Nov  8 13:17 8e95b09d-ffa9-4163-b24c-b78020022797 -> ../../sdb2
lrwxrwxrwx 1 root root 10 Nov  8 09:21 aaeca5fa-456a-4f45-8a8b-9de0c2642f44 -> ../../sdc2
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 文件:

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

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

root@mon:~# ceph-osd -i 0 --mkjournal
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
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 。

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

10、启动 osd.0 。

systemctl start ceph-osd@

11、去除 noout 的标记。

ceph osd unset noout

12、检查集群的状态。

root@mon:~# ceph -s
cluster 614e77b4-c997-490a-a3f9-e89aa0274da3
 health HEALTH_OK
 monmap e5: 1 mons at {osd1=10.95.2.43:6789/0}
        election epoch 796, quorum 0 osd1
 osdmap e1067: 3 osds: 3 up, 3 in
        flags sortbitwise
  pgmap v309733: 384 pgs, 6 pools, 1148 MB data, 311 objects
        3597 MB used, 73162 MB / 76759 MB avail
             384 active+clean

root@mon:~# ceph osd tree
ID WEIGHT  TYPE NAME                                     UP/DOWN REWEIGHT PRIMARY-AFFINITY                               
-4 0.05997 root default                                                                    
-1 0.01999     host mon                                                                    
 0 0.01999         osd.0                                      up  1.00000          1.00000 
-2 0.01999     host osd0                                                                   
 1 0.01999         osd.1                                      up  1.00000          1.00000 
-3 0.01999     host osd1                                                                   
 2 0.01999         osd.2                                      up  1.00000          1.00000

ps: 划分完journal分区,一定要给ceph用户权限,
给权限,然后手动启动OSD

chown ceph:ceph /dev/sdc[1-4]
systemctl start ceph-osd@

第二种方法

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

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

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

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

3、 还原分区表。

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

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

4、重建 journal 。

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

5、启动进程。

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

6、去除 noout 的标记。

root@lab8106 ~# ceph osd unset noout
上一篇 下一篇

猜你喜欢

热点阅读