zoukankan      html  css  js  c++  java
  • 深入浅出分布式文件存储系统之 Ceph 的实现

      一、何为分布式文件文件系统

      分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,它的设计是基于客户端/服务器模式。

      如上图所示,应用服务器和文件服务器分别存在于网络当中,而这里的网络,可以是统一子网,也可以是不同子网。服务器对文件的存取,均在网络进行,这样就可以突破常用存储设备的容量限制。

      二、常用分布式文件系统的介绍

      1、Lustre

      lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护。该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数量存储系统。

      2、Hadoop

      hadoop不仅仅是一个用于存储的分布式文件系统,而其设计更是用来在由通用计算设备组成的大型集群上执行分布式应用的框架。目前主要应用于大数据、区块链等领域。

      3、FastDFS

      FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务, 如相册网站,视频网站等等。

      4、Ceph

      Ceph是一个具有高扩展、高可用、高性能、可以提供对象存储、块存储、文件存储的分布式文件系统,它可以提供 PD 级别的存储空间,理论上说,是无上限的。

      三、Ceph 介绍

      Ceph是一个具有高扩展、高可用、高性能的分布式存储系统,根据场景划分可以将Ceph分为对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储。比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。

      Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡。同时由于Ceph本身的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

      四、Ceph 构成

      Ceph的核心构成包括:Ceph OSD(对象存出设备)、Ceph Monitor(监视器) 、Ceph MSD(元数据服务器)、Object、PG、RADOS、Libradio、CRUSH、RDB、RGW、CephFS

      OSD:全称 Object Storage Device,真正存储数据的组件,一般来说每块参与存储的磁盘都需要一个 OSD 进程,如果一台服务器上又 10 块硬盘,那么该服务器上就会有 10 个 OSD 进程。

      MON:MON通过保存一系列集群状态 map 来监视集群的组件,使用 map 保存集群的状态,为了防止单点故障,因此 monitor 的服务器需要奇数台(大于等于 3 台),如果出现意见分歧,采用投票机制,少数服从多数。

      MDS:全称 Ceph Metadata Server,元数据服务器,只有 Ceph FS 需要它。

      Object:Ceph 最底层的存储单元是 Object 对象,每个 Object 包含元数据和原始数据。

      PG:全称 Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。

      RADOS:全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,可靠自主分布式对象存储,它是 Ceph 存储的基础,保证一切都以对象形式存储。

      Libradio:Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前仅提供PHP、Ruby、Java、Python、C和C++支持。

      CRUSH:是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

      RBD:全称 RADOS block device,它是 RADOS 块设备,对外提供块存储服务。

      RGW:全称 RADOS gateway,RADOS网关,提供对象存储,接口与 S3 和 Swift 兼容。

      CephFS:提供文件系统级别的存储。

      五、Ceph 部署

      1、Ceph拓扑结构

      2、服务器规划

      3、服务器环境准备

      a、配置主机名、IP地址解析,分别在 6 台服务器中执行以下命令:

      [root@ceph-a ~]# echo -e "192.168.20.144 ceph-a" >> /etc/hosts

      [root@ceph-a ~]# echo -e "192.168.20.145 ceph-b" >> /etc/hosts

      [root@ceph-a ~]# echo -e "192.168.20.146 ceph-c" >> /etc/hosts

      [root@ceph-a ~]# echo -e "192.168.20.147 ceph-d" >> /etc/hosts

      [root@ceph-a ~]# echo -e "192.168.20.148 ceph-e" >> /etc/hosts

      [root@ceph-a ~]# echo -e "192.168.20.149 ceph-f" >> /etc/hosts

      b、配置免密登陆

      扫描服务器 A 到 F的密钥,其目的主要是避免在进行 ssh 连接或者在后面执行 ceph 类命令出现 yes/no 的交互,在 Ceph-A 中执行以下命令:

      [root@ceph-a ~]# for i in {a..f}; do ssh-keyscan ceph-$i >/root/.ssh/known_hosts; done

      在 Ceph-A 生成私钥,在 Ceph-A 中执行以下命令:

      [root@ceph-a ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''

      说明:-f 参数指定私钥文件路径, -N 参数声明该过程为非交互式,也就是不用我们手动按回车键等

      将私钥文件拷贝到 Ceph-B 到 Ceph-F 服务器中,执行以下命令:

      [root@ceph-a ~]# for i in {b..f}; do ssh-copy-id ceph-$i; done

      c、配置 NTP 网络时间同步服务

      在 6 台服务器中安装 chrony 软件包,在服务器 A 执行以下命令即可:

      [root@ceph-a ~]# for i in {a..f}; do ssh ceph-$i yum -y install chrony ; done

      配置 Ceph-A 为 NTP 服务器:

      [root@ceph-a ~]# vim /etc/chrony.conf

      修改图中的三个部分郑州男科医院排名:http://www.zztjxb.com/郑州看男科哪家好:http://www.zztjxb.com/郑州男科:http://www.zztjxb.com/

      ①、注释掉默认的 NTP 服务器,添加国内的 NTP 服务器,这里添加的是北京邮电大学的 NTP 服务器。

      ②、允许 192.168.20.0/24 网段进行时间同步。

      ③、本地时间服务器层级,取消注释即可。

      配置 Ceph-B 到 Ceph-F 服务器通过 Ceph-A 进行时间同步

      [root@ceph-b ~]# vim /etc/chrony.conf

      将图中红框内(也就是刚才配置的 Ceph-A)的 NTP 服务器添加进去即可,其他没用的注释。

      保存并退出,并将改配置文件复制到 Ceph-C 到 Ceph-F 中:

      [root@ceph-b ~]# for i in {c..f}; do scp /etc/chrony.conf ceph-$i:/etc/; done

      重启 Ceph-A 到 Ceph-F 的 chrony 服务,在 Ceph-A 中执行以下命令:

      [root@ceph-a ~]# for i in {a..f}; do ssh ceph-$i systemctl restart chronyd; done

      同步 Ceph-A 的时间

      [root@ceph-a ~]# ntpdate ntp.sjtu.edu.cn

      同步 Ceph-B 到 Ceph-F 的时间,在 Ceph-A 中执行即可:

      [root@ceph-a ~]# for i in {b..f}; do ssh ceph-$i ntpdate 192.168.20.144; done

  • 相关阅读:
    验证授权【msdn】
    实战 Comet 应用程序开发
    ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]
    分享WordPress博客搜索引擎优化的六点经验 博客园 cnbogs
    支持支付宝(Alipay)付款的三个美国主机商
    认证,授权2
    登录代码,程序不是作文
    Google 的PageRank值对网站成功有多重要
    SQL Server 2005 Service Broker 初探 [摘抄]
    jQuerySelectors(选择器)的使用(四五、内容篇&可见性篇) cnblogs zhuan
  • 原文地址:https://www.cnblogs.com/sushine1/p/11627431.html
Copyright © 2011-2022 走看看