分布式文件系统
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
分布式文件系统的设计基于客户机/服务器模式
…
常用的分布式文件系统
Lustre
Hadoop
FastDFS
Ceph
GlusterFS
什么是Ceph
Ceph是一个分布式文件系统
具有高扩展,高可用,高性能的特点
Ceph可以提供对象存储,块存储,文件系统存储
Ceph可以提供PB级别的存储空间(PB->TB->GB)
软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越受到市场的认可.
Ceph组件
OSDs-存储设备(真实的提供存储空间的硬件设备)
Monitors-集群监控组件(相当于web集群中的调度器,带健康检测功能)
RadosGateway(RGW)-对象存储网关
MDSs-存放文件系统的元数据(对象存储和块存储不需要该组件)
Client-ceph客户端
ceph:OSD三备份,MON过半原则(要求超过一半的服务器是好的)
安装前准备
物理机为所有节点配置yum源服务器
[root@room9pc01 ~]# mkdir /var/ftp/ceph
[root@room9pc01 ~]# mount /linux-soft/02/ceph10.iso /var/ftp/ceph/
配置无密码连接(包括自己远程自己也不需要密码),在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
修改/etc/hosts并同步到所有主机。
echo -e "192.168.4.10 client \n192.168.4.11 node1 \n192.168.4.12 node2 \n192.168.4.13 node3" >> /etc/hosts
[root@node1 ~]# for i in client node1 node2 node3
do
scp /etc/hosts $i:/etc/
done
修改所有节点都需要配置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 ~]# for i in client node1 node2 node3
do
scp /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/
done
所有节点主机与真实主机的NTP服务器同步时间。
[root@node1 ~]# vim /etc/chrony.conf
… …
server 192.168.4.254 iburst
[root@node1 ~]# for i in client node1 node2 node3
do
scp /etc/chrony.conf $i:/etc/
ssh $i "systemctl restart chronyd"
done
准备存储磁盘
物理机上为每个虚拟机准备3块20G磁盘(可以使用命令,也可以使用图形直接添加)
部署ceph集群
安装部署工具ceph-deploy
创建ceph集群
准备日志磁盘分区
创建OSD存储空间
查看ceph状态,验证
1.安装部署软件ceph-deploy
在node1安装部署工具,学习工具的语法格式。
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# ceph-deploy mon --help
创建目录
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster/ #之后的所有操作一定要在这个目录
下进行
2.部署Ceph集群
给所有节点安装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
创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。(在ceph.conf配置文件中定义monitor主机是谁。)
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
初始化所有节点的mon服务,也就是启动mon服务(把当前目录下的conf文件拷贝到/etc/ceph下,同时对三台主机进行此操作,主机名解析必须对)。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
创建OSD
需分区vdb为vdb1 10G 和vdb2 10G 分区作为缓存盘,缓存盘必须用ssd能极大的提升文件传输的效率.
[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
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i "chown ceph.ceph /dev/vdb1"
ssh $i "chown ceph.ceph /dev/vdb2"
done
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
done
初始化清空磁盘数据(仅node1操作即可)。
ceph-deploy disk zap node1:vdc node1:vdd node2:vdc node2:vdd node3:vdc node3:vdd
创建OSD存储空间(仅node1操作即可)
ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2 node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2 node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
创建Ceph块存储
1.创建镜像
查看存储池
ceph osd lspools
创建镜像、查看镜像
[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
2.扩容/缩减
[root@node1 ~]# rbd resize --size 15G jacob #扩容
[root@node1 ~]# rbd resize --size 7G jacob --allow-shrink #缩减
3.通过KRBD访问
[root@client ~]# yum -y install ceph-common
[root@client ~]# rbd map jacob
[root@client ~]# rbd map demo-image
[root@client ~]# rbd showmapped
4.创建镜像快照
查看镜像快照
[root@node1 ~]# rbd snap ls jacob
给镜像创建快照
[root@node1 ~]# rbd snap create jacob --snap jacob-snap1
#为jacob镜像创建快照,快照名称为jacob-snap1
[root@node1 ~]# rbd snap ls jacob
删除客户端写入的测试文件
[root@client ~]# rm -rf /mnt/test.txt
[root@client ~]# 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 jacob --snap jacob-snap1
[root@node1 ~]# rbd snap rm jacob --snap jacob-snap1 //会失败
[root@node1 ~]# rbd clone jacob --snap jacob-snap1 jacob-clone --image-feature layering
查看克隆镜像与父镜像快照的关系
[root@node1 ~]# rbd info jacob-clone
[root@node1 ~]# rbd flatten jacob-clone
[root@node1 ~]# rbd info jacob-clone
[root@node1 ~]# rbd snap unprotect jacob --snap jacob-snap1 #取消快照保护
[root@node1 ~]# rbd snap rm jacob --snap jacob-snap1 #可以删除快照
6.其他操作
[root@client ~]# umount /mnt
[root@client ~]# rbd showmapped
[root@client ~]# rbd unmap /dev/rbd0
块存储应用案例
1.创建磁盘镜像
[root@node1 ~]# rbd create vm1-image --image-feature layering --size 10G
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info vm1-image
2.Ceph认证账户(仅查看即可)
[root@node1 ~]# cat /etc/ceph/ceph.conf //配置文件
[global]
mon_initial_members = node1, node2, node3
mon_host = 192.168.2.10,192.168.2.20,192.168.2.30
auth_cluster_required = cephx //开启认证
auth_service_required = cephx //开启认证
auth_client_required = cephx //开启认证
[root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring //账户文件
[client.admin]
key = AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==
3.创建KVM虚拟机
创建2台的KVM虚拟机,或者直接使用现有的虚拟机也可以。
4.配置libvirt secret(注意:这里使用真实机操作!!!)。
[root@room9pc01 ~]# vim secret.xml #新建临时文件,内容如下
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.admin secret</name>
</usage>
</secret>
#使用XML配置文件创建secret
[root@room9pc01 ~]# virsh secret-define secret.xml
#命令会生成随机的UUID,这个UUID对应的有账户信息
[root@room9pc01 ~]# virsh secret-list #查看Secret信息
给secret绑定admin账户的密码,密码参考ceph.client.admin.keyring文件。
[root@room9pc01] virsh secret-set-value --secret 733f0fd1-e3d6-4c25-a69f-6681fc19802b --base64 AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg
#这里secret后面是前一步secret-fine创建的UUID
#base64后面是client.admin账户的密码
5.虚拟机的XML配置文件。
[root@room9pc01] virsh edit client //client为虚拟机名称
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
<auth username='admin'>
<secret type='ceph' uuid='733f0fd1-e3d6-4c25-a69f-6681fc19802b'/>
</auth>
<source protocol='rbd' name='rbd/vm1-image'> <host name='192.168.4.11' port='6789'/> </source>
<target dev='vdb' bus='virtio'/>
</disk>
PS:修改secret的UUID,修改source中的共享名name,修改dev设备名称。
Ceph文件系统
开启服务
[root@node1 ceph-cluster]# ceph-deploy mds create node3
创建存储池
[root@node3 ~]# ceph osd pool create cephfs_data 128
[root@node3 ~]# ceph osd pool create cephfs_metadata 128
创建Ceph文件系统(最多只能创建一个共享文件系统)
[root@node3 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data
[root@node3 ~]# ceph fs ls
客户端挂载
mount -t ceph 192.168.4.11:6789:/ /mnt/cephfs/ -o name=admin,secret=AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==
//注意:文件系统类型为ceph
//192.168.4.11为MON节点的IP(不是MDS节点)
//admin是用户名,secret是密钥
//密钥可以在/etc/ceph/ceph.client.admin.keyring中找到
来源:CSDN
作者:风哥哥S
链接:https://blog.csdn.net/weixin_43975481/article/details/103692871