Ceph笔记整理

Ceph笔记整理

1.简介

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率。

2.Ceph特点:

 

   高性能:摒弃传统的集中存储的数据方案,使得数据分布均衡,提高并行

高可用性: a.副本灵活控制  b.数据强一致性  c.自动管理,自动修复

高可扩展性:a.去中心化 b.扩展灵活 c随节点增加而线性增加

特性丰富:支持三种存储接口:块存储,文件存储,对象存储。

3. Ceph应用场景:

Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;块设备存储可以对接(IaaS),当前主流的IaaS运平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。

a.块存储
这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储,可以直接作为磁盘挂载,内置了容灾机制;

优点:硬盘廉价,RAID+LVM,数据有保障,多块硬盘组成的逻辑盘,读写传输速度高。

使用场景:容器,日志,文件储存。

 

b.文件系统存储
通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力NFS、NAS也是属于文件系统存储.

优点:方便文件共享

缺点:读写,传输速度慢

使用场景:有目录结构的文件存储,日志

 

c.对象存储:
也就是通常意义的键值存储,提供多种编程语言绑定,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有内置大容量硬盘的分布式服务器( Swift 、S3 以及 Gluster 等);

优点:具备块存储的读写传输速度,具备文件存储的共享特性;

使用场景:图片、视频等(不怎么变动的数据)

4.ceph组件

Ceph OSDs:OSD即对象存储守护程序,但是它并非针对对象存储。OSD负责存储数据、处理数据复制、恢复、回填(Backfilling)、再平衡。此外OSD还对其它OSD进行心跳检测,检测结果汇报给Monitor。

RBD:即RADOS Block Device,指Ceph提供的基于复制性的分布式的块设备。类似于LVM中的逻辑卷,RBD只能属于一个Pool。

CephFS:Ceph File System,是Ceph对外提供的文件系统服务。

Pool:存储池是Ceph中一些对象的逻辑分组。它不是一个连续的分区,而是一个逻辑概念,类似LVM中的卷组。

PG:PG是Pool组织对象的方式,便于更好的分配数据和定位数据,Pool由若干PG组成,PG在OSD的/var/lib/ceph/osd/ceph-2/current目录下,表现为目录。

Object:Ceph最底层的存储单元是Object,每个Object包含元数据和原始数据

一个RBD会包含很多个Object。

MON:监视器,维护集群状态的多种映射,同时提供认证和日志记录服务。地图map。(ceph-mon)

OSD:负责响应客户端请求返回具体数据的进程。Ceph集群中有大量OSD。(ceph-osd)

MDSs:元数据服务器,存储CephFS的元数据信息,文件系统。(ceph-mds)

Radowsgateway:对象存储。(ceph-radosgw)

 

5.Ceph存储过程:

无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成Objects。Objects size大小可以由管理员调整,

 

Ojbect —— 此处的object是RADOS所看到的“对象”。Object与上面提到的file的区别是,object的最大size由RADOS限定(通常为2MB或4MB),以便实现底层存储的组织管理。因此,当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储

 

PG—— PG的用途是对object的存储进行组织和位置映射。具体而言,一个PG负责组织若干个object(可以为数千个甚至更多),但一个object只能被映射到一个PG中,即,PG和object之间是“一对多”映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是“多对多”映射关系。在实践当中,n至少为2,如果用于生产环境,则至少为3。一个OSD上的PG则可达到数百个。

 

OSD —— OSD的数量事实上也关系到系统的数据分布均匀性,因此其数量不应太少。在实践当中,至少也应该是数十上百个的量级才有助于Ceph系统的设计发挥其应有的优势。

 

Ceph中的寻址至少要经历以下三次映射:

(1)File -> object映射

(2)Object -> PG映射,hash(oid) & mask -> pgid

(3)PG -> OSD映射,CRUSH算法(复制三份,所以要上台以上ceph服务器)

 

 

6.部署ceph集群(三台起步)

 1.安装部署软件ceph-deploy

主cephyum -y install ceph-deploy

全部ceph服务器:[root@ceph1 ceph-cluster]# yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw

  1. 创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件

[root@ceph1 ceph-cluster]#  ceph-deploy new  ceph1  ceph2  ceph3

  1. 初始化所有节点的mon服务

[root@ceph1 ceph-cluster]# ceph-deploy mon create-initial

  1. 创建OSD   (用来做存储服务器的journal缓存盘)

for i in ceph1 ceph2 ceph3

do

ssh $i “parted /dev/sdb mklabel gpt”

ssh $i “parted /dev/sdb mkpart primary 1 50%”

ssh $i “parted /dev/sdb mkpart primary 50% 100%”

done

  1. 磁盘分区后的默认权限无法让ceph软件对其进行读写操作,需要修改权限 .

chown  ceph.ceph  /dev/sdb1 (临时)

[root@ceph1 ceph-cluster]# vim /etc/udev/rules.d/70-sdb.rules(永久)

ENV{DEVNAME}==”/dev/sdb1″,OWNER=”ceph”,GROUP=”ceph”

ENV{DEVNAME}==”/dev/sdb2″,OWNER=”ceph”,GROUP=”ceph”

  1. 初始化清空磁盘数据(仅ceph1操作即可)

[root@ceph1 ceph-cluster]# ceph-deploy disk  zap  ceph1:sdc   ceph1:sdb

[root@ceph1 ceph-cluster]# ceph-deploy disk  zap  ceph2:sdc   ceph2:sdb

[root@ceph1 ceph-cluster]# ceph-deploy disk  zap  ceph3:sdc   ceph3:sdb

  1. 创建OSD存储空间(仅ceph1操作即可)创建osd存储设备,sdc为集群提供存           储空间,sdb1提供JOURNAL缓存,每个存储设备对应一个缓存设备,缓存需要SSD,不需要很大

[root@ceph1 ceph-cluster]# ceph-deploy osd create  ceph1:sdc:/dev/sdb1 ceph1sdc:/dev/sdb2

[root@node1 ceph-cluster]# ceph-deploy osd create   node2:sdc:/dev/sdb1 node2:sdc:/dev/sdb2

[root@node1 ceph-cluster]# ceph-deploy osd create    node3:sdc:/dev/sdb1 node3:sdc/dev/sdb2

  1. 验证

ceph -s          #查看集群状态

ceph osd tree     #查看有几个osd,分别在哪些主机,服务状态

 

 

 

7.创建Ceph块存储

1.创建镜像

[root@node1 ~]ceph osd lspools    #查看存储池

#这里的demo-image和jacob为创建的镜像名称,可以为任意字符–image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。

[root@node1 ~]# rbd create demo-image –image-feature  layering –size 10G

[root@node1 ~]# rbd create rbd/jacob  –image-feature  layering –size 10G

[root@node1 ~]# rbd list     #查看共享镜像(默认为空)

[root@node1 ~]# rbd info demo-image    #查看demo-image镜像信息

rbd image ‘demo-image’:

size 10240 MB in 2560 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.d3aa2ae8944a

format: 2

Features: layering

2.动态调整

[root@node1 ~]# rbd resize –size 15G jacob (调整大小,扩大)

[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd resize –size 7G jacob –allow-shrink(缩小)

[root@node1 ~]# rbd info image

3.客户端访问

#客户端需要安装ceph-common软件包

#拷贝配置文件(否则不知道集群在哪)

[root@client ~]# yum -y  install ceph-common   #装包

[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf  /etc/ceph/

#拷贝配置文件(否则不知道集群在哪)

[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \

/etc/ceph/                  #拷贝连接密钥(否则无连接权限)

[root@client ~]# rbd map  jacob      #映射镜像到本地磁盘

[root@client ~]#  lsblk

[root@client ~]# rbd showmapped     #查看镜像

id pool image snap device

0  rbd  jacob –    /dev/rbd0

[root@client ~]# mkfs.xfs /dev/rbd0        #格式化

[root@client ~]# mount /dev/rbd0 /mnt/    #挂载

[root@client ~]# echo “test” > /mnt/test.txt  #验证

4.创建镜像快照

[root@node1 ~]# rbd snap ls jacob 查看镜像快照(默认所有镜像都没有快照)

[root@node1 ~]# rbd snap create jacob –snap jacob-snap1

#为jacob镜像创建快照,快照名称为jacob-snap1

验证:rm  -rf   /mnt/test.txt  #客户端删除文件

umount  /mnt         #客户端解除挂载

[root@node1 ~]# rbd snap rollback jacob –snap jacob-snap1

#服务器还原快照

[root@client ~]# mount /dev/rbd0 /mnt/

[root@client ~]# ls  /mnt

5.创建快照克隆

 [root@node1 ~]#rbd snap protect –image jacob –snap jacob-snap1

#保护快照,对jacob共享盘的jacob-snap1这个快照进行保护.

[root@node1 ~]#  rbd clone  jacob –snap jacob-snap1 jacob-clone –image-feature layering

#使用jacob镜像的快照jacob-snap1克隆一个新的名称为jacob-clone的镜像

查看:

[root@node1 ~] rbd info jacob-clone  #可以查看到快照的信息

[root@node1 ~]# rbd flatten kelong #把镜像与快照分离

[root@node1 ~]# rbd info kelong #一个独立的镜像盘

[root@node1 ~]#  rbd snap unprotect jacob –snap jacob-snap1

#取消快照保护

[root@node1 ~]#  rbd snap rm jacob –snap jacob-snap1

#可以删除快照

  1. 创建Ceph文件系统

1.配置部署元数据服务器

[root@node4 ~]# yum -y install ceph-mds           #装包

[root@node1 ceph-cluster]# ceph-deploy mds create node4

#远程nod4,拷贝配置文件,启动mds服务

[root@node1 ceph-cluster]# ceph-deploy admin node4

#同步配置文件和key

2.创建存储池

[root@node4 ~]# ceph osd pool create cephfs_data 128

[root@node4 ~]# ceph osd pool create cephfs_metadata 128

#创建2个存储池,对应128个PG一池用于存储数据一池用于存储元数据

3.创建Ceph文件系统

[root@node4 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data

new fs with metadata pool 2 and data pool 1

注意,先写medadata池,再写data池,默认,只能创建1个文件系统,多余的会报错

[root@node4 ~]# ceph fs ls

4.客户端挂载

[root@client ~]# mount -t ceph 192.168.4.11:6789:/  /mnt/cephfs/ \

-o name=admin,secret=AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==

#文件系统类型为ceph,admin是用户名,secret是密钥,密钥可以/etc/ceph/ceph.client.admin.keyring中找到

  1. 创建对象存储服务器

对象存储:

也就是键值存储,通其API接口指令才能读写数据

也就是简单的GET、PUT、DEL和其他扩展

向存储服务上传下载数据对象存储中所有数据都被认为是一个对象

所以,任何数据都可以存入对象存储服务器

如图片、视频、音频等

RGW全称是Rados GatewayRGW是Ceph对象存储网关,

用于向客户端应用呈现存储界面,提供RESTful API访问接口

部署对象存储服务器

[root@node1 ~]# yum -y install ceph-radosgw    #装包

[root@node1 ~]# cd /root/ceph-cluster

[root@node1 ~]# ceph-deploy rgw create node5   #把node5的服务打开

[root@node1 ceph-cluster]# ceph-deploy admin node5   #同步配置文件和key

[root@node5 ~]# ps aux |grep radosgw  #查看端口

[root@node5 ~]# systemctl  status ceph-radosgw@\*  #查看程序状态

[root@node5 ~]# vim  /etc/ceph/ceph.conf

#修改端口,默认为7480,8000好记

[client.rgw.node5]

host = node5

rgw_frontends = “civetweb port=8000”

//civetweb是RGW内置的一个web服务

[root@node3 ~]# systemctl restart ceph-radosgw@rgw.node5.service #重启

[root@node3 ~]# ss -ntulp |grep rados     #变成了8000端口

 

 

 

 

  

 

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇