Openstack云计算(五)ceph
[*] Ceph简介:
Ceph是一种为优秀的性能、可靠性和可扩展性而计划的同一的、分布式文件体系。ceph]的同一体现在可以提供文件体系、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云情况中,通常会采用ceph作为openstack的唯一后端存储来进步数据转发效率。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表) ,并随后贡献给开源社区。在经过了数年的发展之后,现在已得到浩繁云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
官网:https://ceph.com/
官方文档:Welcome to Ceph — Ceph Documentation
[*] Ceph特点:
高性能:a.摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.思量了容灾域的隔离,可以或许实现各类负载的副本放置规则,比方跨机房、机架感知等。
c.可以或许支持上千个存储节点的规模,支持TB到PB级的数据。
高可用性:
[*]副本数可以机动控制。
[*]支持故障域分隔,数据强一致性。
[*]多种故障场景自动进行修复自愈。
[*]没有单点故障,自动管理。
高可扩展性:
[*]去中央化。
[*]扩展机动。
[*]随着节点增长而线性增长。
特性丰富:
[*]支持三种存储接口:块存储、文件存储、对象存储。
[*]支持自定义接口,支持多种语言驱动。
[*]Ceph应用场景:
Ceph可以提供对象存储、块设备存储和文件体系服务,其对象存储可以对接网盘(owncloud )应用业务等;其块设备存储可以对接(Iaas) ,当前主流的IaaS运平台软件,如: OpenStack, CloudStack、Zstack, Eucalyptus等以及kvm等。
Ceph是一个高性能、可扩容的分布式存储体系,它提供三大功能:
对象存储(RADOSGW) :提供RESTful接口,也提供多种编程语言绑定。兼容S3、 Swift ;
块存储(RDB):由RBD提供,可以直接作为磁盘挂载,内置了容灾机制;
文件体系(CephFS) :提供POSIX兼容的网络文件体系CephFS ,专注于高性能、大容量存储;
什么是块存储/对象存储/文件体系存储?
[*]对象存储:
也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift、S3 以及 Gluster等;
[*]块存储:
这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口必要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog, AWS的EBS ,青云的云硬盘和阿里云的盘古体系,还有Ceph的RBD (RBD是Ceph面向块存储的接口)。在常见的存储中DAS, SAN提供的也是块存储;
[*]文件体系存储:
通常意义是支持POSIX接口,它跟传统的文件体系如Ext4是一个范例的,但区别在于分布式存储提供了并行化的本领,如Ceph的CephFS (CephFS是Ceph面向文件存储的接口) ,但是偶然候又会把GlusterFS , HDFS这种非POSIX接口的类文件存储接口归入此类。固然 NFS、NAS也是属于文件体系存储;
[*]Ceph的核心组件:
[*]
[*]https://i-blog.csdnimg.cn/blog_migrate/334812fe576720da8dd66b4c8d9cfffc.jpeg
[*]Monitors :监视器,维护集群状态的多种映射,同时提供认证和日记记录服务,包括有关monitor节点端到端的信息,此中包括Ceph集群ID ,监控主机名和IP以及端口。而且存储当前版本信息以及最新更改信息,通过"ceph mon dump"查看 monitor map.
[*]MDS (Metadata Server) : Ceph元数据,主要生存的是Ceph文件体系的元数据。留意: ceph的块存储和ceph对象存储都不必要MDS。
[*]OSD :即对象存储守护程序,但是它并非针对对象存储。是物理磁盘驱动器,将数据以对象的形式存储到集群中的每个节点的物理磁盘上。OSD负责存储数据、处置惩罚数据复制、恢复、回(Backfilling)、再平衡。完成存储数据的工作绝大多数是由OSD daemon进程实现。在构建Ceph OSD的时候,建议采用SSD磁盘以及xfs文件体系来格式化分区。别的OSD还对别的OSD进行心跳检测,检测结果陈诉给Monitor
[*]RADOS : Reliable Autonomic Distributed Object Store. RADOS是ceph存储集群的基础。在ceph中,全部数据都以对象的形式存储,而且无论什么数据范例, RADOS对象存储都将负责生存这些对象。RADOS层可以确保数据始终保持一致。
[*]librados : librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件体系提供原生的接口。
[*]RADOSGW :网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储创建毗连。而且提供S3和Swift兼容的RESTful API接口。
[*]RBD:块设备,它可以或许自动精简配置并可调解大小,而且将数据分散存储在多个OSD上。(8) CephFS : Ceph文件体系,与POSIX兼容的文件体系,基于librados封装原生接口。
[*]Ceph 数据存储过程:
无论使用哪种存储方式(对象、块、文件体系),存储的数据都会被切分成Objects。Objects size大小可以由管理员调解,通常为2M或4M。每个对象都会有一个唯一的OID,由ino与ono天生,虽然这些名词看上去很复杂,其实相当简单。
ino :即是文件的File ID ,用于在全局唯一标识每一个文件
ono:则是分片的编号
好比:一个文件FileID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为A0与A1。
File--此处的file就是用户必要存储或者访问的文件。对于一个基于Ceph开辟的对象存储应用而言,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。
Ojbect--此处的object是RADOS所看到的"对象"。Object与上面提到的file的区别是, object的最大size由RADOS限定(通常为2MB或4MB) ,以便实现底层存储的组织管理。因此,当上层应用向RADOS存入size很大的file时,必要将file切分成同一大小的一系列object (最后一个的大小可以差异)进行存储。为避免混淆,在本文中将尽量避免使用中文的"对象"这一名词,而直接使用file或object进行阐明。
PG (Placement Group)--顾名思义,PG的用途是对object的存储进行组织和位置映射。详细而言,一个PG负责组织多少个object (可以为数千个乃至更多) ,但一个object只能被映射到一个PG中,即,PG和object之间是"一对多"映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是"多对多"映射关系。在实践当中,n至少为2,如果用于生产情况,则至少为3,一个OSD上的PG则可达到数百个。究竟上, PG数目的设置牵扯到数据分布的匀称性题目。
OSD--即object storage device ,前文已经详细介绍,此处不再睁开。唯一必要阐明的是, osD的数目究竟上也关系到体系的数据分布匀称性,因此其数目不应太少。在实践当中,至少也应该是数十上百个的量级才有助于Ceph体系的计划发挥其应有的优势。
基于上述定义,便可以对寻址流程进行解释了。详细而言,Ceph中的寻址至少要经历以下三次映射:
[*]File -> object映射
[*]Object-> PG映射, has(oid) & mask -> pgid
[*](3) PG-> OSD映射,CRUSH算法
CRUSH , Controlled Replication Under Scalable Hashing ,它表示数据存储的分布式选择算法, ceph的高性能/高可用就是采用这种算法实现。CRUSH算法取代了在元数据表中为每个客户端哀求进行查找,它通过计算体系中数据应该被写入或读出的位置。CRUSH可以或许感知基础架构,可以或许理解基础办法各个部件之间的关系。并CRUSH生存数据的多个副本,这样纵然一个故障域的几个组件都出现故障,数据依然可用。CRUSH算是使得ceph实现了自我管理和自我修复。
RADOS 分布式存储相较于传统分布式存储的优势在于:
1,将文件映射到object后,使用Cluster Map通过CRUSH计算而不是查找表方式定位文件数据存储到存储设备的详细位置。优化了传统文件到块的映射和Block MAp的管理。
[*]RADOS充分使用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展
[*]部署预备:
[*]全部ceph集群节点(包括客户端)设置静态域名分析;
127.0.0.1localhost localhost.localdomain localhost4 localhost4.localdomain4
::1localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.254.163 dlp
172.16.254.64 node1
172.16.254.65 node2
172.16.254.66 node3
172.16.254.63 controller
[*]全部集群节点(包括客户端)创建cent用户,并设置密码,后执行如下下令:
useradd cent && echo "123" | passwd --stdin cent
echo -e 'Defaults:cent Irequiretty\ncent ALL = (root) NOPASSwD:ALL' I tee /etc/sudoers.d/cephchmod 440 /etc/sudoers.d/ceph
(3)在部署节点切换为cent用户,设置无密钥登陆各节点包括客户端节点
(4)在部署节点切换为cent用户,在cent用户家目录,设置如下文件: vi~/.ssh/config# create new (define all nodesand users)
Host dlp
Hostname dlp
User cent
Host node1
Hostname node1
User cent
Host node2
Hostname node2
User cent
Host node3
Hostname node3
User cent
[*]查看版本下令和修改权限下令
Cat /etc/redhat-release
chmod 600 ~/.ssh/config 全部节点配置国内ceph源:
[*]all-node (包括客户端)在/etc/yum.repos.d创建 ceph-yunwei.repo
name=ceph-yunwei-install
baseurl=https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/ceph-jewel/
enable=1
gpgcheck=0
或者也可以将如上内容添加到现有的 CentOS-Base.repo 中。
(2)到国内ceph源中https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/ceph-jewel/下载如下所需rpm包。留意:赤色框中为ceph-deploy的rpm,只必要在部署节点安装,下载必要到ceph-rpm-jewel-el7-noarch安装包下载_开源镜像站-阿里云中找到最新对应的ceph-deploy-xxxxx.noarch.rpm 下载
清理缓存
Yum clean all 加载插件
Yum makecache
3)将下载好的rpm拷贝到全部节点,并安装。留意ceph-deploy-xxxxx.noarch.rpm 只有部署节点用到,其他节点不必要,部署节点也必要安装别的的rpm
(4)在部署节点(cent用户下执行):安装 ceph-deploy,在root用户下,进入下载好的rpm包目录,执行:
yum localinstall -y ./* (或者sudo yum install ceph-deploy)
创建ceph工作目录
mkdir ceph && cd ceph 验证是否安装成功 ceph-deploy --version
[*]在部署节点(cent用户下执行):配置新集群
ceph-deploy new node1 node2 node3
vim /ceph.conf
添加配置内容
mon_clock_drift_allowed = 2
mon_clock_drift_warn_backoff = 3
osd_pool_default_size = 3
(7)在部署节点执行,全部节点安装ceph软件
ceph-deploy install dlp node1 node2 node3 (8)在部署节点初始化集群(cent用户下执行):
ceph-deploy mon create-initial
(12)预备Object Storage Daemon:
ceph-deploy osd prepare node1:/var/lib/ceph/osd node2:/var/lib/ceph/osd node3:/var/lib/ceph/osd
(13)激活Object Storage Daemon:
ceph-deploy osd activate node1:/var/lib/ceph/osd node2:/var/lib/ceph/osd node3:/var/lib/ceph/osd
(14)在部署节点transfer config files
ceph-deploy admin dlp node1 node2 node3
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
(15)在ceph集群中任意节点检测:
ceph -s
三、客户端设置:
(1)客户端也要有cent用户:
useradd cent && echo "123" | passwd --stdin cent
echo-e 'Defaults:cent !requiretty\ncent ALL = (root) NOPASSWD:ALL' | tee /etc/sudoers.d/ceph
chmod440 /etc/sudoers.d/ceph
在部署节点执行,安装ceph客户端及设置:
ceph-deploy install controller
ceph-deploy admin controller
(2)客户端执行
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
(3)客户端执行,块设备rdb配置:
创建rbd:rbd create disk01 --size 10G --image-feature layering
删除:rbd rm disk01列示rbd:rbd ls -l映射rbd的image map:sudo rbd map disk01
取消映射:sudo rbd unmap disk01
显示map:rbd showmapped
格式化disk01
文件系统xfs:sudo mkfs.xfs /dev/rbd0
挂载硬盘:sudo mount /dev/rbd0 /mnt
验证是否挂着成功:df -hT
(4)File System配置:
在部署节点执行,选择一个node来创建MDS:
ceph-deploy mds create node1
以下操作在node1上执行:
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
在MDS节点node1上创建 cephfs_data 和 cephfs_metadata 的 pool
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128
开启pool:
ceph fs new cephfs cephfs_metadata cephfs_data
显示ceph fs:
ceph fs lsceph mds stat
以下操作在客户端执行,安装ceph-fuse:
yum -y install ceph-fuse
获取admin key:
sshcent@node1"sudo ceph-authtool -p /etc/ceph/ceph.client.admin.keyring" > admin.key
chmod600 admin.key
挂载ceph-fs:
mount-t ceph node1:6789:/ /mnt -o name=admin,secretfile=admin.key
df-hT
制止ceph-mds服务:
systemctl stop ceph-mds@node1
ceph mds fail 0
ceph fs rm cephfs --yes-i-really-mean-it
ceph osd lspools
显示结果:0 rbd,1 cephfs_data,2 cephfs_metadata,
ceph osd pool rm cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
四、删除情况:
ceph-deploy purge dlp node1 node2 node3 controller
ceph-deploy purgedata dlp node1 node2 node3 controller
ceph-deploy forgetkeys
rm -rf ceph*
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]