🖖 I’m a system arch|

没有猫的猫奴

园龄:4年7个月粉丝:1关注:3

分布式存储-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 mapand 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,默认 nonenone:从不压缩数据。
passive:除非写操作具有可压缩的提示集,否则不要压缩数据。
aggressive:压缩数据,除非写操作具有不可压缩的提示集。
force:无论如何都尝试压缩数据,即使客户端暗示数据不可压缩也会压缩,也就是在所有情况下都使用压缩

本文作者:没有猫的猫奴

本文链接:https://www.cnblogs.com/cat1/p/16049596.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   没有猫的猫奴  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.