Ceph 简介
不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。
存储类型分类:
1 das direct access storage --直连存储 (所有手机,移动硬盘,电脑在里边线相连)缺点:接口有限 SATA接口
联网访问:2 Nas --网络附加存储 --独立网络存储
特点:文件系统共享
NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输, 为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机共享/备份
-nfs samba
方式: 服务端:分区格式化,共享目录 --->用户直接mount
类型:Ext3 ext4 xfs ntfs fat32 swap --格式化后:文件系统
---没格式化: 块设备
3 San 存储区域网络 --storage area network
iscsi
iSCSI(Internet Small Computer System Interface,
4 分布式存储 SDS(软件定义存储) : software define storage
Ceph
C/s
分布式文件共享
装包组件; osd --存储设备
最少3Monitor --集群监控 ---取余随机负载
Rush算法 \取余算法
Echo a.txt | Md5sum 数字%3 :012
取余随机负载
原理草图:
1T 1T 1T
(node1 osd ) (node2 osd ) (node3 osd )
Mon mon mon
环境主机准备:
分布式文件系统:1 hadoop
2 Fastdfs
3 Ceph (快存储,文件系统 对象存储): 高可用,高扩展-随添加,高性能-1G=4+4m...拆开存储
支持EB 级别存储
高可用A.mp4 (默认3副本)
4 GlusterFs
安装前准备环境
1)物理机为所有节点配置yum源服务器。
提示:ceph10.iso在/linux-soft/02目录。
[root@room9pc01 ~]# mkdir /var/ftp/ceph
[root@room9pc01 ~]# mount ceph10.iso /var/ftp/ceph/
2)配置无密码连接(包括自己远程自己也不需要密码),在node1操作。
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ‘’
[root@node1 ~]# for i in 10 11 12 13
do
ssh-copy-id 192.168.4.$i
Done
3)修改/etc/hosts并同步到所有主机。
警告:/etc/hosts解析的域名必须与本机主机名一致!!!!
[root@node1 ~]# cat /etc/hosts
… …
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
警告:/etc/hosts解析的域名必须与本机主机名一致!!!!
[root@node1 ~]# for i in 10 11 12 13
do
scp /etc/hosts 192.168.4.$i:/etc/
done
4)修改所有节点都需要配置YUM源,并同步到所有主机。
[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/Tools
gpgcheck=0
[root@node1 ~]# yum repolist #验证YUM源软件数量
源标识 源名称 状态
Dvd redhat 9,911
Mon mon 41
Osd osd 28
Tools tools 33
repolist: 10,013
[root@node1 ~]# for i in 10 11 12 13
do
scp /etc/yum.repos.d/ceph.repo 192.168.4.KaTeX parse error: Expected 'EOF', got '#' at position 89: … [root@node1 ~]#̲ vim /etc/chron…i:/etc/
ssh 192.168.4.$i “systemctl restart chronyd”
done
步骤三:准备存储磁盘
物理机上为每个虚拟机准备3块磁盘(可以使用命令,也可以使用图形直接添加)。
[root@room9pc01 ~]# virt-manager
每个30G(除了客户端)
部署ceph集群
部署Ceph集群服务器,实现以下目标:
安装部署工具ceph-deploy
创建ceph集群
准备日志磁盘分区
创建OSD存储空间
查看ceph状态,验证
步骤一:安装部署软件ceph-deploy
1)在node1安装部署工具,学习工具的语法格式。
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# ceph-deploy mon --help
deploy
部署,调度(军队或武器);有效地利用;调动
2)创建目录
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster
部署二 部署ceph集群
1))创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。
在ceph.conf配置文件中定义monitor主机是谁。
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
Cephx : 密码占位符 访问需要密码
2)给所有节点安装ceph相关软件包。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i “yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw”
done
rpm -qa | grep ceph -=--查看结果
3)初始化所有节点的mon服务,也就是启动mon服务(主机名解析必须对)。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
Systemctl status ceph-mon @node1 \2\3
Ceph -s —3 mon
Vdb1 --> vdc
Ssd 盘
Node1 (40G) node2(40G ) node3 (40G)
120G
Fdisk MBR – 20T
Parted GPT 18EB -非交互式
创建OSD
备注:vdb1和vdb2这两个分区用来做存储服务器的journal缓存盘。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i “parted /dev/vdb mklabel gpt”
ssh $i “parted /dev/vdb mkpart primary 1 50%”
ssh $i “parted /dev/vdb mkpart primary 50% 100%”
done
2)磁盘分区后的默认权限无法让ceph软件对其进行读写操作,需要修改权限。
node1、node2、node3都需要操作,这里以node1为例。
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb1
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb2
#上面的权限修改为临时操作,重启计算机后,权限会再次被重置。
#我们还需要将规则写到配置文件实现永久有效。
#规则:如果设备名称为/dev/vdb1则设备文件的所有者和所属组都设置为ceph。
#规则:如果设备名称为/dev/vdb2则设备文件的所有者和所属组都设置为ceph。
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-vdb.rules
ENV{DEVNAME}"/dev/vdb1",OWNER=“ceph”,GROUP=“ceph”
ENV{DEVNAME}"/dev/vdb2",OWNER=“ceph”,GROUP=“ceph”
for i in node1 node2 node3
do
ssh $i “chown ceph:ceph /dev/vdb1”
ssh $i “chown ceph:ceph /dev/vdb2”
done
3)初始化清空磁盘数据(仅node1操作即可)。
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdc node1:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc node2:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc node3:vdd
4)创建OSD存储空间(仅node1操作即可)
重要:很多同学在这里会出错!将主机名、设备名称输入错误!!!
[root@node1 ceph-cluster]# ceph-deploy osd create
node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL缓存,
//一个存储设备对应一个缓存设备,缓存需要SSD,不需要很大
[root@node1 ceph-cluster]# ceph-deploy osd create
node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph-deploy osd create
node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
120G
Ceph 共享池[共享镜像 共享镜像 共享镜像]
共享镜像ABC --20G
共享abc --20G
使用Ceph集群的块存储功能,实现以下目标:
创建块存储镜像
客户端映射镜像
创建镜像快照
使用快照还原数据
使用快照克隆镜像
删除快照与镜像
创建镜像
1)查看存储池。
[root@node1 ~]# ceph osd lspools 0 rbd
2)创建镜像、查看镜像
[root@node1 ~]# rbd create demo-image --image-feature layering --size 10G --cow 写实复制
#这里的demo-image和image为创建的镜像名称,可以为任意字符。
#–image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。
#提示:ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info demo-image
步骤二:动态调整
1)缩小容量
[root@node1 ~]# rbd resize --size 7G image --allow-shrink
[root@node1 ~]# rbd info image
2)扩容容量
[root@node1 ~]# rbd resize --size 15G image
[root@node1 ~]# rbd info im
通过KRBD访问
1)客户端通过KRBD访问
#客户端需要安装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 image -添加镜像 此时在client会多出一个rbd 镜像
[root@client ~]# lsblk
Rbd0 20G
[root@client ~]# rbd showmapped --查看共享rbd信息
id pool image snap device
0 rbd image - /dev/rbd0
快照: 备份的一种方法 snap
创建镜像快照
查看镜像快照(默认所有镜像都没有快照)。
[root@node1 ~]# rbd snap ls image --查看
给镜像创建快照。
[root@node1 ~]# rbd snap create image --snap image-snap1
#为image镜像创建快照,快照名称为image-snap1
[root@node1 ~]# rbd snap ls image
SNAPID NAME SIZE
4 image-snap1 15360 MB
删除客户端写入的测试文件
[root@client ~]# rm -rf /mnt/test.txt
[root@client ~]# umount /mnt
还原快照
[root@node1 ~]# rbd snap rollback image --snap image-snap1
Rolling back to snapshot: 100% complete…done.
#客户端重新挂载分区
[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls /mnt
test.txt
创建快照克隆
1)克隆快照
[root@node1 ~]# rbd snap protect image --snap image-snap1
[root@node1 ~]# rbd snap rm image --snap image-snap1 //会失败
[root@node1 ~]# rbd clone image --snap image-snap1 image-clone --image-feature layering
//使用image的快照image-snap1克隆一个新的名称为image-clone镜像
2)查看克隆镜像与父镜像快照的关系
[root@node1 ~]# rbd info image-clone
rbd image ‘image-clone’:
size 15360 MB in 3840 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3f53d1b58ba
format: 2
features: layering
flags:
parent: rbd/image@image-snap1 --引用
#克隆镜像很多数据都来自于快照链
#如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
其他操作
1) 客户端撤销磁盘映射
[root@client ~]# umount /mnt
[root@client ~]# rbd showmapped
id pool image snap device
0 rbd image - /dev/rbd0
//语法格式:
[root@client ~]# rbd unmap /dev/rbd0
块存储
Server:Rbd create
客户端 Rbd map 镜像
Kvm
/etc/libvirt/qeumu/xx.xml --虚拟机配置文件
/var/lib/libvirt/images/xx.img --磁盘镜像`文件
Df -h
30G
–ceph 100G 新建镜像 30G
Real 1
Real2
Real3
1)创建磁盘镜像。
[root@node1 ~]# rbd create vm1-image --image-feature layering --size 10G
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info vm1-image
2)Ceph认证账户(仅查看即可)。
Ceph默认开启用户认证,客户端需要账户才可以访问,默认账户名称为client.admin,key是账户的密钥。
可以使用ceph auth添加新账户(
3)创建KVM虚拟机(注意:这里使用真实机当客户端!!!)。
使用virt-manager创建2台普通的KVM虚拟机。
4)配置libvirt secret(注意:这里使用真实机当客户端!!!)。
编写账户信息文件,让KVM知道ceph的账户名称。
[root@room9pc01 ~]# vim secret.xml //新建临时文件,内容如下
client.admin secret
#使用XML配置文件创建secret
[root@room9pc01 ~]# virsh secret-define secret.xml
733f0fd1-e3d6-4c25-a69f-6681fc19802b
给secret绑定admin账户的密码,密码参考ceph.client.admin.keyring文件。
[root@room9pc01] virsh secret-set-value
–secret 733f0fd1-e3d6-4c25-a69f-6681fc19802b
–base64 AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg
//这里secret后面是之前创建的secret的UUID
//base64后面是client.admin账户的密码
//现在secret中既有账户信息又有密钥信息
6)虚拟机的XML配置文件。
每个虚拟机都会有一个XML配置文件,包括:
虚拟机的名称、内存、CPU、磁盘、网卡等信息
不推荐直接使用vim修改配置文件,推荐使用virsh edit修改配置文件,效果如下:
[root@room9pc01] virsh edit vm1 //vm1为虚拟机名称
Client 关机重启\
二 文件系统 --格式化
Ext3 ext4 xfs ntfs
左Inode((256 ) 右block (4k )
元数据 --metedata 数据
数据的数据 描述右边数据的数据.
Osd
块共享 客户端 --还需格式化 --iNode
原理图
Node1 (2osd) node2 node3 node4 (mds )
Mon mon mon
Inode + block
Mount (客户端)
Ceph文件系统
Ceph-deploy new node node2 node3
Mon create -initial 启动mon服务
Osd create —远程其服务
Mds create node2 \3
Rgw create node2\3
Rbd create
Ceph fs new
Ceph mds stat
1 )ceph-deploy mds create node2 --启动mds 服务
2)创建存储池
[root@node4 ~]# ceph osd pool create cephfs_data 128(iNode) --目路(刘德华 坂井泉水 林志玲)
//创建存储池,对应128个PG
[root@node4 ~]# ceph osd pool create cephfs_metadata 128(block)
//创建存储池,对应128个PG
64–128推荐值
2幂方 1 2 48 16 32 64 128 256 512
创建池子
Ceph osd pool create cephfs_metadata 128
创建Ceph文件系统
Ceph fs new myfs1 cephfs_metadata cephfs_data
客户端挂载 mount -t --临时挂载
mount -t ceph 192.168.4.11:6789:/ /mnt/cephfs/ \ --ceph mon端口号
-o name=admin,secret=AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==
//注意:文件系统类型为ceph
//192.168.4.11为MON节点的IP(不是MDS节点)
//admin是用户名,secret是密钥
//密钥可以在/etc/ceph/ceph.client.admin.keyring中找到
Cd /etc/ceph/
cat ceph.client.admin.keyring
[client.admin]
key = AQD7ZRVdh51eMRAAt3sNzcSBHV7ksoJJPdDiEA==
Vim /etc/rc.local
Vim /etc/fstab
创建对象存储服务器
对象存储(百度网盘) 阿里云 --上传 下载 华为云(靠它写好的程序)
看不见
步骤一:部署对象存储服务器
1)准备实验环境,要求如下:
IP地址:192.168.4.15
主机名:node5
配置yum源(包括rhel、ceph的源)
与Client主机同步时间
node1允许无密码远程node5
修改node1的/etc/hosts,并同步到所有node主机
2)部署RGW软件包
[root@node1 ~]# ceph-deploy install --rgw node5
同步配置文件与密钥到node5
[root@node1 ~]# cd /root/ceph-cluster
[root@node1 ~]# ceph-deploy admin node5
3)新建网关实例
启动一个rgw服务
[root@node1 ~]# ceph-deploy rgw create node5
登陆node5验证服务是否启动
[root@node5 ~]# ps aux |grep radosgw
ceph 4109 0.2 1.4 2289196 14972 ? Ssl 22:53 0:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node4 --setuser ceph --setgroup ceph
[root@node5 ~]# systemctl status ceph-radosgw@*
4)修改服务端口
登陆node5,RGW默认服务端口为7480,修改为8000或80更方便客户端记忆和使用
[root@node5 ~]# vim /etc/ceph/ceph.conf
[client.rgw.node5]
host = node5
rgw_frontends = “civetweb port=8000”
//node5为主机名
//civetweb是RGW内置的一个web服务
Osd 最少3个
Mon 最少2 必须过半才可用