一、服务管理
(1)Sysinit(Centos)
命令格式:/etc/init.d/ceph [options] [command] [daemons]
示例:
/etc/init.d/ceph start mon #启动mon
/etc/init.d/ceph start osd.0 #启动osd.0
/etc/init.d/ceph stop #关闭所有ceph组件
service ceph [command] [daemons]
示例:
service ceph stop mon
service ceph stop osd.0
service ceph stop
(2)sysinit (Ubuntu)
命令格式:[command] ceph-[component] id=[daemons]
示例:
start ceph-mon id=ubuntu-ceph-06
start mon #启动mon
start ceph-osd id=0 #启动osd.0
stop ceph-osd id=0
status ceph-osd id=0
(3)扩容
scale up 向上扩展(相当于摩天大楼)
scale out 向外扩展(相当于四合院)
查看节点硬盘储备
ceph-deploy disk list [hostname]
示例:
ceph-deploy disk list Ubuntu-ceph-07
使用ceph-deploy工具添加osd
ceph-deploy osd create [hostname]:[disk]:[journal]
对于添加的硬盘若有分区表需要清空
ceph-deploy disk zap [hostname]:[disk]
可以直接在Create里指定 --zap-disk
create可以拆分成prepare、active两部分执行
日志大小
osd journal size = 5120 #默认大小5GB
(4)添加mon节点
在管理节点的配置目录下,使用ceph-deploy工具添加新的mon节点
更新配置文件,添加新的mon的信息
推送新的配置文件到所有节点,或者在添加时覆盖(ceph-deploy会提示)
使用ceph-deploy工具添加MON新节点
ceph-deploy mon create ubuntu-ceph-08
(5)删除osd
ceph-deploy相当不支持一键删除OSD
手动删除OSD
停止OSD的相关进程,删除OSD有关的目录
stop ceph-osd id=x
从crush map移除osd的信息(此时会进行rebuiding)
ceph osd out osd.x
ceph osd crush remove osd.x
删除OSD的认证信息
cephauth del osd.x
删除OSD
ceph osd rm x
(6)升级集群
原则:先中心再两边
升级MON:
apt-get update ceph -y
restart ceph-mon id=x
升级OSD
apt-get update ceph -y
restart ceph-osd id=x
二、CRUSH
(1)ceph数据读写流程
(2)CRUSH map在哪
(3)什么是CRUSH
Controlled Replication Under Scalable Hashing(CRUSH)
CRUSH主要由“Device、Bucket Type、Bucket Instance、Rule”这四部分组成
Device:devices由任意对象存储设备组成。每个OSD对应一个Device
Bucket Type:定义了CRUSH的分级结构的bucket类型。Bucket由逐级汇聚的存储位置(如row、host、room等等)及其权重组成。
Bucket Instance:定义了桶类型后,还必须声明主机的桶类型、以及规划的其它故障域
Rule:PG选择bucket的规则
CRUSH-multi_tree
(4)定位OSD
ceph-crush-location [--cluster <cluster>] --id <id> --type <osd|mds|client>
示例:
ceph-crush-location --id 2 --type osd
(5)获取crush map命令如下:
ceph osd getcrushmap -o {compiled-crushmap-filename}
取得的map是个二进制文件,不能直接使用文本工具阅读,需要进行反编译,命令如下:
crushtool -d {compiled-crushmap-filename} -o {decompiled-crushmap-filename}
取得可编辑map之后,可以根据需求,设计相应的crush结构,来实现数据分落。编辑后首先进行编译成二jin
进制文件,如下命令:
crushtool -c {decompiled-crush-map-filename} -o {compiled-crush-map-filename}
最后把crushmap应用到ceph集群中,PG会根据新的map进行重新分布,如下所示:
ceph osd setcrushmap -i {compiled-crushmap-filename}
设置pool的crush rule
ceph osd pool set <poolname> crush_ruleset 4 ##此处4是指rule里ruleset设置的值
添加bucket
ceph osd crush add-bucket <name> <type>
示例: ceph osd crush add-bucket rack01 rack
移除bucket
ceph osd crush remove <name> <location>
示例:ceph osd crush remove rack01 root=default
移动bucket
ceph osd crush move <name> <location>
示例:ceph osd crush move rack01 root=default
添加OSD到crush map
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
示例:ceph osd crush add osd.5 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
移动OSD的crush位置
ceph osd crush create-or-move {id-or-name} {weight} root={pool} [{buckettype}={bucket-name}.....]
示例:ceph osd crush create-or-move 4 0.09 root=default host=host-192-168-0-17
从crushmap移除OSD
ceph osd crush remove {name}
示例:ceph osd crush remove osd.3