分布式存储ceph运维操作
一 统一节点上ceph.conf文件
如果是在admin节点修改的ceph.conf,想推送到所有其他节点,则需要执行下述命令
ceph-deploy --overwrite-conf config push mon01 mon02 mon03 osd01 osd02 osd03
修改完毕配置文件后需要重启服务生效,请看下一小节
二 ceph集群服务管理
@@@!!!下述操作均需要在具体运行服务的那个节点上运行,而不是admin节点!!!@@@
2.1 方式一
在各具体节点执行下行命令,重启节点上的所有ceph守护进程
systemctl restart ceph.target
2.2 方式二
在各具体节点执行下行命令,按类型重启相应的守护进程
# 1、重启 mgr 守护进程
systemctl restart ceph-mgr.target
# 2、重启 mds 守护进程
systemctl restart ceph-mds.target
# 3、重启 rgw 守护进程
systemctl restart ceph-radosgw.target
# 4、重启 mon 守护进程
systemctl restart ceph-mon.target
# 5、重启 osd 守护进程
登录到osd01节点上,该节点上运行有三个osd daemon进程osd.0、osd.l、osd.2
# 5.1 重启所有的osd daemoon
systemctl restart ceph-osd.target
# 5.2 挨个重启
systemctl restart ceph-osd@0
systemctl restart ceph-osd@1
systemctl restart ceph-osd@2
了解:也可以根据进程类型+主机名.service
# 1 mon 守护进程
systemctl { start | stop | restart} ceph-mon@{mon_instance}.service
例
systemctl restart ceph-mon@mon01.service
# 2 mgr 守护进程
systemctl { start | stop | restart} ceph-mgr@{mgr_instance}.service
# 3 osd 守护进程
systemctl { start | stop | restart} ceph-osd@{osd_instance}.service
# 4 rgw 守护进程
systemctl { start | stop | restart} ceph-radosgw@{rgw_instance}.service
# 5 mds 守护进程
systemctl { start | stop | restart} ceph-mds@{mds_instance}.service
三 服务平滑重启
有时候需要更改服务的配置,但不想重启服务,或者是临时修改,此时我们就可以通过admin sockets直接与守护进程交互。如查看和修改守护进程的配置参数。
守护进程的socket文件一般是/var/run/ceph/$cluster-$type.$id.asok
基于admin sockets的操作:
-
方式一:tell子命令
-
方式二:daemon子命令
ceph daemon $type.$id command
-
方式三:通过socket文件
ceph --admin-daemon /var/run/ceph/$cluster-$type.$id.asok command
常用command如下
help
config get parameter
config set parameter
config show
perf dump
3.1 tell子命令
命令使用格式如下,在管理节点执行即可
ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}]
- daemon-type:为要操作的对象类型如osd、mon等。
- daemon id:该对象的名称,osd通常为0、1等,mon为ceph -s显示的名称,这里可以输入*表示全部。
- injectargs:表示参数注入,后面必须跟一个参数,也可以跟多个。
例如
# 在管理节点运行
ceph tell mon.mon01 injectargs --mon_allow_pool_delete=true
ceph tell mon.* injectargs --mon_allow_pool_delete=true
mon_allow_pool_delete此选项的值默认为false,表示不允许删除pool,只有此选项打开后方可删除,记得改回去!!! 这里使用mon.ceph-monitor-1表示只对ceph-monitor-1设置,可以使用*
3.2 daemon子命令
命令格式如下,需要登录到守护进程所在的那台主机上执行
ceph daemon {daemon-type}.{id} config set {name}={value}
例。
ssh root@mon01
ceph daemon mon.mon01 config set mon_allow_pool_delete false
3.3 socket文件
# 1、查看帮助
ceph --admin-daemon /var/run/ceph/ceph-mds.mon01.asok help
# 2、查看配置项
ceph --admin-daemon /var/run/ceph/ceph-mds.mon01.asok config get mon_allow_pool_delete
# 3、设置
ceph --admin-daemon /var/run/ceph/ceph-mds.mon01.asok config set mon_allow_pool_delete true
如果超过半数的monitor节点挂掉,此时通过网络访问ceph的所有操作都会被阻塞,但monitor的本地socket还是可以通信的。
ceph --admin-daemon /var/run/ceph/ceph-mon.mon03.asok quorum_status
四 维护集群常用命令
4.1 查看集群健康状况
# 检查ceph的状态
ceph -s
ceph status
ceph health
ceph health detail
# 实时观察集群健康状态
ceph -w
4.2 检查集群的使用情况
=======================命令1=======================
ceph df # 它和 Linux 上的 df 相似
# GLOBAL段
展示了数据所占用集群存储空间的概要,详解如下
SIZE: 集群的总容量;
AVAIL: 集群的空闲空间总量;
RAW USED: 已用存储空间总量;
% RAW USED: 已用存储空间比率。用此值参照 full ratio 和 near full \ ratio 来确保不会用尽集群空间。 详情见存储容量。
# POOLS 段:
展示了存储池列表及各存储池的大致使用率。没有副本、克隆品和快照占用情况。例如,如果你 把 1MB 的数据存储为对象,理论使用率将是 1MB ,但考虑到副本数、克隆数、和快照数,实际使用率可能是 2MB 或更多。
NAME: 存储池名字;
ID: 存储池唯一标识符;
USED: 大概数据量,单位为 B、KB、MB 或 GB ;
%USED: 各存储池的大概使用率;
Objects: 各存储池内的大概对象数。
=======================命令2=======================
ceph osd df # 可以详细列出集群每块磁盘的使用情况,包括大小、权重、使用多少空间、使用率等等
4.3 mds相关
1、查看mds状态
ceph mds stat
ceph mds dump
2、删除mds节点
ssh root@mon01 systemctl stop ceph-mds.target
ceph mds rm 0 # 删除一个不活跃的mds
# 启动mds后,则恢复正常
3、关闭mds集群
ceph mds cluster_down
4、开启mds集群
ceph mds cluster_up
5、设置cephfs 文件系统存储方式最大单个文件尺寸
ceph mds set max_file_size 1024000000000
6、了解:清除mds文件系统
# 1、强制 mds 状态为 featrue
ceph mds fail 0
# 2、删除 mds 文件系统
ceph fs rm cephfs --yes-i-really-mean-it
# 3、删除数据池
ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
# 4、删除元数据池
ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
# 5、然后再删除 mds key,残留文件等
# 6、最后删除不活跃的mds
ceph mds rm 0
4.4 mon相关
1、查看mon状态
ceph mon stat
2、查看mon映射信息
ceph mon dump
3、检查Ceph monitor仲裁/选举状态
ceph quorum_status --format json-pretty
4、查看mon信息包括ip地址
获得一个正在运行的 mon map,并保存在 1.txt 文件中
ceph mon getmap -o 1.txt
monmaptool --print 1.txt
4.5 auth相关
一:认证与授权
Ceph使用cephx协议对客户端进行身份验证,集群中每一个Monitor节点都可以对客户端进行身份验证,所以不存在单点故障。cephx仅用于Ceph集群中的各组件,而不能用于非Ceph组件。它并不解决数据传输加密问题,但也可以提高访问控制安全性问题。
二:认证授权流程如下
- 1、客户端向Monitor请求创建用户。
- 2、Monitor返回用户共享密钥给客户端,并将此用户信息共享给MDS和OSD。
- 3、客户端使用此共享密钥向Monitor进行认证。
- 4、Monitor返回一个session key给客户端,并且此session key与对应客户端密钥进行加密。此session key过一段时间后就会失效,需要重新请求。
- 5、客户端对此session key进行解密,如果密钥不匹配无法解密,这时候认证失败。
- 6、如果认证成功,客户端向服务器申请访问的令牌。
- 7、服务端返回令牌给客户端。
- 8、这时候客户端就可以拿着令牌访问到MDS和OSD,并进行数据的交互。因为MDS和Monitor之间有共享此用户的信息,所以当客户端拿到令牌后就可以直接访问。
三:相关概念
-
1、用户
用户通常指定个人或某个应用 个人就是指定实际的人,比如管理员 而应用就是指客户端或Ceph集群中的某个组件,通过用户可以控制谁可以如何访问Ceph集群中的哪块数据。 Ceph支持多种类型的用户,个人与某应用都属于client类型。还有mds、osd、mgr一些专用类型。
-
2、用户标识
用户标识由“TYPE.ID”组成,通常ID也代表用户名,如client.admin、osd.1等。
-
3、使能caps
使能表示用户可以行使的能力,通俗点也可以理解为用户所拥有的权限。 对于不同的对象所能使用的权限也不一样,大致如下所示。 Monitor权限有:r、w、x和allow、profile、cap。 OSD权限有:r、w、x、class-read、class-wirte和profile osd。 另外OSD还可以指定单个存储池或者名称空间,如果不指定存储池,默认为整个存储池。 MDS权限有:allow或者留空。 # 关于各权限的意义: allow:对mds表示rw的意思,其它的表示“允许”。 r:读取。 w:写入。 x:同时拥有读取和写入,相当于可以调用类方法,并且可以在monitor上面执行auth操作。 class-read:可以读取类方法,x的子集。 class-wirte:可以调用类方法,x的子集。 *:这个比较特殊,代表指定对象的所有权限。 profile:类似于Linux下sudo,比如profile osd表示授予用户以某个osd身份连接到其它OSD或者Monitor的权限。 profile bootstrap-osd表示授予用户引导OSD的权限,关于此处可查阅更多资料。
四 命令
1、查看 ceph 集群中的认证用户及相关的 key
ceph auth list # 简写:ceph auth ls
2、查看某一用户详细信息