分布式文件系统

被刻印的时光 ゝ 提交于 2019-12-28 12:36:48

分布式文件系统

分布式文件系统(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中找到
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!