分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过看i算计网络与节点相连。
分布式文件系统的设计基于客户机/服务器模式
常用分布式文件系统
Lustre , Hadoop ,
FsatDFS , Ceph , GlusterFS
Ceph组件
OSDs:存储设备
Monitors:集群监控组件
MDSs:存放文件系统的元数据(对象存储和块存储不需要该组件)
Client:ceph客户端
环境准备
client客户端:192.168.4.50
3台存储虚拟机:192.168.4.51(即是存储机也是管理机)
192.168.4.52 192.168.4.53
修改主机名,并且每台主机名映射都配写入
/etc/hosts 里面
192.168.4.50
client
192.168.4.51
node1
192.168.4.51
node2
192.168.4.51
node3
生成密钥,发布密钥到各个主机
[root@node1~]# ssh-keygen
[root@node1~]#for i
in 50 51 52 53
do
ssh-copy-id 192.168.4.$i
done
NTP时间同步
客户端创建NTP服务器
[root@client~]# yum -y install
chrony
[root@client~]# cat
/etc/chrony.conf
server 0.centos.pool.ntp.org
iburst
allow 192.168.4.0/24
local stratum 10
[root@client~]#systemctl
restart chronyd (并设开机自启动enable)
#其他三台与其同步时间 server 192.168.4.50 iburst
3台做存储的物理机添加3块10G磁盘,分别是 vdb vdc vdd
使用node1作为部署主机
[root@node1~]# yum -y install ceph-deploy
#ceph-deploy --help 可以看帮助
1.为部署工具创建目录,存放密钥与配置文件
[root@node1~]# mkdir
ceph-cluster //创建共享目录
[root@node1~]# cd ceph-cluster/
//cd进去不然下一步会报错
创建ceph集群配置(所有节点都为mon)
[root@node1
ceph-cluster]# ceph-deploy new node1 node2 node3
[root@node1 ceph-cluster]# ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
[root@node1 ceph-cluster]#
ceph-deploy install node1 node2 node3
[root@node1 ceph-cluster]#
ceph-deploy mon create-initial
创建OSD
创建日志盘(使用vdb做日志盘,分别在node1 node2 node3 主机上执行如下命令 )
parted /dev/vdb
mklabel gpt
//使用gpt模式分区
parted /dev/vdb
mkpart primary 1M 50% //各分一半
parted /dev/vdb
mkpart primary 50% 100%
]# chown ceph:ceph /dev/vdb*
]# echo “chown
ceph.ceph /dev/vdb*” >> /etc/rc.local
]# chmod +x /etc/rc.d/rc.local
//设置属主属组为ceph ,设为开机启动命令,否则重启后会失效
在管理主机node1初始化存储盘 vdc 和 vdd
node1]# cd /root/ceph-cluster/
node1]# ceph-deploy disk
zap node1:vdc node1:vdd
node1]# ceph-deploy disk
zap node2:vdc node2:vdd
node1]# ceph-deploy disk
zap node3:vdc node3:vdd
在管理主机node1上,创建osd设备
node1]#
ceph-deploy osd create
node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
//创建一个储存设备,vdc,vdb为集群提供储存空间,vdb1提供JOURNAL日志,一个存储设备对应一个日志设备,日志需要SSD硬盘,不需要很大
node1]#
ceph-deploy osd create
node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
node1]#
ceph-deploy osd create
node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
3查看集群状态
[root@node1 ~]# ceph -s
cluster
ad2bf018-8b58-4289-97db-406a365a9289
health
HEALTH_OK
monmap
e1: 3 mons at
{node1=192.168.4.51:6789/0,node2=192.168.4.52:6789/0,node3=192.168.4.53:6789/0}
election epoch 6, quorum 0,1,2 node1,node2,node3
osdmap
e33: 6 osds: 6 up, 6 in
flags sortbitwise
pgmap v82: 64 pgs, 1 pools, 0 bytes data, 0 objects
202 MB used, 61171 MB / 61373 MB avail
64 active+clean
[root@node1 ~]#
查看相关服务的状态信息:
node1]# systemctl status
ceph*.service ceph*.target
查看工作目录下的文件列表
[root@node1 ~]# ls
/root/ceph-cluster/
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.conf
ceph.mon.keyring
ceph.bootstrap-osd.keyring
ceph.client.admin.keyring ceph-deploy-ceph.lo
==================================================================
Ceph块设备也叫做RADOS块设备—RADOS block device:RDB
RBD驱动已经很好的集成在linux内核中了
RBD提供了企业功能,如快照,COW克隆等
RBD还支持内存缓存,从而能够大大提高性能
部署ceph块存储集群
[root@node1 ~]# ceph osd
lspools 查看已有的存储池,默认存在的
0 rbd,
[root@node1 ~]# rbd list 查看存储池里的镜像列表,还没创建so 为空
创建新镜像
[root@node1 ~]# rbd create
domo-image --image-feature layering --size 10G
//domo-image是镜像名
[root@node1 ~]# rbd create
rbd/image --image-feature layering --size 15G
//也可以镜像名前面定义资源池名为rbd的池,不加默认为rbd池
[root@node1 ~]# rbd list
domo-image
image
[root@node1 ~]# rbd info
domo-image
rbd image ‘domo-image’:
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.1052238e1f29
format: 2
features: layering
flags:
查看镜像大小
[root@node1 ~]# rbd info
image
rbd image ‘image’:
size 15360 MB in 3840 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10662ae8944a
format: 2
features: layering
flags:
调整镜像大小:
把image容量的缩小到1G
[root@node1 ~]# rbd resize --size
1G image --allow-shrink
Resizing image: 100%
complete…done.
[root@node1 ~]#
[root@node1 ~]# rbd info image
rbd image ‘image’:
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10662ae8944a
format: 2
features: layering
flags:
//缩小需要加 --allow-shrink
把image容量的扩大到4G
[root@node1 ~]# rbd resize --size
4G image
Resizing image: 100%
complete…done.
[root@node1 ~]# rbd info image
rbd image ‘image’:
size 4096 MB in 1024 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10662ae8944a
format: 2
features: layering
flags:
=====================================================
在存储服务器本机使用镜像存储文件的步骤:
[root@node1 ~]# rbd list
domo-image
image
[root@node1 ~]# rbd map
domo-image //把镜像映射到本机
/dev/rbd0
[root@node1 ~]# ls /dev/rbd0
// 会多个rbd0
/dev/rbd0
[root@node1 ~]# mkdir
/notedir //创建挂载目录
[root@node1 ~]# mkfs.ext4
/dev/rbd0 //格式化
[root@node1 ~]# blkid
/dev/rbd0 // 查看格式化信息
/dev/rbd0:
UUID=“c4b13e97-49ac-407c-8045-477a91fe6550” TYPE=“ext4”
[root@node1 ~]# mount /dev/rbd0
/notedir/ //挂载
[root@node1 ~]# echo
123 > /notedir/test.txt //存储一个文件,确认可用
[root@node1 ~]# cat
/notedir/test.txt
123
客户端通过KRBD访问
配置:在客户端50主机client,
使用ceph镜像存储文件的配置步骤:
1 安装软件包
【root@client ~]# yum -y install
ceph-common
[root@client ~]# ls /etc/ceph/
//会出现drbdmap文件
rbdmap
2 从管理主机上拷贝集群配置文件
[root@client ~]# scp
192.168.4.51:/etc/ceph/ceph.conf /etc/ceph/
root@192.168.4.51’s password:
ceph.conf
100% 235 441.4KB/s 00:00
[root@client ~]# ls /etc/ceph/
ceph.conf rbdmap
3 从管理主机上拷贝连接集群密钥文件
[root@client ~]# scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring
/etc/ceph/
[root@client ~]# ls /etc/ceph/
ceph.client.admin.keyring
ceph.conf rbdmap
[root@client ~]# rbd list
//查看ceph集群镜像列表
domo-image
image
[root@client ~]# rbd map image
//把镜像文件映射到本机
/dev/rbd0
[root@client ~]# ls /dev/rbd0
/dev/rbd0
[root@client ~]# mkdir /studayup
//创建文件夹,挂载用
[root@client ~]# mkfs.ext4 /dev/rbd0
//格式化
[root@client ~]# blkid
/dev/rbd0
/dev/rbd0:
UUID=“f4edce49-4dae-4a5e-a63d-fe55a30ac158” TYPE=“ext4”
[root@client ~]# mount /dev/rbd0
/studayup/ //挂载
[root@client ~]# echo
123456 > /studayup/test2.txt
[root@client ~]# cat
/studayup/test2.txt
123456
====================================================
在管理主机上给被挂载的镜像创建快照 (COW技术 Copy Online
Write)
[root@node1 ~]# rbd list 查看已有的镜像
domo-image
image
[root@node1 ~]# rbd snap ls image
//查看image镜像是否有快照
给image镜像创建快照 名称叫 image-snap1
[root@node1 ~]# rbd snap create
image --snap image-snap1
[root@node1 ~]# rbd snap ls image
// 再次查看
SNAPID
NAME SIZE
4
image-snap1 4096 MB
使用快照恢复 如果误删除了文件,可以恢复
[root@client ~]# cat
/studayup/test2.txt
123456
[root@client ~]# rm -rf
/studayup/test2.txt
[root@client ~]# cat
/studayup/test2.txt
cat: /studayup/test2.txt:
//内容被删了
在管理主机上使用快照恢复误删除的文件
[root@node1 ~]# rbd snap rollback
image --snap image-snap1
Rolling back to snapshot: 100%
complete…done.
客户端卸载当前挂载的image镜像 后 再次挂载image 就可看到恢复的文件
[root@client ~]# cat
/studayup/test2.txt
cat: /studayup/test2.txt:
[root@client ~]# umount
/studayup/
[root@client ~]# mount /dev/rbd0
/studayup/
[root@client ~]# ls /studayup/
lost+found test2.txt
[root@client ~]# cat
/studayup/test2.txt
123456
======================================================
快照克隆:(在管理主机上操作)
对快照文件写保护
[root@node1 ~]# rbd snap protect
image --snap image-snap1
对image镜像的快照image-snap1
做克隆 名称叫image-clone
[root@node1 ~]# rbd clone image
–snap image-snap1 image-clone --image-feature
layering
[root@node1 ~]# rbd info image-clone1
//查看克隆文件的信息 若没有报错
rbd: error opening image
image-clone1: (2) No such file or directory
[root@node1 ~]# rbd info
image-clone
//查看克隆文件的信息
rbd image ‘image-clone’:
size 4096 MB in 1024 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10653d1b58ba
format: 2
features: layering
flags:
parent: rbd/image@image-snap1
// 显示克隆文件对应的镜像信息
overlap: 4096 MB
[root@node1 ~]# rbd info
image-clone
// 恢复前查看
rbd image ‘image-clone’:
size 4096 MB in 1024 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10653d1b58ba
format: 2
features: layering
flags:
parent: rbd/image@image-snap1
overlap: 4096 MB
[root@node1 ~]# rbd flatten
image-clone //使用克隆文件恢复image镜像
Image flatten: 100%
complete…done.
[root@node1 ~]# rbd info
image-clone
//恢复后查看
rbd image ‘image-clone’:
size 4096 MB in 1024 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10653d1b58ba
format: 2
features: layering
// 查看克隆文件的对应的镜像信息 信息没有了
flags:
//否则无法删除原名的image镜像文件
=========================================================
配置 客户端不使用ceph集群的块设备存储数据的步骤:
- 撤销镜像映射 (要先卸载挂载的/dev/rbdx 设备)
[root@client ~]# umount
/studayup/
//取消挂载点
[root@client ~]# rbd showmapped
//查看映射
id pool image snap
device
0 rbd image
- /dev/rbd0
[root@client ~]# rbd unmap
/dev/rbd/rbd/image //取消RBD磁盘映射
[root@client ~]# rbd showmapped
//再次查看
===================================================
在管理主机上删除创建的镜像(如果镜像有快照的话要先删除快照文件)
[root@node1 ~]# rbd snap
unprotect image --snap image-snap1 // 取消保护
[root@node1 ~]# rbd snap rm image
–snap image-snap1 // 删除快照
[root@node1 ~]# rbd list
domo-image
image
image-clone
[root@node1 ~]# rbd rm image
//删除image镜像
Removing image: 100%
complete…done.
[root@node1 ~]# rbd list
domo-image
image-clone