汇总Ceph生产运维中遇到的问题

汇总Ceph生产运维中遇到的问题

1. 更换故障盘

1.1 查看故障盘osd id

ceph osd tree

1.2 移除故障盘

ceph osd out osd.60
ceph osd crush remove osd.60
ceph auth del osd.60
ceph osd rm osd.60

# ceph osd destroy 60 --yes-i-really-mean-it  # 清空硬盘上的数据和元数据
# ceph osd purge 60 --yes-i-really-mean-it  # 快速删除osd,等同于crush remove+ auth del + osd rm
# destroy可以保留osd id;purge不保留osd id;新版本建议直接使用 ceph osd out && ceph osd purge 命令清除故障盘

ceph osd out osd.60
ceph osd purge 60 --yes-i-really-mean-it

1.3 下线故障硬盘

systemctl stop ceph-osd@60
umount /var/lib/ceph/osd/ceph-60
# 线下更换...

1.4 查看新硬盘盘符

lsblk

1.5 擦除新硬盘

ceph-volume lvm zap /dev/sde --destroy
# 如果更换的盘带有逻辑卷信息(旧硬盘),需要先清除逻辑卷信息,使用如下命令
# dmsetup remove ceph--176f681d--9b18--4d97--ada4--077dcb507638-osd--block--0376cd87--c5c1--4a6b--ae7a--8dff088932a4

1.6 分配新id和fsid创建并启动osd(合并以下7/8/9步骤,即 create 等同于prepare + activate,使用 prepare 和 activate 的好处是可以逐步地将新的 OSD 加入集群,避免大量的数据重平衡)

ceph-volume lvm create --data /dev/sde --bluestore

1.7 格式化lvm设备并将其与osd关联(可选)

ceph-volume lvm prepare --osd-id 60 --bluestore --data /dev/sde

# ceph-volume lvm prepare --bluestore --data /path/to/device
# ceph-volume lvm prepare --filestore --data volume_group/lv_name --journal /dev/sdh
# ceph-volume lvm prepare --filestore --data volume_group/lv_name --journal volume_group/journal_lv

1.8 查看osd fsid(可选)

ceph-volume lvm list
cat /var/lib/ceph/osd/ceph-60/fsid

1.9 发现并挂载与osd id关联的lvm设备并启动osd(可选)

ceph-volume lvm activate 60 78341e1b-3cdf-466f-bdec-fc5b09192e35

1.10 手动将osd加入到crush map

ceph osd crush add osd.60 1.63699 root=stat
ceph osd crush add osd.60 1.63699 host=stat_06

2. 扩容osd节点

scp master01:/etc/yum.repos.d/ceph_stable.repo /etc/yum.repos.d/ceph_stable.repo
scp master01:/etc/ceph/ceph.conf /etc/ceph
scp master01:/etc/ceph/ceph.client.admin.keyring /etc/ceph
scp master01:/var/lib/ceph/bootstrap-osd/ceph.keyring /var/lib/ceph/bootstrap-osd

yum install -y ceph-osd

ceph-volume lvm zap /dev/sdb --destroy
ceph-volume lvm zap /dev/sdc --destroy
ceph-volume lvm zap /dev/sdd --destroy
ceph-volume lvm zap /dev/sde --destroy

ceph-volume lvm create --data /dev/sdb --bluestore --block.db /dev/sdf  --block.wal /dev/sdg --block.db-size 20G --block.wal-size 20G
ceph-volume lvm create --data /dev/sdc --bluestore --block.db /dev/sdf  --block.wal /dev/sdg --block.db-size 20G --block.wal-size 20G
ceph-volume lvm create --data /dev/sdd --bluestore --block.db /dev/sdf  --block.wal /dev/sdg --block.db-size 20G --block.wal-size 20G
ceph-volume lvm create --data /dev/sde --bluestore --block.db /dev/sdf  --block.wal /dev/sdg --block.db-size 20G --block.wal-size 20G

# 查看硬盘对应的osd id号,并向非默认规则集中增加硬盘(根据自己的crush规则自行设置)
ceph-volume lvm list
ceph osd crush add osd.53 1.63699 root=stat
ceph osd crush add osd.53 1.63699 host=stat_06

3. 缩容osd节点

3.1 停止所有osd服务

systemctl stop ceph-osd@13.server
systemctl stop ceph-osd@14.server
systemctl stop ceph-osd@15.server
systemctl stop ceph-osd@16.server

3.2 销毁所有osd

ceph osd purge 13 --yes-i-really-mean-it
ceph osd purge 14 --yes-i-really-mean-it
ceph osd purge 15 --yes-i-really-mean-it
ceph osd purge 16 --yes-i-really-mean-it

3.3 擦除磁盘数据

ceph-volume lvm zap --osd-id 13 --destroy
ceph-volume lvm zap --osd-id 14 --destroy
ceph-volume lvm zap --osd-id 15 --destroy
ceph-volume lvm zap --osd-id 16 --destroy

3.4 清除crush数据

ceph osd crush tree
ceph osd crush rm node03

3.5 删除osd应用

yum remove -y ceph-osd ceph-common

4. 调整PG

Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count, 结算的结果往上取靠近2的N次方的值。

ceph osd lspools
ceph osd pool get pool1 all
ceph osd pool set pool1 pg_num 2048
ceph osd pool set pool1 pgp_num 2048

5. 报警提示:1 daemons have recently crashed

ceph crash ls-new
ceph crash info
ceph crash archive-all

6. 多路径创建逻辑卷失败的问题:

RuntimeError: Cannot use device (/dev/mapper/mpathh). A vg/lv path or an existing device is needed
https://tracker.ceph.com/issues/23337

systemctl reload multipathd.service
multipath -ll

# 修改ceph-volume的源代码文件
vim /usr/lib/python2.7/site-packages/ceph_volume/util/disk.py

# ... src/ceph-volume/util/disk.py
    # use lsblk first, fall back to using stat
    TYPE = lsblk(dev).get('TYPE')
    if TYPE:
        return TYPE == 'disk' or TYPE == 'mpath'

# 重新执行ceph-volume命令
ceph-volume lvm create --bluestore --data /dev/mapper/mpathh
ceph-volume lvm ls

7. 磁盘有分区表导致无法创建osd:

error: GPT headers found, they must be removed on: /dev/dm-10

sgdisk --zap-all /dev/dm-10
# 再次创建
ceph-volume lvm create --data /dev/dm-10 --bluestore

8. 集群未清理旧硬盘的认证信息导致新建osd使用与旧硬盘相同的id时报错:

Error EINVAL: entity osd.90 exists but key does not match

ceph auth rm osd.90

9. 重建mon节点

9.1 查看仲裁状态

ceph mon stat

9.2 移除MON节点

ceph mon remove node03
# ceph mon add node03 192.168.100.103:6789 用于增加mon节点

9.3 删除MON数据目录

rm -rf /var/lib/ceph/mon/ceph-node03/

9.4 获取并查看集群MON的map和keyring

ceph mon getmap -o /tmp/monmap
ceph auth get mon. -o /tmp/keyring
monmaptool --print /tmp/monmap
cat /tmp/keyring

9.5 通过map和keyring重建MON数据目录

ceph-mon --id node03 --mkfs --monmap /tmp/monmap --keyring /tmp/keyring
chown -R ceph:ceph /var/lib/ceph/mon/ceph-node03/

9.6 重启MON进程

systemctl reset-failed ceph-mon@node03.service
systemctl restart ceph-mon@node03.service
systemctl status ceph-mon@node03.service

9.7 查询节点MON状态

ceph daemon mon.node03 mon_status
posted @ 2022-05-30 13:45  wanghongwei-dev  阅读(427)  评论(0编辑  收藏  举报