要求
1)Ceph分布式文件系统的平台要求:CentOS Linux 7;2) Monitor节点要求:容忍单点故障,任何故障下保持一致性;3) 数据节点要求:容忍单点故障,单点故障下无数据丢失;4) 数据分布:数据分布均匀,不均匀率不高于10%;5) 存储网络:管理网络及存储网络分离,避免互相影响;6) 使用Ceph块存储,创建虚拟计算资源;7) 在CentOS 系统上挂在并使用Ceph文件存储。
分析
1)Monitor节点多Monitor节点实现备份,防止单点故障Monitor节点以多数优先,当单点故障时,剩下的monitor节点需要自己意识到除了自己还有其他monitor,才认为自己还可用。所以monitor节点的数量至少需要三个。monitor节点的hostname(主机名)不能一致。由于我是克隆的,全都是一致,所以此处用命令进行修改:
hostnamectl set-hostname cxx2
2)数据节点(OSD)单点故障下无数据丢失,数据复制份数至少为两份多OSDOSD状态说明:a. 集群内(in)b. 集群外(out)c. 活着且在运行(up)d. 挂了且不再运行(down)正常情况下OSD的状态是up in状态,如果down掉OSD,它的状态会变为down in,等待数据均衡完成后osd变为down out状态,Ceph 会把其归置组迁移到其他OSD, CRUSH 就不会再分配归置组给它。3)数据分布PG数量越多,权衡越好MAX(pg)=OSD数量*100/复制份数
原理
1)OSD负责完成数据存储和维护功能对象存储设备2)Monitor负责完成系统检测和维护若干个3)PG放置组
步骤
安装相关软件
安装ceph jewel版本软件仓库
yum install -y centos-release-ceph-jewel.noarch
1、安装monitor服务相关软件包
yum install -y ceph-mon.x86_64
2、安装osd服务相关软件包
yum install -y ceph-osd.x86_64
3、安装mds服务相关软件包
yum install -y ceph-mds.x86_64
相关准备
关闭selinux的增强功能vi /etc/selinux/config
关闭防火墙
systemctl disable firewalld //禁止开机自启动systemctl stop firewalld.service //关闭防火墙
Monitor节点配置
创建空的配置文件
生成UUID
3e38aec9-7d09-48a6-9f58-48760fec0d82
编辑配置文件
vi /etc/ceph/ceph.conf
[global]fsid = 3e38aec9-7d09-48a6-9f58-48760fec0d82 mon initial members = cxx mon host =192.168.25.42 public network =192.168.25.0/24cluster network =192.168.25.0/24auth cluster required = cephx auth service required = cephx auth client required = cephx osd journal size = 1024 osd pool default size = 3 osd pool default min size = 2 osd pool default pg num = 333 osd pool default pgp num = 333 osd crush chooseleaf type = 1 [mon.cxx]host =cxxaddr = 192.168.25.42
创建mon key
创建管理用户key
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
在mon key中导入管理用户key
创建MAP
创建数据目录并初始化
mkdir /var/lib/ceph/mon/{cluster-name}-{mon-id}
修改数据目录拥有者为ceph其中cluster-name需要采用ceph,若不是采用ceph会额外的需要一些配置。此处便于简便,所以采用ceph。
但是由于我一开始不知道要用ceph,所以用了自定义的。
但是经过查看发现系统默认帮我生成了一个ceph-cxx,且相关的信息都保存在该目录下。而自己创建的cxx_cluster-cxx下没有任何东西。
后续数据目录则采用ceph-cxx
启动服务
systemctl start ceph-mon@cxx
查看状态
相关报错
查看monitor状态迟迟没有反应
1)检查是否能够跟初始成员进行联系
若无法进行ping通则检查是否有相应的映射关系
vi /etc/hosts
新增monitor主机步骤
此实验用三台monitor(三台centos7、在同一个网段能够进行互相通信),此处需要再新增两台monitor
修改hosts文件
vi /etc/hosts
建议将三台机器的ip以及主机名都映射进去
2. 将初始成员的monitor节点的ceph配置文件及ceph client key导入到第二台monitor主机的/etc/ceph目录下
修改相关信息
vi /etc/ceph/ceph.conf
创建数据目录
mkdir /var/lib/ceph/mon/{cluster-name}-{mon-id}
cluster-name:ceph
mon-id:主机名
获取集群认证
ceph auth get mon. -o /tmp/key-cxx3cat /tmp/key-cxx3
前提:该monitor能够与初始成员monitor取得联系
获取集群MAP配置
ceph mon getmap -o /tmp/map-cxx3
初始化集群
ceph-mon -i cxx3 --mkfs --monmap /tmp/map-cxx3 --keyring /tmp/key-cxx3
修改目录拥有者
chown -R ceph:ceph /var/lib/ceph
启动服务
systemctl start ceph-mon@cxx3
另一台monitor
结果
排错
针对monitor能够正常启动,但是无法在集群中查看到该monitor解决:
在老师的帮助下找到第三台monitor的仓库中只有12.2.11版本的,经过查看知道,其他两台正常的monitor比第三台多了一个仓库(此仓库中有ceph14.2.22版本的),yum安装时默认安装最新版本的。所以此处将多的那个仓库拷贝下来上传至第三台monitor。最后更新软件,重新启动ceph就可以正常在集群中看到cxx3的这台monitor啦!
osd部署
前提
由于高版本的ceph在osd操作上会有些问题,所以我这里将所有的都卸载重新安装为较低版本的ceph。
卸载软件命令:
yum erase {安装包}
建议每台monitor上都只部署一个OSD
步骤
第一台monitor:
在集群中创建osdceph osd create #命令返回一个osd-number,用于后面的osd-number
创建osd目录
mkdir /var/lib/ceph/osd/{cluster-name}-{osd-number}
cluster-name:ceph
osd-number:第一步生成的osd-number,我这里此处是0
初始化OSD目录
ceph-osd -i 0 --mkfs --mkkey
注册osd
ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-2/keyring
增加主机到桶
ceph osd crush add-bucket cxx_node host
将OSD加入到桶中
ceph osd crush add osd.0 1.0 host=cxx_node
移动OSD到默认节点下
ceph osd crush move cxx_node root=default
修改目录权限
chown -R ceph:ceph /var/lib/ceph/osd
修改配置文件配置(vi /etc/ceph/ceph.conf)
[osd.0]host =192.168.25.42
启动osd
systemctl start ceph-osd@0.service
查看osd状态
ceph osd stat
集群内(in)、活着且在运行(up)
第二台monitor:
ceph osd crush add osd.1 1.0 host=cxx_node2
第三台monitor
ceph osd crush add osd.2 1.0 host=cxx_node2
查看osd tree
ceph osd tree
ceph块存储
前提
对于12.2.11版本的ceph在后续的创建镜像步骤中无法正常的执行,经过老师的分析,12.2.11版本的ceph多了一种mgr的角色,但是我们在最开始对角色赋权的操作时,没有对该角色赋权。所以此处需要重新搭建ceph集群。
与之前的步骤不同之处在于增加了对mgr的权限。(上述代码已经修改)
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
原理
块存储简称RBD(RADOS Block Device),是一种有序的字节序块,也是在Ceph三大存储类型中最为常用的存储方式 。Ceph的块存储是基于RADOS的,因此它也借助RADOS的快照、复制和一致性等特性提供了快照、克隆和备份等操作。 Ceph的块设备是一种精简置备模式,可以拓展块存储的大小且存储的数据以条带化的方式存储到Ceph集群中的多个OSD中。RBD是Ceph对外的三大组件之一,也是Ceph最稳定的接口。应用访问rados应用有两种途径librbd 用户态接口,librados.so动态链接库充当客户端接入RADOS集群;可以在用户态访问RBD接口;krbd 内核态,通过rbd命令,可以将rbd设备映射为本地的块设备,可以在/mnt下挂载。
部署
使用Ceph块存储,创建虚拟计算资源
步骤
创建rdb镜像创建pool
集群总的pg-num参考:
少于5个OSD 设置为128
5到10个OSD 设置为 512
10到50个OSD 设置为 1024
据上,则修改集群的pg数量为128((注意这是整个集群的pg数量,三台monitor的配置文件都需要修改成128)
每台monitor的pg-num数量
集群pg-num数量总的为128
对于每台monitor所使用的pg-num我们将总的pg-num/monitor数量,所以此处设置为42
ceph osd pool create cxx 42 42
初始化pool
rbd pool init cxx
创建块设备镜像
rbd create --size {megabytes} {pool-name}/{image-name} rbd create --size 1024 cxx/cxx-image
利用ls查看cxxpool下的块设备镜像
rbd ls cxx
创建计算资源
此处利用课题一的qemu-kvm创建的虚拟机
/usr/libexec/qemu-kvm -m 512 --drive format=raw,file=/cxx/cxx_centos6.raw --drive format=rbd,file=rbd:cxx/cxx-image -device ich9-usb-ehci1 --device usb-tablet --display vnc=0.0.0.0:25&
–drive format=raw,file=/cxx/cxx_centos6.raw
此处对应的是之前存储虚拟机的镜像文件的地址
–drive format=rbd,file=rbd:cxx/cxx-image
此处对应pool-name/image-name
对磁盘进行相关的操作查看磁盘
进行分区相关操作(参考)
/HeiDi-BoKe/p/11936998.html
进行分区相关操作(参考)
/HeiDi-BoKe/p/11936998.html
ceph文件系统存储
原理
提供POSIX兼容的网络文件系统CephFS,专注于高性能、大容量存储。Ceph集群实现了自己的文件系统来组织管理集群的存储空间,用户可以直接将Ceph集群的文件系统挂载到用户机上使用。
与块存储的区别
Ceph的块设备具有优异的读写性能,但不能多处挂载同时读写,目前主要用在OpenStack上作为虚拟磁盘,而Ceph的文件系统接口读写性能较块设备接口差,但具有优异的共享性。
实现步骤
新增MDS主机
安装mgr
yum install -y ceph-mgr
ceph auth get-or-create mgr.cxx mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-cxx/keyring
chown -R ceph:ceph /var/lib/ceph/
修改配置文件
systemctl start ceph-mgr@cxx
MDS配置
修改配置文件
systemctl start ceph-mds@0
创建文件系统
数据池以及元数据池
用于数据池
用于元数据池
ceph osd pool create cxx_data 42 //此处42是每台monitor分配的pg数量,在块设备部署处有详细的解释。ceph osd pool create cxx_metadata 42
文件系统
ceph fs new <fs_name> {metadata group name} {data_group_name}
metadata group name:元数据池
data_group_name:数据池
ceph fs new cxx_fs cxx_metadata cxx_data
查看mds服务状态
查看文件系统
挂载文件系统
由图可知,ceph-mon默认的端口为6789
创建挂载点
mkdir /mnt/cxx_cephfs
挂载文件系统
mount -t ceph 192.168.25.42:/ /mnt/cxx_cephfs -o name=admin,secret=AQB0zlNhwMbpJBAA/vlaRLQ5UvwCY5A4ShufNQ==
结果
由图,可以看到文件系统已被挂载在Linux上。
此时,我们可以在此处创建新的文件并写入内容。以达到使用该文件系统的操作。
致谢
感谢张林老师的辛勤指导!