3、ceph集群的管理和维护

一、通过sock文件单机管理(很少用)

root@node1:~# ceph --admin-socket /var/run/ceph/ceph-osd.0.asok status
root@node1:~# ceph --admin-socket /var/run/ceph/ceph-osd.0.asok --help
root@node1:~# ceph --admin-daemon /var/run/ceph/ceph-mon.node1.asok config show
root@node1:~#  ceph --admin-daemon /var/run/ceph/ceph-mon.node1.asok help

二、ceph集群的停止或重启

重启之前,要提前设置ceph集群不要将osd标记为out,避免node节点关闭服务后被踢出出ceph集群。
root@node1:~# ceph osd set noout
root@node1:~# ceph osd unset noout
停止顺序:
关闭服务前设置noout
关闭存储客户端停止读写数据
如果使用了RGW,关闭RGW
关闭cephfs元数据服务
关闭ceph OSD
关闭ceph manager
关闭ceph monitor
启动顺序:
启动ceph monitor
启动ceph manager
启动ceph OSD
启动cephfs MDS
启动RGW
启动存储客户端
启动服务后取消noout

三、添加osd

同部署时添加osd
root@node3:~# ceph-volume lvm create --data /dev/nvme0n2
root@node3:~# systemctl status ceph-osd@3

四、下线osd服务器

#把osd踢出集群
root@node1:~# ceph osd out 2  #剔除2这个osd
root@node1:~# ceph osd in 2 
# 等待一段时间后
停止osd.2这个进程
root@node3:~# systemctl stop ceph-osd@2
# 删除osd
root@node1:~# ceph osd rm 2
## 把进程启动起来后自动加入
# 剔除需下线主机的其他osd
# 下线主机

五、存储池、PG与CRUSH

副本池:relicated,定义每个对象在集群中保存为多少个副本,默认为三个副本,一主两备,实现高可用,副本池是ceph默认的存储池类型。
纠删码池:用的不多。
 
副本池IO
将一个数据对象存储为多个副本。
在客户端写入操作时,ceph使用crush算法计算出与对象响应的PG id和primary OSD,主osd根据设置的副本数、对象名称、存储池名称和集群运行图计算出PG的各辅助OSD,然后由主OSD将数据同步给辅助OSD。
读取数据:1、客户端发送读请求,RADOS将请求发送到主OSD;2、主OSD从本地磁盘读取数据并返回数据,最终完成读请求。
写入数据:1、客户端请求写入数据,RADOS发送数据到主OSD;2、主OSD识别副本OSDs,并发送数据到各副本OSD;3、副本OSDs写入数据,并发送写入完成信号成主OSD;4、主OSD发送写入完成信号给客户端。
 
PG和PGP
PG(Placement Group):归置组。PG的数量是2的N次方的倍数,官方建议每个OSD的PG不要超过250个,建议100个。把数据拆分到多少份,比如5G数据,两个pg,则每个pg 2.5G数据,存3副本,当该pg对应的osd之一挂了,副本同步就需要同步2.5G数据。
单个PG的计算,假如集群共100个osd,3副本,20个pool,则每个pool的PG=100*100/3/20。
PGP(Placement Group for placement purpose):归置组的组合,pgp相当于pg对应osd的一种排列组合关系。官方建议,pg和pgp数量一致。
 
相对于存储池pool来说,PG是虚拟的,它是对象映射到存储池时使用的虚拟层。可以自定义存储池中的归置组数量.
ceph 出于规模伸缩及性能方面的考虑,ceph将存储池细分为多个归置组,把海个单独的对象映射到归置组,并为归置组分配一个主OSD。存储池由一系列的归置组组成,而CRUSH算法则根据集群运行图和集群状态,将个PG均匀、伪随机(基于hash 映射每次的计算结果够样的分布到集群中的OSD之上。
如果某个OSD失败或需要对集群进行重新平衡,ceph则移动或复制整个归置组而不需要单独对每个镜像进行寻址。
 
PG的常见状态:Peering,Activating,Clean,Active,Degraded,Stale过期状态,undersized等等
依据PG当前的工作特性或工作进程所处的阶段,它总是处于某个或某些个状态中,最为常见的状态应该为:“active+clean”,还有一个Peering状态;
Active:主OSD和各辅助OSD均处于就绪状态,可正常服务于客户端的IO请求;一般,Peering 操作过程完成后即会转入Active 状态;
Clean:主OSD和各辅助OSD均处于就绪状态,所有对象的副本数均符合期望,并且PG的活动集和上行集是为同一组OSD; 活动集(Acting Set):由PG当前的主OSD和所有的处于活动状态的辅助OSD组成,这组OSD负责执行此PG上数据对象的存取操作IO;上行集(UP Set):根据CRUSH的工作方式,集群拓扑架构的变动将可能导致PG相应的OSD变动或扩展至其它的OSD之上,这个新的OSD集也称为PG的上行集,其映射到新的OSD集可能部分与原有OSD集重合,也可能会完全不相干;上行集OSD需要从当前的活动集OSD上复制数据对象,在所有对象同步完成后,上行集便成为新的活动集,而PG也将转为Active状态;
Peering:一个PG中的所有OSD必须就它们持有的数据对象状态达成一致,而对等(Peering)即为让其OSD从不一致转为一致的过程,数据复制的中间过程,即对等状态;
Degraded:降级状态,在某OSD标记为down时,所有映射到些OSD的PG即转入降级状态,在此OSD重新启动并完成Peering操作后,PG将重新转回Clean状态,一旦OSD标记为Down状态时间超过5分钟,它将被标记出集群,而后Ceph将对降级状态的PG启动恢复操作,直到所有因此而降级的PG重回clean状态;在其内部OSD上某对象不可用或悄然崩溃时,PG也会被标记为降级状态,直到对象从某个权威副本上正确恢复;
Stale:每个主OSD都要周期性的向RADOS集群中的监视器报告其作为主OSD所持有的所有PG的最新统计数据,因任何原因导致某个主OSD无法正常向监视器发送此类报告,或者由其它OSD 报告某个OSD已经down掉,则所有以此OSD为主OSD的PG将立即被标记为state状态;处于此状态的话,会重新选举主OSD;
Undersized:PG中的副本数少于其存储池定义的个数时,即转入Undersized状态,恢复和回填操作在随后会启动以修复其副本数为期望值;
Scrubbing 状态:各OSD还需要周期性地检查其所持有的数据对象的完整性,以确保所有对等OSD上的数据一致,处于此类检查过程中的PG便会被标记为Scrubbing状态,这也通常被称为light scrubs(经量一直性检测)、shallow scrubs或者 simply scrubs;另外,PG还偶尔需要进行deep scrubs(深度一直性检测,按位进行匹配)检查以确保同一对象在相关的各OSD上能按位匹配,此时PG将处于Scrubbing+deep状态;
Recovering:添加一个新的OSD至存储集群中或者OSD宕掉时,PG则有可能会被CRUSH重新映射,进而将持有与此不同的OSD集,而这些处于内部数据同步过程中的PG则被标记为Recovering状态;
Backfilling 状态:新OSD加入存储集群后,Ceph则会进入数据重新均衡的状态,即一些数据对象会在进程后台从现有OSD移动到新的OSD之上,此操作过程即为backfill状态,回填操作;

六、ceph存储池操作

创建查看pool
root@node1:~# ceph osd pool create mypool
root@node1:~# ceph osd lspools
root@node1:~# ceph osd pool ls
root@node1:~# ceph osd pool ls detail
root@node1:~# ceph df
删除pool
root@node1:~# ceph osd pool get  mypool nodelete  #存储池默认配置为可以删除
nodelete: false
mon默认是不允许删除pool的,如需删除,需修改配置,删完一定记得配置改回去。
root@node1:/var/log/ceph# vim /etc/ceph/ceph.conf  
[mon]
mon allow pool delete = true
#重启ceph-mon
root@node1:~# systemctl restart ceph-mon@node1 
或
root@node1:~# ceph tell mon.node1 injectargs --mon_allow_pool_delete=true
{}
mon_allow_pool_delete = 'true'
root@node1:/var/log/ceph# ceph osd pool rm myrbd myrbd --yes-i-really-really-mean-it
pool 'myrbd' removed
存储池配额,默认不限制
root@node1:~# ceph osd pool get-quota mypool
quotas for pool 'mypool':
  max objects: N/A
  max bytes  : N/A
root@node1:~# ceph osd pool set-quota mypool max_bytes 10485760
存储池可用参数
root@node1:~# ceph osd pool -h
root@node1:~# ceph osd pool get mypool size  #副本数
root@node1:~# ceph osd pool set  mypool size   4 #副本数
root@node1:~# ceph osd pool get mypool min_size #提供服务所需要的最小副本数
root@node1:~# ceph osd pool get mypool pg_num
root@node1:~# ceph osd pool get mypool noscrub
noscrub: false
noscrub和nodeep-scrub:控制是否不进行轻量扫描或是否深层扫描存储池

七、Cephx认证机制

Ceph使用cephx协议对客户端进行身份认证
cephx用于对ceph保存的数据进行认证访问和授权,用于对访问ceph的请求进行认证和授权检测,与mon通信的请求都要经过ceph认证通过,但是也可以在mon节点关闭cephx认证,但是关闭认证之后任何访问都将被允许,因此无法保证数据的安全性。
授权流程:
每个mon 节点都可以对客户端进行身份认证并分发秘钥、因此多个mon节点就不存在单点故障和认证性能瓶颈。
mon节点会返回用于身份认证的数据结构,其中包含获取ceph服务时用到的session key,session key通过客户端秘钥进行加密,秘钥是在客户端提前配置好的
/etc/ceph/ceph.client.admin.keyring
客户端使用session key向mon请求所需要的服务,mon向客户端提供一个ticket,用于向实际处理数据的OSD等服务验证客户端身份,MON和OSD共享同一个secret,因此OSD会信任所有MON发放的ticket。
ticket存在有效期。
注意:Cephx身份验证功能仅限制在ceph的各组件之间,不能扩展到其他非ceph组件。ceph只负责认证授权,不能解决数据传输的加密问题。
ceph用户管理
通常点号来分割用户类型和用户名,格式为TYPE.ID,可管理的用户都是client类型。
ceph基于使能/能力(Capabilities, 简称caps)来描述用户可针对MON/OSD或MDS使用的授权范围或级别,通用的语法格式:daemon-type 'allow caps']
r:向用户授予读取权限,访问监视器(mon)以检索CRUSH运行图时需具有此能力。
w:向用户授予对象的写入权限。
x:授予用户调用类法(包括读取和写入)的能力以及在监视器中执行auth操作的能力。
*:用户对特定守护进程/存储池的读取、写入和执行权限,以执行管理命令的能力。
root@node1:~# ceph auth list    
root@node1:~# ceph auth get client.admin
root@node1:~# ceph auth --help
root@node1:~# ceph auth add client.test01 mon 'allow r' osd 'allow rwx pool=mypool'     
root@node1:~# ceph auth get client.test01
root@node1:~# ceph auth get-or-create client.test01 mon 'allow r' osd 'allow rwx pool=mypool'
root@node1:~# ceph auth print_key client.test01
root@node1:~# ceph auth caps client.test01 mon 'allow rx' osd 'allow rwx pool=mypool' #修改权限
root@node1:~# ceph auth rm client.test01
秘钥环管理
#导出用户认证信息到keyring文件
root@node1:~# ceph auth get client.test01 -o /etc/ceph/ceph.client.test01.keyring
#从keyring文件恢复用户认证信息
root@node1:~# ceph auth import -i /etc/ceph/ceph.client.test01.keyring

八、rbd使用

rbd镜像回收站机制
rbd镜像删除无法恢复,但可以先移动到回收站,后期再从回收站删除镜像。
root@node1:~# rbd status --pool myrbd disk01
root@node3:~# rbd --pool myrbd unmap disk01
root@node1:~# rbd help trash
root@node1:~# rbd trash move --pool myrbd disk01
root@node1:~# rbd trash ls --pool myrbd
root@node1:~# rbd trash restore --pool myrbd 1e7254a5b2505
root@node1:~# rbd ls myrbd
rbd镜像快照
root@node1:~# rbd help snap create
root@node1:~# rbd snap list --pool myrbd disk01
root@node1:~# rbd help snap rollback

九、cephfs mds的高可用

支持多个主mds同时工作,即不同的主mds负责不同的元数据;同时支持主拥有备服务器,即主挂后备服接管主继续提供服务,如果没有备服务器,则会在剩余的主服务器间重新分配管理的元数据。
Ceph mds(etadata service)作为ceph的访问入口,需要实现高性能及数据备份,假设启动4个MDS进程,设置2个Rank,这时候有2个MDS进程会分配给两个Rank,还剩2个MDS进程分别作为另外两个的备份。
root@node1:~# ceph mds stat
root@node1:~# ceph fs status
root@node1:~# ceph auth get-or-create mds.node3 osd "allow rwx" mds "allow" mon "allow profile mds"
root@node1:~# ceph auth get mds.node3 -o /etc/ceph/ceph.mds.node3.keyring
root@node1:~# scp /etc/ceph/ceph.mds.node3.keyring  node3:/var/lib/ceph/mds/ceph-node3/keyring
root@node3:~# apt install -y ceph-mds
root@node3:~# systemctl start ceph-mds@node3
root@node3:~# systemctl enable ceph-mds@node3
root@node3:~# systemctl status ceph-mds@node3
root@node1:~# ceph fs set cephfs max_mds 2  #cephfs为name,设置处于激活状态的mds数量
root@node1:~# ceph fs status cephfs  
设置每个Rank的备份MDS,也就是如果此Rank当前的MDS出现同题马上切换到另一个MDS。设置备份的方法有很多,常用选项如下:
mds_standby_replay:值为true或false, true表示开启replay模式,这种模式下主MDS内的数量将实时与从MDS同步,如果主宕机, 从可以快速的切换。如果为 false,只有宕机的时候才去同步数据,这样会有一段时间的中断。
mds standby_ for name:设置当前MDS进程只用于备份于指定名称的MDS。
mds_standby_for_rank: 设置当前MDS进程只用于备份于哪个Rank, 通常为Rank编号。另外在存在多个CephFS文件系统中,还可以使用mds standby for_fscid参数来为指定不同的文件系统。
mds_ standby_for_fscid:指定 CephFS文件系统ID.需要联合mds standby_for_rank生效,如果设置mds standby for _rank.那么就是用于指定文件系统的指定Rank,如果没有设置,就是指定文件系统的所有Rank。

十、对象存储网关RadosGw

启动RGW
做好RGW的高可用:再部署一个rgw,然后使用负载均衡器等实现高可用。
创建bucket
创建用户并授权
监控
root@node1:~# radosgw-admin zone get --rgw-zone=default #查看zone
配置文件修改:
root@node1:~# vim /etc/ceph/ceph.conf
[client.rgw.node1]  #指定节点
host = node1
rgw frontends = "beast port=80"  
rgw dns name = node1
对象存储可用测试工具:s3cmd

十一、ceph监控

通过prometheus 监控ceph 服务:
Ceph manager内部的模块中包含了 prometheus 的监控模块并监听在每个manager节点的9283端口,该端口用于将采集到的信息通过http接口prometheus提供数据。
https://docs.ceph.com/en/mimic/mgr/prometheus
启用prometheus监控模块:
root@node1:~# ceph mgr module enable prometheus
root@node1:~# ceph mgr module ls | grep prometheus
root@node1:~# ss -autpl | grep 9283
在Prometheus配置中添加采集的配置http://192.168.42.140:9283/即可。
 
 
posted @ 2024-01-21 22:41  _幸会  阅读(327)  评论(0编辑  收藏  举报