分布式存储-ceph01
一、ceph 分布式存储系统简介、版本及组件功能简介
1.1 分布式存储简介
块存储:主要使用在有状态集群服务,比如mysql,zk,eleaticsearch,kafka,每个块都会单独被一个服务是用,不会共享给别的服务,需要在服务器挂载
文件存储:用于实现前后端数据共享的web业务,比如nginx+java,java负责写入用户的数据到文件存储,然后由nginx读取数据再返回给客户端,文件存储可以被多个节点同时挂载使用,需要在服务器挂载。ceph协议,NFS
对象存储:适合数据不会频繁变更的场景,比如短视频,下载业务,不需要挂载
1.2 ceph集群角色定义
ceph-mon:
在一个主机上运行的一个守护进程,用于维护集群状态映射,比如ceph集群中有多少存储池,每个存储池有多少个PG以及存储池和PG的映射关系等,monitor map,manager map,the OSD map,the MDS map,and the CRUSH map,这些映射是ceph守护程序相互协调所需的关键集群状态,此外监视器还负责管理守护程序和客户端之间的身份验证。通常至少需要三个监视器才能实现冗余和高可用性。
ceph-mgr:
在一个主机上运行一个守护进程,ceph manager守护程序(ceph-mgr)负责跟踪运行时指标和ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。ceph manager守护程序还托管基于python的模块来管理和公开ceph集群信息,包括基于web的ceph仪表板和rest api。高可用性通常至少需要两个管理器。
ceph osds(对象存储守护程序ceph-osd):
提供存储数据,操作系统上的一个磁盘就是一个osd守护程序,osd用于处理ceph集群数据复制,恢复,重新平衡,并通过检查其他ceph osd守护程序的心跳来向ceph监视器和管理器提供一些监视信息。通常需要3个ceph osd才能实现冗余和高可用性。
MDS(ceph原数据服务器ceph-mds):
代表ceph文件系统(NFS/CIFS)存储元数据,(即ceph块设备和ceph对象存储不适用MDS)
ceph的管理节点:
(1)ceph的常用管理接口是一组命令行工具程序,例如redos,ceph,rbd等命令,ceph管理员可以从某个特定的ceph-mon节点执行管理操作。
(2)推荐使用部署专用的管理节点对ceph进行配置管理,升级与后期维护,方便后期权限管理,管理节点的权限只对管理人员开放,可以避免一些不必要的误操作的发生。
pool:存储池、分区、存储池的大小取决于底层的存储空间。
PG:一个pool内部可以有多个PG存在,pool和PG都是抽象的逻辑概念,一个pool中有多少个PG可以通过公示计算。
osd:一块磁盘就是一个osd。
二、ceph 数据访问流程及crush简介(面试必问题)
第一步:计算文件到对象的映射:
计算文件到对象的映射,假如file为客户端要读些的文件,得到oid(object id)=ino+ono(相加)
ino:inode number(INO),file的元数据序列号,file的唯一id。
ono:object number(ONO),file切分产生的某个object的序号,默认以4M切分一个块大小。
第二步:通过hash算法计算出文件对应的pool中的PG
通过一致性hash得到object的hash值,然后基于&(与运算)计算出object到存储池中pg的对应关系
流程:hash(oid) & mask ->pgid=object到PG的映射关系
mask的值=PG总数m-1
第三步:通过crush算法计算出pg到osd
第四步:PG中的主osd将对象写入到硬盘
第五步:主osd将数据同步给备osd,并等待备osd返回确认信息
第六步:主osd将写入完成返回给客户端
ceph元数据保存:
目前使用omap(rocksdb)加bluestore存储对象信息的元数据信息
三、ceph 环境初始化,部署mon节点及mgr节点
1.准备三台虚拟机,生产环境建议使用单独服务器部署ceph-deploy、ceph-mon(3台及以上)、ceph-mgr(2台及以上)、多个node节点
ip | 主机名 | 系统 |
---|---|---|
192.168.1.191 | 192-168-1-191-ceph01 | cenots7.6 |
192.168.1.192 | 192-168-1-191-ceph02 | cenots7.6 |
192.168.1.193 | 192-168-1-191-ceph03 | cenots7.6 |
2.基础环境准备(本次实验使用的是ceph14.2.22)
三台服务器都需要执行:
sudo rpm --import 'https://mirrors.aliyun.com/ceph/keys/release.asc'
yum install -y http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
yum install epel-release -y
sudo sed -e 's!^metalink=!#metalink=!g' \
-e 's!^#baseurl=!baseurl=!g' \
-e 's!//download\.fedoraproject\.org/pub!//mirrors.aliyun.com!g' \
-e 's!//download\.example/pub!//mirrors.aliyun.com!g' \
-e 's!http://mirrors!https://mirrors!g' \
-i /etc/yum.repos.d/epel*.repo
sudo yum makecache fast
groupadd cephadmin -g 2088 && useradd -u 2088 -g 2088 cephadmin && echo "123456" | passwd --stdin cephadmin
echo "cephadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
sudo yum install -y ntp
sudo ntpdate asia.pool.ntp.org
3.部署ceph-deploy
ceph01执行:
免密略
配置主机域名解析略
安装ceph-deploy:
sudo yum install ceph-deploy python-setuptools python2-subprocess3
mkdir ceph-cluster
cd ceph-cluster
ceph-deploy new --cluster-network 192.168.1.0/24 --public-network 192.168.1.0/24 ceph01
4.初始化node节点:
sudo ceph-deploy install --no-adjust-repos --nogpgcheck ceph01
sudo ceph-deploy install --no-adjust-repos --nogpgcheck ceph02
sudo ceph-deploy install --no-adjust-repos --nogpgcheck ceph03
5.配置mon节点并且生成密钥:
yum install -y ceph-mon(mon是单独节点需要执行)
sudo ceph-deploy mon create-initial
分发密钥:
sudo ceph-deploy admin ceph01 ceph02 ceph03
sudo setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring(每个节点都需要执行)
6.部署mgr节点
sudo ceph-deploy mgr create ceph01
ceph config set mon auth_allow_insecure_global_id_reclaim false
7.准备osd节点
擦除磁盘之前通过 deploy 节点对 node 节点执行安装 ceph 基本运行环境:
sudo ceph-deploy install --release nautilus ceph01
sudo ceph-deploy install --release nautilus ceph02
sudo ceph-deploy install --release nautilus ceph03
列出节点磁盘:
sudo ceph-deploy disk list ceph01
擦除磁盘:
sudo ceph-deploy disk zap ceph01 /dev/sdb
sudo ceph-deploy disk zap ceph01 /dev/sdc
sudo ceph-deploy disk zap ceph01 /dev/sdd
sudo ceph-deploy disk zap ceph02 /dev/sdb
sudo ceph-deploy disk zap ceph02 /dev/sdc
sudo ceph-deploy disk zap ceph02 /dev/sdd
sudo ceph-deploy disk zap ceph03 /dev/sdb
sudo ceph-deploy disk zap ceph03 /dev/sdc
sudo ceph-deploy disk zap ceph03 /dev/sdd
添加osd:
sudo ceph-deploy osd create ceph01 --data /dev/sdb
sudo ceph-deploy osd create ceph01 --data /dev/sdc
sudo ceph-deploy osd create ceph01 --data /dev/sdd
sudo ceph-deploy osd create ceph02 --data /dev/sdb
sudo ceph-deploy osd create ceph02 --data /dev/sdc
sudo ceph-deploy osd create ceph02 --data /dev/sdd
sudo ceph-deploy osd create ceph03 --data /dev/sdb
sudo ceph-deploy osd create ceph03 --data /dev/sdc
sudo ceph-deploy osd create ceph03 --data /dev/sdd
设置osd服务开机自启动:
ceph01:
sudo systemctl enable ceph-osd@0
sudo systemctl enable ceph-osd@1
sudo systemctl enable ceph-osd@2
ceph02:
sudo systemctl enable ceph-osd@3
sudo systemctl enable ceph-osd@4
sudo systemctl enable ceph-osd@5
ceph03:
sudo systemctl enable ceph-osd@6
sudo systemctl enable ceph-osd@7
sudo systemctl enable ceph-osd@8
从radis移除osd
(1)停用设备:ceph osd out ceph-osd@0
(2)停止进程:sudo systemctl stop ceph-osd@0 && sudo systemctl disable ceph-osd@0
(3)移除osd:ceph osd purge ceph-osd@0 --yes-i-really-mean-it
四、ceph 存储集群添加node节点
创建存储池:ceph osd pool create mypool 32 32
扩展ceph-mon节点: ceph-deploy mon add ceph02 ceph03
扩展ceph-mgr节点:ceph-deploy mgr create ceph02
验证 PG 与 PGP 组合:ceph pg ls-by-pool mypool | awk '{print $1,$2,$15}'
五、ceph 块存储和对象存储简单使用
1.块存储
创建存储池:ceph osd pool create myrbd1 32 32
对存储池启用rbd功能:ceph osd pool application enable myrbd1 rbd
对存储池进行初始化:rbd pool init -p myrbd1
创建image:
rbd create myimg1 --size 5G --pool myrbd1
rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering(centos使用)
列出指定的 pool 中所有的 image:
rbd ls --pool myrbd1
查看rbd信息:
rbd --image myimg2 --pool myrbd1 info
客户端挂载准备:
yum install epel-release -y
yum install -y http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
yum install -y ceph-common
客户端映射image:
rbd -p myrbd1 map myimg2
客户端挂载:
和普通盘一样格式化挂载即可
2.对象存储
需要安装ceph-redosgw(2个以上)
yum install ceph-radosgw
sudo ceph-deploy --overwrite-conf rgw create ceph01
安装完成会有port:http://192.168.1.191:7480/
六、cephfs简介和MDS服务部署
部署ceph-mds:
sudo ceph-deploy mds create ceph02
创建metadata和data存储池:
ceph osd pool create cephfs-metadata 32 32
ceph osd pool create cephfs-data 64 64
创建cephfs:
ceph fs new mycephfs cephfs-metadata cephfs-data
验证:
ceph fs status mycephfs
验证cephfs状态:
ceph mds stat
客户端挂载:
同步conf文件,和块存储一样
mount -t ceph 192.168.1.191:6789:/ /ceph-mds -o name=admin,secret=AQAkekRiKxk8IhAAn3w1QdH/c2j+ogIo9PrQrQ==
七、ceph 集群管理与维护
重启之前先设置ceph集群不要将osd标记为out,避免node节点关闭服务后提出ceph集群
ceph osd set noout
启动后取消noout
ceph osd unset noout
ceph集群关闭顺序:
先设置noout
关闭存储客户端停止写数据
关闭RGW
关闭mds
关闭osd
关闭mgr
关闭mon
ceph集群启动顺序:
启动mon
启动mgr
启动osd
启动mds
启动rgw
启动存储客户端
ceph osd unset noout
添加服务器
1.添加yum仓库
2.sudo ceph-deploy install --release nautilus ceph01
3.sudo ceph-deploy disk zap ceph01 /dev/sdb
4.sudo ceph-deploy osd create ceph01 --data /dev/sdb
删除服务器
1.把osd踢出集群:ceph osd out 1
2.等一段时间
3.停止osd.X进程
4.删除osd:ceph osd rm 1
5.当前node重复1-4
6.osd全部踢出后下线主机
八、ceph存储池介绍及管理、pg与pgp常见状态
ceph存储池分为副本池和纠删码池{replicated|erasure},创建存储池默认为副本池,生产环境不建议使用纠删码池
删除存储池:
ceph osd pool set mypoll nodelete false
ceph tell mon.* injectargs --mon-allow-pool-delete=true#集群默认参数,删除完成后需要改回false
ceph osd pool rm mypoll mypoll --yes-i-really-really-mean-it
存储池配额:
ceph osd pool get-quota mypool
ceph osd pool set-quota mypool max_objects 1000 #限制最大 1000 个对象
ceph osd pool set-quota mypool max_bytes 10737418240 #限制最大 10737418240 字节
存储池可用参数: ceph osd pool get --help/ceph osd pool set --help
查看副本数:ceph osd pool get mypool size
查看存储池最小副本数:ceph osd pool get mypool min_size
查看pg,pg数量:ceph osd pool get mypool pg_num /ceph osd pool get mypool pgp_num
查看crush算法规则:ceph osd pool get mypool crush_rule
pg的状态:
peering:
正在同步状态,同一个PG中的osd需要将准备数据同步一致,而peering就是osd同步过程中的状态
activating:
peering已经完成,PG正在等待所有PG实例同步peering的结果
celan:
干净态,pg当前不存在待修复的对象,并且大小等于存储池的副本数,即PG的活动集(acting set)和上行集(up set)为同一组osd且内容一致。
活动集(acting set):由PG当前主的osd和其余处于活动状态的备用osd组成,当前PG内的osd负责处理用户的读写请求。
上行集(up set):在某一个osd故障时,需要将故障的osd更换为可用的osd,并主pg内部的主osd同步数据到新的osd上。
active:
就绪状态或活跃状态,active表示主osd和备osd处于正常工作状态,此时的pg可以正常处理来自客户端的读写请求,正常的pg默认就是active+clean状态。
degraded:
降级状态出现于osd被标记为down以后,那么其他映射到此osd中的pg都会转换到降级状态。
如果此osd还能重新启动完成并且完成peering状态,那么此osd中的pg将会恢复为clean状态
如果此osd被标记为down的时间超过5分钟还没有恢复,那么此osd将被踢出ceph集群,然后此ceph会对被降级的pg启动恢复操作,直到所有由此osd而被降级的pg重新恢复为clean状态。
恢复数据会从pg内的主osd恢复,如果是主osd故障,那么会在剩下的两个备用osd重新选择一个作为主osd
stale:过期状态
正常情况下,每个主osd都要周期性的向RADOS集群中的监视器(mon)报告其作为主osd所持有的所有pg的最新统计数据,因任何原因导致某个osd无法正常向监视器发送汇报信息的,或者由其他osd报告某个osd已经是down的时候,则所有以此osd为主pg则会立即被标记为stale状态,即他们的主osd已经不是最新的数据了,如果是备份osd发送down的时候,则ceph会执行修复而不会出发pg状态转为stale
scrubbing:
scrub是ceph对数据的清洗状态,用来保证数据完整性的机制,ceph的osd定期启动scrub线程来扫描部分对象,通过与其他副本比对来发现是否一致,如果存在不一致,抛出异常提示用户手动解决,scrub以pg为单位,对于每一个pg,ceph分析该pg下所有的object,产生一个类似于元数据信息摘要的数据结构,如对象大小,属性等,叫scrubmap,比较主与副scrubmap,来保证是不是有object丢失或者不匹配,扫描分为轻量扫描和深度扫描。
轻量扫描比较object size和属性,深度扫描读取数据部分并通过checksum对比数据的一致性,深度扫描是pg的状态为scrubbing+deep的状态。
recovering:
正在恢复状态
backfiling:
正在后台填充状态,backfill是recovery的一种特殊场景,值peering完成后,如果基于当前权威日志无法对up set当中的某些pg实例实施增量同步(例如承载这些PG实例的osd离线太久,或者是新的psd加入集群导致的pg实例整体迁移)则通过完全拷贝当前primary所有对象的方式进行全量同步,此过程中的pg会处于backfiling。
backfill-toofull:
某个需要被backfill的pg实例,其所在的osd空间不足,backfill流程当前被刮起时pg的状态。
九、ceph 存储池快照及压缩
创建存储池快照:ceph osd pool mksnap mypool mypool-snap/rados -p mypool mksnap mypool-snap2
查看快照:rados lssnap -p mypool
验证回滚:
rados put -p mypool testfile /etc/hosts
rados -p mypool mksnap mypool-test
rados -p mypool ls
rados -p mypool rm testfile
rados -p mypool rollback testfile mypool-test
删除快照:
rados -p mypool rmsnap mypool-test
ceph支持边写边压缩模式,默认不开启压缩
启用压缩并指定压缩算法:
ceph osd pool set <pool name> compression_algorithm snappy #默认算法为 snapp
snappy:该配置为指定压缩使用的算法默认为 sanppy,还有 none、zlib、lz4、zstd 和 snappy等算法,zstd 压缩比好,但消耗 CPU,lz4 和 snappy 对 CPU 占用较低,不建议使用 zlib。
指定压缩模式:
ceph osd pool set <pool name> compression_mode aggressive
aggressive:压缩的模式,有 none、aggressive、passive 和 force,默认 none。
none:从不压缩数据。
passive:除非写操作具有可压缩的提示集,否则不要压缩数据。
aggressive:压缩数据,除非写操作具有不可压缩的提示集。
force:无论如何都尝试压缩数据,即使客户端暗示数据不可压缩也会压缩,也就是在所有情况下都使用压缩
本文作者:没有猫的猫奴
本文链接:https://www.cnblogs.com/cat1/p/16049596.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步