Ceph维护命令

1、osd
OSD全称Object Storage Device,主要是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。使用rbd存储的前提,需要内核支持rbd
[root@ms-adm ~]# modprobe  rbd
[root@ms-adm ~]# lsmod | grep  rbd      //查看内核是否支持rbd,没有就升级内核

2、pool池
pool是ceph存储数据时的逻辑分区,每个pool包含一定数量的PG,PG里的对象被映射到不同的OSD上,因此pool是分布到整个集群的。除了隔离数据,我们也可以分别对不同的POOL设置不同的优化策略,比如副本数、数据清洗次数、数据块及对象大小等。

3、image
它将被条带化为 N 个子数据块,每个数据块将会被以对象(object)形式保存在 RADOS 对象存储中

rbd常用命令

1)、创建一个pool池
[root@ms-adm ~]# ceph osd pool create testpool 256       //256   pg_num,见前面的定义
2)、创建rbd
[root@ms-adm ~]# rbd create testpool/myrbd --size 10240       //10240MB
3)、映射块设备到自己机器
[root@ms-adm ~]# rbd feature disable  testpool/myrbd object-map fast-diff deep-flatten
	//需要禁用,否则挂载不成功
[root@ms-adm ~]# rbd map testpool/myrbd  显示如下
/dev/rbd0
4)、挂载使用
[root@ms-adm ~]# mkdir /mnt/firstrbd 
[root@ms-adm ~]# mkfs.xfs /dev/rbd0
[root@ms-adm ~]# mount /dev/rbd0 /mnt/firstrbd

挂载cephfs文件系统

1、创建ceph子目录
为了别的地方能挂载cephfs,先创建一个secretfile
[root@ms-adm ~]# cat /etc/ceph/ceph.client.admin.keyring | grep key|awk -F " " {print $3}’    \   
> /etc/ceph/admin.secret
挂载cephfs的根目录到集群的mon节点下的一个目录,比如test_data,因为挂载后,我们就可以直接在test_data下面用Linux命令创建子目录了。
[root@ms-adm ~]# mkdir test_data
[root@ms-adm ~]# mount -t ceph 192.168.1.111:6789:/ /root/test_data -o name=admin, secretfile=/etc/ceph/admin.secrete
[root@ms-adm ~]# df -h
192.168.1.11:6789:/ 15G 106M 15G 1% /root/test_data
在cephfs 的根目录里面创建了一个子目录kube,k8s 以后就可以挂载这个目录
[root@ms-adm ~]# cd /root/test_data
[root@ms-adm ~]# mkdir /root/test_data/kube
[root@ms-adm ~]# chmod 0777 /root/test_data/kube

扩容 把目录做成osd,当然也可以是别的硬盘

加入 ms-adm、node-mon下的目录
[root@ms-adm ~]# mkdir /var/local/osd1
[root@ms-adm ~]# chmod 777 /var/local/osd1/
[root@node-mon ~]# mkdir /var/local/osd1
[root@node-mon ~]# chmod 777 /var/local/osd1/

#回到ms-adm,准备osd
[root@ms-adm ~]# cd ceph/
[root@ms-adm ceph]# ceph-deploy osd prepare ms-adm:/var/local/osd1 node-mon:/var/local/osd1

#激活osd
[root@ms-adm ceph]# ceph-deploy osd activate ms-adm:/var/local/osd1 node-mon:/var/local/osd1
[root@ms-adm ceph]# ceph-deploy osd list  ms-adm  node-osd node-mon
一共5个osd  第一批osd.0-2    ,第二批刚刚创建的osd.3-4
[root@ms-adm ceph]# ceph-deploy osd list  ms-adm
//这里查看ms-adm上的osd。
[ms-adm][INFO  ] ceph-0
[ms-adm][INFO  ] ----------------------------------------
[ms-adm][INFO  ] Path           /var/lib/ceph/osd/ceph-0
[ms-adm][INFO  ] ID             0
[ms-adm][INFO  ] Name           osd.0
[ms-adm][INFO  ] Status         up
[ms-adm][INFO  ] Reweight       1.0
[ms-adm][INFO  ] Magic          ceph osd volume v026
[ms-adm][INFO  ] Journal_uuid   1097292f-7941-4aac-9d37-98a15ab3eb47
[ms-adm][INFO  ] Active         ok
[ms-adm][INFO  ] Device         /dev/sdb1     //osd.0  有磁盘,显示了device
[ms-adm][INFO  ] Whoami         0
[ms-adm][INFO  ] Journal path   /dev/sdb2
[ms-adm][INFO  ] ----------------------------------------
[ms-adm][INFO  ] ----------------------------------------
[ms-adm][INFO  ] ceph-3						
[ms-adm][INFO  ] ----------------------------------------
[ms-adm][INFO  ] Path           /var/lib/ceph/osd/ceph-3
[ms-adm][INFO  ] ID             3
[ms-adm][INFO  ] Name           osd.3           //osd.3 是目录,没有设备
[ms-adm][INFO  ] Status         up
[ms-adm][INFO  ] Reweight       1.0
[ms-adm][INFO  ] Active         ok             //激活状态
[ms-adm][INFO  ] Magic          ceph osd volume v026
[ms-adm][INFO  ] Whoami         3
[ms-adm][INFO  ] Journal path   /var/local/osd1/journal
[ms-adm][INFO  ] ----------------------------------------

缩容

以osd.0举例,查看osd.0状态

[root@ms-adm ceph]# ceph-deploy osd list  ms-adm
//这里查看ms-adm上的osd。
[ms-adm][INFO  ] ceph-0
[ms-adm][INFO  ] ----------------------------------------
[ms-adm][INFO  ] Path           /var/lib/ceph/osd/ceph-0
[ms-adm][INFO  ] ID             0
[ms-adm][INFO  ] Name           osd.0
[ms-adm][INFO  ] Status         up            //处于up状态

停掉进程

[root@ms-adm ceph]# systemctl stop ceph-osd@0
[root@ms-adm ceph]# ceph-deploy osd list  ms-adm
[ms-adm][INFO  ] ceph-0
[ms-adm][INFO  ] ----------------------------------------
[ms-adm][INFO  ] Path           /var/lib/ceph/osd/ceph-0
[ms-adm][INFO  ] ID             0
[ms-adm][INFO  ] Name           osd.0
[ms-adm][INFO  ] Status         down           //处于了down状态
[ms-adm][INFO  ] Reweight       1.0

删除osd 删除节点

//停掉进程
[root@node-osd ~]# systemctl stop  ceph-osd@1.service
// 将节点标记成  out  down 状态  告诉mon节点不能再进行服务了。
[root@ms-adm ceph]# ceph osd out 0
marked out osd.0.
[root@ms-adm ceph]# ceph osd down 0
osd.0 is already down.
// 移除节点
[root@ms-adm ceph]# ceph osd crush remove osd.0
removed item id 0 name 'osd.0' from crush map
// 删除节点
[root@ms-adm ceph]# ceph osd rm 0
removed osd.0
//删除节点认证
[root@ms-adm ceph]# ceph  auth del osd.0
updated
[root@ms-adm ceph]# ceph osd tree
ID WEIGHT  TYPE NAME         UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.01659 root default
-2 0.01659     host node-osd
[root@ms-adm ceph]# ceph osd crush rm  cephtest003
[root@ms-adm ceph]# ceph osd tree     //host node-osd已经删除

ceph节点添加

节点 add 192.168.1.14    ,selinux防火墙hosts免密登录时间同步安装基础包ok后
[root@ms-adm ceph]# vim ceph.conf       //这里新加了mon,增加了配置
mon_initial_members = node-osd,add
mon_host = 192.168.1.17,192.168.1.14
[root@ms-adm ceph]# ceph-deploy install add
[root@ms-adm ceph]# ceph-deploy mon create add     //这里加了mon角色
[root@ms-adm ceph]# ceph-deploy admin add
[root@ms-adm ceph]# ceph-deploy --overwrite-conf config push ms-adm node-mon node-osd add
[root@ms-adm ceph]# ceph mon stat
e2: 2 mons at {add=192.168.1.14:6789/0,node-osd=192.168.1.17:6789/0}, 
[root@ms-adm ceph]# ceph-deploy disk list add
add][DEBUG ] /dev/sdb other, unknown
[root@ms-adm ceph]# ceph-deploy osd prepare add:/dev/sdb
[add][WARNIN] command_check_call: Running command: /usr/sbin/mkfs -t xfs -f -i size=2048 -- /dev/sdb1
[root@ms-adm ceph]# ceph-deploy osd activate add:/dev/sdb1
[root@ms-adm ceph]# ceph osd tree
ID WEIGHT  TYPE NAME         UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.03117 root default
-2 0.01659     host node-osd
 0 0.01659         osd.0          up  1.00000          1.00000
-3 0.01459     host add        //新节点上的osd创建成功
 1 0.01459         osd.1          up  1.00000          1.00000

删除节点

[root@node-osd ~]# ls /var/lib/ceph/osd/
ceph-0
[root@node-osd ~]# umount /var/lib/ceph/osd/ceph-0/
移除mon
[root@ms-adm ceph]# ceph mon stat
e1: 1 mons at {node-osd=192.168.1.17:6789/0}, election epoch 3, quorum 0 node-osd
[root@ms-adm ceph]# ceph mon remove node-osd
修改ceph.conf
[root@ms-adm ceph]# cat ceph.conf
[global]
fsid = 9dc4f319-9510-4142-85ca-b92a90d68f85
mon_initial_members = node-osd
mon_host = 192.168.1.17     //删除掉移除的mon
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
推送 修改的ceph.conf到所在节点上
[root@ms-adm ceph]# ceph-deploy --overwrite-conf admin   ms-adm  node-mon 
修改 /etc/ceph 目录权限(所有节点执行)
chown -R cephadmin:cephadmin /etc/ceph
[root@ms-adm ceph]# ceph -s
    cluster 9dc4f319-9510-4142-85ca-b92a90d68f85
     health HEALTH_OK
     monmap e3: 1 mons at {node-osd=192.168.1.17:6789/0}
            election epoch 5, quorum 0 node-osd
     osdmap e18: 2 osds: 2 up, 1 in
            flags sortbitwise,require_jewel_osds
      pgmap v2020: 64 pgs, 1 pools, 0 bytes data, 0 objects
            7024 MB used, 10369 MB / 17394 MB avail
                  64 active+clean
[root@ms-adm ceph]# ceph mon stat
e3: 1 mons at {node-osd=192.168.1.17:6789/0}, election epoch 5, quorum 0 node-osd
[root@ms-adm ceph]# ceph-deploy uninstall add
如有,待删除节点上关闭mgr 服务即可
[root@ms-adm ceph]# ceph -s
[root@node-osd ~]# systemctl status ceph-mgr.target

常见错误排查

1.too many PGs per OSD

[root@ms-adm ceph]# ceph -s
可看到有警告health HEALTH_WARN
                     too many PGs per OSD (320 > max300)
这个警告是因为ceph集群中osd 数量较少,创建了pool,每个pool要占用一些pg ,ceph集群默认每个osd 能有300个pgs,这个默认值是可以调整的,但调整会对集群的性能产生一定影响。如果是测试环境,可以消除这种警告,当然这种警告也可以不用理会。
查询每个osd下最大的pg阈值:
[root@ms-adm ceph]# ceph --show-config | grep mon_pg_warn_max_per_osd
#可以看到每个osd默认有300个pg
mon_pg_warn_max_per_osd = 300
解决方法如下:
在monitor节点上修改ceph配置文件,把osd上的pg数量修改成600 
[root@ms-adm ceph]# vim /etc/ceph/ceph.conf
[global]
...
mon_pg_warn_max_per_osd = 600
上面修改好之后重启monitor服务,在monitor1上操作
[root@ms-adm ceph]# ceph-deploy --overwrite-conf admin   ms-adm  node-mon 
[root@ms-adm ceph]# systemctl restart ceph-mon@mon1
[root@ms-adm ceph]# systemctl restart ceph-mon@mon2
[root@ms-adm ceph]# systemctl restart ceph-mon@mon3
[root@ms-adm ceph]# ceph -s    看到下面的ceph集群状态正常了
    cluster a53e18df-5c06-46bb-b4db-7c44f64a367e
     health HEALTH_OK
2.重启monitor服务报错
[root@ms-adm ceph]# systemctl status ceph-mon@monitor1
报错如下:
start request repeated tooquickly for ceph-mon@monitor1.service
Failed to start Ceph clustermonitor daemon.
解决方法:
在各个节点修改配置文件
[root@ms-adm ceph]# vim /usr/lib/systemd/system/ceph-mon@.service
把StartLimitInterval=30min加上注释
在各个节点执行如下,重新加载配置文件
[root@ms-adm ceph]# systemctl daemon-reload
在monitor1上执行如下,重启,可启动成功
[root@ms-adm ceph]# systemctl restart ceph-mon@mon1
[root@ms-adm ceph]# systemctl restart ceph-mon@mon2
[root@ms-adm ceph]# systemctl restart ceph-mon@mon3
3.全都重新部署
[root@ms-adm ceph]# ceph-deploy purge mon1 mon2 mon3 osd1 osd2
[root@ms-adm ceph]# ceph-deploy purgedata mon1 mon2 mon3 osd1 osd2 ceph-deployforgetkeys
[root@ms-adm ceph]# rm ceph.*