首页 > 其他分享 >3、ceph集群的管理和维护

3、ceph集群的管理和维护

时间:2024-01-21 22:44:44浏览次数:26  
标签:osd ceph 集群 PG node1 维护 root OSD

一、通过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/即可。    

标签:osd,ceph,集群,PG,node1,维护,root,OSD
From: https://www.cnblogs.com/cmxu/p/17978616

相关文章

  • django使用redis集群、连接池、MySQL连接池
    redis的相关设置CACHES={"default":{"BACKEND":"django_redis.cache.RedisCache","LOCATION":["redis://127.0.0.1:6379/1","redis://127.0.0.1:6380/1",#...],"OPTIONS":{"CLIENT_......
  • Seata 2.x 首个版本正式发布,支持 Raft 集群模式
    作者:Seata社区用户登记欢迎已使用用户在此链接登记,便于我们更好的针对业务场景优化:https://github.com/seata/seata/issues/12462.x Roadmap发布概览2.0.0中对大家期待已久的Raft集群模式做了支持,Raft集群模式消除了对第三方注册中心和Seata-Server后端存储的依赖,......
  • 云计算-代码开发流水线及CCE容器集群使用案例
    总结自己在使用华为云商业CI/CD代码流水和CCE容器集群部署案例学无止尽啊新项目构建镜像使用华为codearts代码流水线,详细见官方文档https://support.huaweicloud.com/productdesc-devcloud/devcloud_pdtd_00000.html以部署report-service构建测试镜像为例dockerfile文件前端FRO......
  • k8s之构建Mysql和Wordpress集群
    一、实验目的基于Kubernetes集群实现多负载的WordPress应用。将WordPress数据存储在后端Mysql,Mysql实现主从复制读写分离功能。1、准备Kubernetes集群环境root@k8s-master01:~#kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8s-master01Re......
  • Elasticesearch集群概念
    分布式集群单节点集群我们在包含一个空节点的集群内创建名为users的索引,为了演示目的,我们将分配3个主分片和一份副本(每个主分片拥有一个副本分片)//PUT请求:http://localhost:1001/users//请求体{"settings":{"number_of_shards":3,//创建三个主分片"number_......
  • ES--集群职责划分
     但是真实的集群一定要将集群职责分离:master节点:对CPU要求高,但是内存要求第data节点:对CPU和内存要求都高coordinating节点:对网络带宽、CPU要求高职责分离可以让我们根据不同节点的需求分配不同的硬件去部署。而且避免业务之间的互相干扰。......
  • 笔记重修计划一:斜率优化 dp & cdq 分治维护凸包(施工中)
    施工中,但是目前暂停施工。前言刷cdq分治的时候做到了这题,发现自己不是很懂这个东西,跑回去看自己几个月前写的斜率优化dp笔记,当时认为自己弄得很明白了,但现在看来简直就是皮毛,遂弄明白后写下此文,希望自己之后有更多启发时能继续充实这篇文章。若有不妥之处望指出。如果单调......
  • 阿里云云原生弹性方案:用弹性解决集群资源利用率难题
    作者:赫曦随着上云的认知更加普遍,我们发现除了以往占大部分的互联网类型的客户,一些传统的企业,一些制造类的和工业型企业客户也都开始使用云原生的方式去做IT架构的转型,提高集群资源使用率也成为企业上云的一致共识。大家上云的同时,开始思考有没有云原生的方法能**更好地实现提高......
  • 系统设计-维护篇
    给系统加上眼睛:服务端监控要怎么做?你在搭建监控系统时,所面临的第一个问题就是选择什么样的监控指标,也就是监控什么。延迟、通信量、错误和饱和度。延迟指的是请求的响应时间。比如接口的响应时间、访问数据库和缓存的响应时间。通信量可以理解为吞吐量,也就是单位时间内请求量......
  • galera集群启服务脚本,根据需求可自改
    这么个玩意儿废了我小半天儿,学如逆水行舟啊[root@galera1shell_scripts]#catstartdb.sh##host_list={galera1,galera2,galera3}echo"taskstartat:$(date+%Y-%m-%d_%H:%M:%S)"bootstrap_tmpfile=/tmp/.db_stat.$(date+%Y%m%d%H%M)stop_db(){sshgalera3......