分布式文件系统
- 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
- 分布式文件系统的设计基于客户机/服务器模式
常用的分布式文件系统
- Lustre
- Hadoop
- FastDFS
- Ceph
- GlusterFS
什么是Ceph
- Ceph是一个分布式文件系统
- 具有高扩展,高可用,高性能的特点
- Ceph可以提供对象存储,块存储,文件系统存储
- 块存储(iscsi)客户端多了一个磁盘,文件系统(NFS)客户端直接mount
- Ceph可以提供PB级别的存储空间(PB→TB→GB),1024G*1024G=1058576G
- 软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越受到市场的认可
链接在此!
Ceph组件
- OSDs 存储设备
- Monitors 集群监控软件
- RadosGateway(RGW) 对象存储网关
- MDSs 存放文件系统的元数据(对象存储和 块存储不需要该组件)
- Client ceph客户端
实验准备
问题
准备四台KVM虚拟机,其三台作为存储集群节点, 一台安装为客户端,实现如下功能:
- 创建1台客户端虚拟机
- 创建3台存储集群虚拟机
- 配置主机名、IP地址、YUM源
- 修改所有主机的主机名
- 配置无密码SSH连接
– 配置NTP时间同步 - 创建虚拟机磁盘
实验拓扑图
步骤
1)物理机为所有节点配置yum源服务器。所有主机都要做!!!
提示:前提ceph.iso已经挂载好才可以进行下一步!!
[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo
[MON]
name=mon
baseurl=file:///media/MON
gpgcheck=0
[OSD]
name=osd
baseurl=file:///media/OSD
gpgcheck=0
[Tools]
name=tools
baseurl=file:///media/Tools
gpgcheck=0
[root@node1 ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识 源名称 状态
!MON mon 41
!OSD osd 28
!Tools tools 33
!centos centos 9,911
repolist: 10,013
- SSH免密登录,配置无密码连接(包括自己远程自己也不需要密码),在node1操作。
[root@node1 ~]# ssh-keygen #一路回车
[root@node1 ~]# for i in 10 11 12 13
> do
> ssh-copy-id 192.168.4.$i
> done
#############################################################
测试:
[root@node1 ~]# ssh 192.168.4.10
Last login: Thu Feb 6 00:17:09 2020 from 192.168.4.1
[root@client ~]# exit
登出
Connection to 192.168.4.10 closed.
[root@node1 ~]# ssh 192.168.4.12
Last login: Wed Feb 5 23:21:36 2020 from 192.168.4.1
[root@node2 ~]# exit
登出
Connection to 192.168.4.12 closed.
[root@node1 ~]# ssh 192.168.4.13
Last login: Wed Feb 5 23:25:45 2020 from 192.168.4.1
[root@node3 ~]# exit
登出
Connection to 192.168.4.13 closed.
[root@node1 ~]# ssh 192.168.4.11
Last login: Thu Feb 6 00:18:12 2020 from 192.168.4.1
[root@node1 ~]# exit
登出
Connection to 192.168.4.11 closed.
确保每台计算机远程都不需要密码
3)修改/etc/hosts并同步到所有主机。
警告:/etc/hosts解析的域名必须与本机主机名一致!!!!
[root@node1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
[root@node1 ~]# for i in client node2 node3
> do
> scp /etc/hosts $i:/etc
> done
###########################################################
测试:此时,每台计算机的hosts解析中都有client,node1,node2,node3
[root@node2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
4)配置NTP时间同步(client做时间服务器,所有node节点与client时间同步)
[root@client ~]# vim /etc/chrony.conf26 allow 192.168.4.0/1629 local stratum 10
[root@client ~]# systemctl restart chronyd
[root@client ~]# firewall-cmd --set-default-zone=trusted
success
[root@client ~]# vim /etc/sysconfig/selinux
7 SELINUX=permissive
[root@client ~]# setenforce 0所有node节点与client同步时间
[root@node1 ~]# vim /etc/chrony.conf3 server 192.168.4.10 iburst
[root@node1 ~]# for i in node1 node2 node3
> do
> scp /etc/chrony.conf $i:/etc
> ssh $i "systemctl restart chronyd"
> done
chrony.conf 100% 991 1.1MB/s 00:00
chrony.conf 100% 991 1.1MB/s 00:00
chrony.conf 100% 991 962.8KB/s
[root@node1 ~]# chronyc sources -V #快速测试时间同步,*表示已经同步
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* client 10 10 377 609 -12us[ -18us] +/- 150us
5)打开VMware,给除了client的每台虚拟机添加两块磁盘(20G)
一路下一步,最后呈现的效果如下:
添加完后,重启虚拟机,使用lsblk查看是否添加成功
部署ceph集群
问题
部署Ceph集群服务器,实现以下目标:
- 安装部署工具ceph-deploy
- 创建ceph集群
- 准备日志磁盘分区
- 创建OSD存储空间
- 查看ceph状态,验证
步骤
- 步骤一:安装部署软件ceph-deploy
1)在node1安装部署工具,学习工具的语法格式。
[root@node1 ~]# yum -y install ceph-deploy #一定要在有ssh密钥的主机上安装
[root@node1 ~]# mkdir ceph-cluster #但凡执行ceph-cluster脚本,必须在该目录下,否则会出错
[root@node1 ~]# cd ceph-cluster
- 步骤二:部署Ceph集群
1)给所有节点安装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
部署mon集群,一定要确保 在ceph-cluster目录下!!!
首先关闭所有节点的防火墙和selinux
[root@node1 ceph-cluster]# firewall-cmd --set-default-zone=trusted
success
[root@node1 ceph-cluster]# vim /etc/sysconfig/selinux
7 SELINUX=permissive
[root@node1 ceph-cluster]# setenforce 0
############################################################
[root@node1 ceph-cluster]# pwd
/root/ceph-cluster
2)创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。
在ceph.conf配置文件中定义monitor主机是谁。
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3#测试所有node节点的状态,创建了ceph的配置文件ceph.conf(在当前目录下)
[root@node1 ceph-cluster]# ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
###################################
[root@node1 ceph-cluster]# ls /etc/ceph/
rbdmap
#/etc/ceph目录是启动ceph需要读取配置文件的地方
3)初始化所有节点的mon服务,也就是启动mon服务(主机名解析必须对)。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#把当前目录下的ceph配置文件远程拷贝到目标主机(node1 node2 node3)放到/etc/ceph目录,并且启动ceph-mon服务(服务名为ceph-mon@主机名)
#############################################################
查看状态:
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
#确认mon服务是否已经启动
[root@node1 ceph-cluster]# ceph -scluster 3b2ca6aa-8018-42c4-8bfe-05902cd313ddhealth HEALTH_ERR64 pgs are stuck inactive for more than 300 seconds64 pgs stuck inactiveno osdsmonmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0} #6789为起完服务后monitior的端口号election epoch 8, quorum 0,1,2 node1,node2,node3osdmap e1: 0 osds: 0 up, 0 inflags sortbitwisepgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects0 kB used, 0 kB / 0 kB avail64 creating
常见错误及解决方法(非必要操作,有错误可以参考):
如果提示如下错误信息:
[node1][ERROR ] admin_socket: exception getting command descriptions: [Error 2] No such file or directory
解决方案如下(在node1操作):
先检查自己的命令是否是在ceph-cluster目录下执行的!!!!如果确认是在该目录下执行的create-initial命令,依然报错,可以使用如下方式修复。
[root@node1 ceph-cluster]# vim ceph.conf #文件最后追加以下内容
public_network = 192.168.4.0/24
修改后重新推送配置文件:
[root@node1 ceph-cluster]# ceph-deploy --overwrite-conf config push node1 node2 node3
- 步骤三:创建OSD
每台虚拟机都添加了 两块磁盘(/dev/sdb、/dev/sdc)
sdb用来做缓存盘,sdc做数据盘
读写操作 缓存 数据
client<——–>ceph集群[sdb]<——–>[sdc] 硬盘分为传统磁盘和固态盘
传统磁盘:性能较低,容量大
固态盘(SSD):容量很小,性能很好 可以使用固态盘做缓存盘,磁盘做数据盘
假设每个磁盘是20G,最终我们的ceph集群提供60G的容量(不考虑冗余备份)
node1 [sdb]+[sdc]=20G #sdb为缓存盘,只能临时读写数据,不能算作容量内
node2 [sdb]+[sdc]=20G
node3 [sdb]+[sdc]=20G
1)把所有磁盘初始化(格式化,仅在node1操作)
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 284M 0 rom /media
sr1 11:1 1 8.8G 0 rom /mnt
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc #相当于远程加for循环,写几个参数就循环几次
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:sdb node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:sdb node3:sdc
########################################################
也可以直接一次性初始化
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc node2:sdb node2:sdc node3:sdb node3:sdc
2)启动OSD服务,共享这些磁盘
[root@node1 ceph-cluster]# ceph-deploy osd create node1:sdc:/dev/sdb
//远程node1启动osd服务,把/dev/sdc共享给用户,/dev/sdb做为缓存盘
并且把sdc挂载到了/var/lib/ceph/xxx目录
[root@node1 ceph-cluster]# ceph-deploy osd create node2:sdc:/dev/sdb
[root@node1 ceph-cluster]# ceph-deploy osd create node3:sdc:/dev/sdb
#########################################################
也可以一次性远程多台主机
[root@node1 ceph-cluster]# ceph-deploy osd create node1:sdc:/dev/sdb node2:sdc:/dev/sdb node3:sdc:/dev/sdb
- 常见错误及解决方法(非必须操作)。
使用osd create创建OSD存储空间时,如提示下面的错误提示:
[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run 'gatherkeys'
可以使用如下命令修复文件,重新配置ceph的密钥文件:
[root@node1 ceph-cluster]# ceph-deploy gatherkeys node1 node2 node3
3)验证测试,检查集群状态:
[root@node1 ceph-cluster]# ceph -scluster 3b2ca6aa-8018-42c4-8bfe-05902cd313ddhealth HEALTH_OKmonmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}election epoch 14, quorum 0,1,2 node1,node2,node3osdmap e14: 3 osds: 3 up, 3 inflags sortbitwisepgmap v28: 64 pgs, 1 pools, 0 bytes data, 0 objects100 MB used, 61306 MB / 61406 MB avail64 active+clean
此时可以看到,有三个osd,容量为60G,状态为OK
验证是否挂载成功
[root@node1 ceph-cluster]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1.4G 16G 8% /
devtmpfs 224M 0 224M 0% /dev
tmpfs 236M 0 236M 0% /dev/shm
tmpfs 236M 5.6M 230M 3% /run
tmpfs 236M 0 236M 0% /sys/fs/cgroup
/dev/sr0 284M 284M 0 100% /media
/dev/sr1 8.8G 8.8G 0 100% /mnt
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 48M 0 48M 0% /run/user/0
/dev/sdc1 20G 34M 20G 1% /var/lib/ceph/osd/ceph-0
可以看到/dev/sdc已经挂载到ceph集群中了
[root@node1 ceph-cluster]# systemctl status ceph-osd@0.service #服务已经成功启动,OSD的服务名称ceph-osd@数字(可以在@后tab)
● ceph-osd@0.service - Ceph object storage daemonLoaded: loaded (/usr/lib/systemd/system/ceph-osd@.service; enabled; vendor preset: disabled)Active: active (running) since 四 2020-02-06 18:49:43 CST; 40min agoMain PID: 1973 (ceph-osd)
[root@node1 ceph-cluster]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.05846 root default
-2 0.01949 host node1 0 0.01949 osd.0 up 1.00000 1.00000
-3 0.01949 host node2 1 0.01949 osd.1 up 1.00000 1.00000
-4 0.01949 host node3 2 0.01949 osd.2 up 1.00000 1.00000
2)常见错误(非必须操作)。
如果查看状态包含如下信息:
health: HEALTH_WARNclock skew detected on node2, node3…
clock skew表示时间不同步,解决办法:请先将所有主机的时间都使用NTP时间同步!!!
Ceph要求所有主机时差不能超过0.05s,否则就会提示WARN。
如果状态还是失败,可以尝试执行如下命令,重启ceph服务:
[root@node1 ~]# systemctl restart ceph\*.service ceph\*.target
Ceph块存储
- 单机块设备
1.光盘
2.磁盘 - 分布式块存储
1.ceph
2.cinder
什么是块存储
- ceph块设备也叫做RADOS块设备 RADOS block device : RBD
- RBD驱动已经很好地集成在了linux内核中
- RBD提供了企业功能,如快照,COW克隆等
- RBD还支持内存缓存,从而能够大大的提高性能
- Linux内核可以直接访问ceph块存储
- KVM可用于j借助于librbd访问
创建Ceph块存储
问题
使用Ceph集群的块存储功能,实现以下目标:
-
创建块存储镜像
-
客户端映射镜像
-
创建镜像快照
-
使用快照还原数据
-
使用快照克隆镜像
-
删除快照与镜像
步骤 -
步骤一:创建镜像
1)查看存储池。
[root@node1 ~]# ceph osd lspools
0 rbd,
2)创建镜像、查看镜像
[root@node1 ~]# rbd create jacob --image-feature layering --size 5G
#这里的jacob为创建的镜像名称,可以为任意字符。
#–image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW(写实复制)功能。
#提示:ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。
[root@node1 ~]# rbd list #列出所有共享镜像
jacob
[root@node1 ~]# rbd info jacob #列出某个镜像的详细信息
rbd image 'jacob':size 5120 MB in 1280 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:
- 步骤二:动态调整
1)扩容容量
[root@node1 ~]# rbd resize --size 15G jacob
Resizing image: 100% complete...done.
[root@node1 ~]# rbd info jacob
rbd image 'jacob':size 15360 MB in 3840 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:
2)缩减容量
[root@node1 ~]# rbd resize --size 10G jacob
rbd: shrinking an image is only allowed with the --allow-shrink flag
#此时缩减容量会报错,如果确认要缩减,添加--allow-shrink选项
[root@node1 ~]# rbd resize --size 10G jacob --allow-shrink
Resizing image: 100% complete...done.
[root@node1 ~]# rbd info jacob
rbd image 'jacob':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:
客户端访问共享(client做客户端主机)
首先确保客户端的yum源已经加载
[root@client ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识 源名称 状态
MON mon 41
OSD osd 28
Tools tools 33
centos centos 9,911
repolist: 10,013
[root@client ~]# yum -y install ceph-common.x86_64
#客户端需要安装ceph-common软件包
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph
#拷贝配置文件,配置文件中记录的有ceph集群服务器的IP信息
[root@client ~]# scp node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph #拷贝访问集群的密钥文件,有了密钥才有权限访问集群
[root@client ~]# lsblk 查看磁盘分布情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 284M 0 rom /media
sr1 11:1 1 8.8G 0 rom /mnt
[root@client ~]# rbd map jacob #客户端连接jacob镜像
/dev/rbd0
[root@client ~]# lsblk #再次查看 ,此时磁盘中多了一个rbd0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 284M 0 rom /media
sr1 11:1 1 8.8G 0 rom /mnt
rbd0 252:0 0 10G 0 disk
- 步骤三:客户端进行快照还原数据的实验:
快照:写数据;快照;模拟人为的误操作;还原快照
副本:写数据,可以自动备份3份;删数据时,删除3份,主要用来解决单点故障的问题
1)格式化,挂载,写数据
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0 /data
[root@client ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1.2G 16G 8% /
devtmpfs 224M 0 224M 0% /dev
tmpfs 236M 0 236M 0% /dev/shm
tmpfs 236M 5.6M 230M 3% /run
tmpfs 236M 0 236M 0% /sys/fs/cgroup
/dev/sr0 284M 284M 0 100% /media
/dev/sda1 1014M 142M 873M 14% /boot
/dev/sr1 8.8G 8.8G 0 100% /mnt
tmpfs 48M 0 48M 0% /run/user/0
/dev/rbd0 10G 33M 10G 1% /data
[root@client ~]# echo "abc hello world" > /data/test.txt
- 步骤四:回到node集群,创建快照
[root@node1 ~]# rbd snap ls jacob #默认该镜像没有快照
[root@node1~]# rbd snap create jacob --snap jacob-snap1
#给jacob镜像创建快照,快照名为jacob-snap1
[root@node1 ~]# rbd snap ls jacob
SNAPID NAME SIZE 4 jacob-snap1 10240 MB
到client模拟数据被误操作删除(ceph不支持在线还原快照)
[root@client ~]# ls /data
test.txt
[root@client ~]# rm -rf /data/test.txt
[root@client ~]# umount /data
[root@client ~]# ls /data
到node集群还原快照
[root@node1 ~]# rbd snap rollback jacob --snap jacob-snap1
Rolling back to snapshot: 100% complete...done.
客户端再次挂载访问共享
[root@client ~]# mount /dev/rbd0 /data
[root@client ~]# ls /data
test.txt
[root@client ~]# cat /data/test.txt
abc hello world
- 步骤五:创建块照克隆
- 使用快照克隆一个新的镜像盘image
jacob——–3G数据(快照)———>创建新的共享
创建一个新的共享
1)保护快照(防止快照被误删除)
[root@node1 ~]# rbd snap protect jacob --snap jacob-snap1 #保护快照
[root@node1 ~]# rbd snap rm jacob --snap jacob-snap1 #删除快照,此时无法删除,因为做了快照保护
rbd: snapshot 'jacob-snap1' is protected from removal.
2020-02-06 21:56:47.950350 7f10f5b44d80 -1 librbd::Operations: snapshot is protected
2)克隆快照
[root@node1 ~]# rbd clone jacob --snap jacob-snap1 jacob-clone --image-feature layering
#使用现有jacob镜像盘的jacob-snap1这个快照,克隆一个新的共享镜像盘,名称为jacob-clone
[root@node1 ~]# rbd ls
jacob
jacob-clone
3)查看克隆镜像与父镜像快照之间的关系
[root@node1 ~]# rbd info jacob
rbd image 'jacob':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:
[root@node1 ~]# rbd info jacob-clone
rbd image 'jacob-clone':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3e2ae8944aformat: 2features: layeringflags: parent: rbd/jacob@jacob-snap1 #克隆镜像此时显示有父镜像overlap: 10240 MB
#克隆镜像很多数据都来自于快照链
#如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
[root@node1 ~]# rbd flatten jacob-clone
Image flatten: 100% complete...done.
[root@node1 ~]# rbd info jacob-clone
rbd image 'jacob-clone':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3e2ae8944aformat: 2features: layeringflags: #此时父快照的信息不见了!
[root@node1 ~]# rbd snap unprotect jacob --snap jacob-snap1
#取消快照保护
[root@node1 ~]# rbd snap rm jacob --snap jacob-snap1
#删除快照,此时快照就可以被删除
客户端取消对ceph的挂载实验
[root@client ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1.2G 16G 8% /
devtmpfs 224M 0 224M 0% /dev
tmpfs 236M 0 236M 0% /dev/shm
tmpfs 236M 5.6M 230M 3% /run
tmpfs 236M 0 236M 0% /sys/fs/cgroup
/dev/sr0 284M 284M 0 100% /media
/dev/sda1 1014M 142M 873M 14% /boot
/dev/sr1 8.8G 8.8G 0 100% /mnt
tmpfs 48M 0 48M 0% /run/user/0
/dev/rbd0 10G 33M 10G 1% /data
[root@client ~]# umount /data #卸载
[root@client ~]# lsblk #查看,此时,rbd0依然存在
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 284M 0 rom /media
sr1 11:1 1 8.8G 0 rom /mnt
rbd0 252:0 0 10G 0 disk
[root@client ~]# rbd showmapped
id pool image snap device
0 rbd jacob - /dev/rbd0
[root@client ~]# rbd unmap /dev/rbd0 #也可以写rbd unmap jacob
[root@client ~]# lsblk #此时,rbd0不存在了
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 284M 0 rom /media
sr1 11:1 1 8.8G 0 rom /mnt
[root@client ~]# rbd map jacob-clone
/dev/rbd0
[root@client ~]# mount /dev/rbd0 /data
[root@client ~]# ls /data
test.txt
[root@client ~]# umount /data
[root@client ~]# rbd unmap /dev/rbd0
Ceph文件系统存储
什么是CephFS
- 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
- CephFS使用Ceph集群提供与POSIX兼容的文件系统
- 允许 Linux直接将Ceph存储mount到本地
什么是元数据
- 元数据(Metadata)
- 任何文件系统中的数据分为数据和元数据
- 数据是指普通文件中的实际数据
- 而元数据指用来描述一个文件特征的系统数据
- 比如:访问权限、文件拥有者以及文件数据块的分布信息(inode…)等
- 所以CephFS必须要有MDSs节点
ceph集群支持块共享,文件系统共享,对象存储共享
块共享(同一时间仅可以同一个客户端访问)iscsi服务 server[挂载]格式化 mount 写数据10个文件
desktop 挂载 mount 写10个文件
server 再次访问 看到20个文件
文件系统共享
NFS(/common)
desktop (mount) 写数据,读数据
node1 (mount) 写数据,读数据
Ceph 集群支持块共享、文件系统共享、对象存储共享 块共享(同一时间仅可以一个客户端访问) 块(没有格式化) 文件系统(格式化,NFS,fat32,ext4,xfs文件系统) 硬盘没有格式化,就相当于一幢空的大厦
假设一块硬盘此时有100G,将硬盘分为inode区域和block两个区域 inode block
2G 98G 再将inode区域的空间划分为每块256字节,block区域空间划分为每块4k的字节
写数据时,数据会被写入到block中(4M的文件,会占用多个block)
block中存数据,inode中存储元数据(metadata)【元数据是数据的数据,描述数据的数据,比如一个文件,有文件名,时间,权限,大小…类似于描述信息,同时还记录文件数据的地址】
Ceph文件系统实验
问题
实现Ceph文件系统的功能。具体实现有以下功能:
- 部署MDSs节点
- 创建Ceph文件系统
- 客户端挂载文件系统
方案
使用现有的虚拟机进行操作
步骤 - 1).ceph提供文件系统共享的实验:(使用node3做ceph-mds服务,操作指令在node1执行)
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3
#######################################################################
此时:
【node1】/root/ceph-cluster/ceph.conf
【node3】/etc/ceph/ceph.conf
文件内容要一毛一样![root@node1 ceph-cluster]# cat ceph.conf
[global]
fsid = 3b2ca6aa-8018-42c4-8bfe-05902cd313dd
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.11,192.168.4.12,192.168.4.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[root@node3 ~]# cat /etc/ceph/ceph.conf
[global]
fsid = 3b2ca6aa-8018-42c4-8bfe-05902cd313dd
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.11,192.168.4.12,192.168.4.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephxconfig file /etc/ceph/ceph.conf exist with different content
有文件,但内容不一致,可以加--overwrite-conf选项在node3查看,此时ceph-mds服务已经启动
[root@node3 ~]# systemctl status ceph-mds@node3.service
● ceph-mds@node3.service - Ceph metadata server daemonLoaded: loaded (/usr/lib/systemd/system/ceph-mds@.service; enabled; vendor preset: disabled)Active: active (running) since 五 2020-02-07 18:13:49 CST; 9min ago
- 2).创建存储池
[root@node1 ~]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
#创建存储池,对应128个PG
[root@node1 ceph-cluster]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created
#创建存储池,对应128个PG
#cephfs_metadata做inode ,cephfs_data做block
[root@node1 ceph-cluster]# ceph osd lspools #查看
0 rbd,1 cephfs_data,2 cephfs_metadata,
- 3)创建文件系统
[root@node1 ceph-cluster]# ceph fs new myfs1 cephfs_metadata cephfs_data
#创建一个文件系统,这个文件系统由inode和block组成,cephfs_metadata做inode,存元数据,cephfs_data做block,存数据,文件系统名称是myfs1
[root@node1 ceph-cluster]# ceph fs ls #查看文件系统
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
4)客户端mount访问
[root@client ~]# mkdir /cephfs
[root@node1 ceph-cluster]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]key = AQCb/TpeWGpVJBAALIlg4tgvgDTbr+Poza3xCw==
#查看 /etc/ceph/ceph.client.admin.keyring找用户名和密码
[root@client ~]# mount -t ceph 192.168.4.11:6789:/ /cephfs -o name=admin,secret=AQCb/TpeWGpVJBAALIlg4tgvgDTbr+Poza3xCw==
#客户端mount访问共享,-t访问的服务类型是ceph(nfs,cifs),服务IP是192.168.4.11,端口号是6789,ceph仅支持一个文件系统共享,只能写访问/,把共享挂载到/cephfs目录,name指定用户名,secret指定密码(因为ceph集群需要验证用户和密码才可以访问)
[root@node1 ceph-cluster]# ceph -scluster 3b2ca6aa-8018-42c4-8bfe-05902cd313ddhealth HEALTH_WARNtoo many PGs per OSD (320 > max 300)monmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}election epoch 18, quorum 0,1,2 node1,node2,node3fsmap e5: 1/1/1 up {0=node3=up:active}osdmap e31: 3 osds: 3 up, 3 inflags sortbitwisepgmap v830: 320 pgs, 3 pools, 84386 kB data, 2606 objects362 MB used, 61044 MB / 61406 MB avail320 active+clean
Ceph对象存储
- 对象存储:
- 基于kv的存储,通过API接口访问,对象存储中所有的数据都被认为是一个对象。基于对象的存储就是对象存储
- 也就是键值存储,通其接口指令,也就是简单的GET、PUT、DEL和其他扩展,向存储服务上传或下载数据
- 对象存储中所有数据都被认为是一个对象,所以,任何数据都可以存入对象服务器,如图片,视频,音频等
- RGW全称是Rados Gateway
- RGW是ceph对象存储网关,用于向客户端应用呈现存储页面,提供RESTful API访问接口
运维:部署集群,维护集群,故障排错
开发:写程序,基于程序中的指令连接ceph服务器,上传下载数据
百度云盘就属于对象存储(不能直接mount,不是在客户端多一个磁盘)
百度云盘,客户端需要下载他的客户端软件(网页也是软件)
Ceph对象存储实验
步骤
- 1)登录node1使用ceph-deploy运城启动RGW服务(radosgw)
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy rgw create node3
...
[ceph_deploy.rgw][INFO ] The Ceph Object Gateway (RGW) is now running on host node3 and default port 7480
#起完服务后默认端口7480
[root@node3 ~]# systemctl status ceph-radosgw@rgw.node3.service #查看服务是否已经启动
● ceph-radosgw@rgw.node3.service - Ceph rados gatewayLoaded: loaded (/usr/lib/systemd/system/ceph-radosgw@.service; enabled; vendor preset: disabled)Active: active (running) since 五 2020-02-07 19:46:54 CST; 7min ago
[root@node3 ~]# ss -nutlp | grep 7480 #也可以查看端口号
tcp LISTEN 0 128 *:7480 *:* users:(("radosgw",pid=2120,fd=27))
- 2)可以修改配置文件,修改服务的端口(非必须操作)【在node3操作】
[root@node3 ~]# vim /etc/ceph/ceph.conf
手动输入三行
[client.rgw.node3]
host=node3
rgw_frontends="civetweb port=8000"
[root@node3 ~]# systemctl restart ceph-radosgw@rgw.node3.service
[root@node3 ~]# ss -nutlp | grep radosgw
tcp LISTEN 0 128 *:8000 *:* users:(("radosgw",pid=2556,fd=27))