一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手)()

  本篇文章为你整理了一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手)()的详细内容,包含有 一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手),希望能帮助你了解 一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手)。

  1.1 背景

  Ceph是一个去中心化的分布式存储系统, 提供较好的性能、可靠性和可扩展性。Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区, 遵循LGPL协议(LESSER GENERAL PUBLIC LICENSE的简写,中文译为“较宽松公共许可证”)。在经过了数年的发展之后,目前已得到众多云计算厂商(OpenStack、CloudStack、OpenNebula、Hadoop)的支持并被广泛应用。

  1.2 介绍

  Ceph是一个可靠、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备和文件系统服务。

  Ceph的主要优点是分布式存储,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,不存在传统的单点故障的问题,可以水平扩展。

  Ceph存储集群至少需要一个Ceph Monitor和两个OSD守护进程。而运行Ceph文件系统客户端时,则必须要有元数据服务器(Metadata Server)。

  1.3 特点

  Ceph适合跨集群的小文件存储, 拥有以下特点:

  
Client和Server直接通信, 不需要代理和转发;

  Client不需要负责副本的复制, 有Primary主节点负责, 这样可以有效降低clien网络的消耗;

  采用CRUSH算法,数据分布均衡,并行度高,支持上千个存储节点, 支持TB及PB级数据。

  
数据多副本, 支持故障域分隔,数据强一致性;

  没有单点故障,较好的容错性, 有效支撑各种故障场景;

  支持所有故障的检测和自动恢复,可以做到自动化管理;

  支持并行恢复,能够极大的降低数据恢复时间, 提高数据的可靠性。

  
高扩展性

  高度并行化设计,没有单个中心控制组件,所有负载都能动态的划分到各个服务器上。

  去中心化、灵活、随节点增加线性增长。

  
场景丰富

  支持三种存储接口类型: 块存储、文件存储、对象存储。 同时支持自定义接口,C++为底层实现, 兼容多种语言。

  
块存储: 将磁盘空间映射给主机使用, 适用 docker容器、虚拟机磁盘存储分配;日志存储, 文件存储。

  
文件存储: 解决块存储无法共享问题, 在服务器架设FTP和NFS服务器,适用目录结构的存储、日志存储等。

  
对象存储: 大容量硬盘, 安装存储管理软件, 对外提供读写访问能力, 具备块存储的高速读写能力, 也具备文件存储共享的特性; 适用图片存储或视频存储。

  
基础存储系统RADOS

  Reliable, Autonomic,Distributed Object Store,即可靠的、自动化的、分布式的对象存储

  这就是一个完整的对象存储系统,所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。而Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。

  
基础库librados

  这层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS(而不是整个Ceph)进行应用开发。特别要注意的是,RADOS是一个对象存储系统,因此,librados实现的API也只是针对对象存储功能的。RADOS采用C++开发,所提供的原生librados API包括C和C++两种。

  
高层应用接口

  这层包括了三个部分:RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System),其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。其中,RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。RADOS GW提供的API抽象层次更高,但功能则不如librados强大。

  
应用层

  这层是不同场景下对于Ceph各个应用接口的各种应用方式,例如基于librados直接开发的对象存储应用,基于RADOS GW开发的对象存储应用,基于RBD实现的云硬盘等等。librados和RADOS GW的区别在于,librados提供的是本地API,而RADOS GW提供的则是RESTfulAPI。

  由于Swift和S3支持的API功能近似,这里以Swift举例说明。Swift提供的API功能主要包括:

  
对象管理操作:对象的写入、读取、复制、更新、删除、访问许可设置、元数据读取或更新等。

  
OSD: Ceph的对象存储设备,OSD守护进程的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向Ceph Monitors 提供一些监控信息。

  
Monitors: Ceph监视器,Monitor维护着展示集群状态的各种图表,包括监视器图、OSD图、归置组(PG)图、和CRUSH图。

  
PG:Ceph归置组,每个Object最后都会通过CRUSH计算映射到某个PG中,一个PG可以包含多个Object。

  
RADOS: Reliable Autonomic Distributed Object Store,表示可靠、自动、分布式的对象存储。Ceph中的一切都是以对象形式存储,RADOS就负责存储这些对象,RADOS层确保数据一致性和可靠性。

  
Librados:librados库是一种用来简化访问RADOS的方法,目前支持PHP、Python、Ruby、Java、C和C++语言。

  
RBD:Ceph 的块设备,它对外提供块存储,可以被映射、格式化进而像其他磁盘一样挂载到服务器。

  
3.1 部署结构

  虚拟机创建三台服务器,CENTOS版本为7.6, IP网段192.168.116.0/24。三台主机名称为:

  
修改yum源
 

  vi /etc/yum.repos.d/ceph.repo, 为避免网速过慢问题, 这里采用的是清华镜像源:

  

[Ceph]

 

  name=Ceph packages for $basearch

  baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/

  enabled=1

  gpgcheck=1

  type=rpm-md

  gpgkey=https://download.ceph.com/keys/release.asc

  [Ceph-noarch]

  name=Ceph noarch packages

  # 官方源

  #baseurl=http://download.ceph.com/rpm-mimic/el7/noarch

  # 清华源

  baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/

  enabled=1

  gpgcheck=1

  type=rpm-md

  gpgkey=https://download.ceph.com/keys/release.asc

  [ceph-source]

  name=Ceph source packages

  baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/

  enabled=1

  gpgcheck=1

  type=rpm-md

  gpgkey=https://download.ceph.com/keys/release.asc

  
 

 

  安装完成, 如果执行ceph-deploy出现ImportError: No module named pkg_resources

  安装python2-pip: yum -y install python2-pip

  yum install epel-release -y

  
并将时间每隔1小时自动校准同步。编辑 vi /etc/rc.d/rc.local 追加:

  

/usr/sbin/ntpdate ntp1.aliyun.com /dev/null 2 /sbin/hwclock -w

 

  

 

  配置定时任务, 执行crontab -e 加入:

  

0 */1 * * * ntpdate ntp1.aliyun.com /dev/null 2 /sbin/hwclock -w

 

  

 

  
官方建议不用系统内置用户, 创建名为ceph_user用户, 密码也设为ceph_user:

  

useradd -d /home/ceph_user -m ceph_user

 

  passwd ceph_user

  

 

  
设置sudo权限

  

echo "ceph_user ALL = (root) NOPASSWD:ALL" sudo tee /etc/sudoers.d/ceph_user

 

  sudo chmod 0440 /etc/sudoers.d/ceph_user

  

 

  1、2两个步骤依次在三台机器上执行。

  接下来在主节点, 继续执行:

  
切换用户: su ceph_user

  执行ssh-keygen,一直按默认提示点击生成RSA密钥信息。

  
修改管理节点上的 ~/.ssh/config 文件, 简化SSH远程连接时的输入信息:

  管理节点是会有root和ceph_user多个用户, ssh远程连接默认会以当前用户身份进行登陆,

  如果我们是root身份进行远程连接, 还是需要输入密码, 我们想简化, 该怎么处理?

  切换root身份,

  

su root 

 

  

 

  修改~/.ssh/config 文件

  

Host CENTOS7-1

 

   Hostname CENTOS7-1

   User ceph_user

  Host CENTOS7-2

   Hostname CENTOS7-2

   User ceph_user

  Host CENTOS7-3

   Hostname CENTOS7-3

   User ceph_user

  

 

  注意修改文件权限, 不能采用777最大权限:

  

chmod 600 ~/.ssh/config

 

  

 

  进行ssh远程连接时, Host的主机名称是区分大小写的, 所以要注意配置文件的主机名称。

  
开放端口, 非生产环境, 可以直接禁用防火墙:

  

systemctl stop firewalld.service

 

  systemctl disable firewalld.service

  

 

  
如果接下来集群的安装配置出现问题, 可以执行以下命令清除, 再重新安装:

  

ceph-deploy purge CENTOS7-1 CENTOS7-2 CENTOS7-3

 

  ceph-deploy purgedata CENTOS7-1 CENTOS7-2 CENTOS7-3

  ceph-deploy forgetkeys

  

 

  将三台节点的mon信息也删除

  

rm -rf /var/run/ceph/

 

  

 

  
第一项为副本数, 设为2份。

  第二项为对外IP访问网段,注意根据实际IP修改网段。

  第三、四项为允许一定时间的漂移误差。

  
如果出现错误:

  

ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version

 

  

 

  可以在各节点上单独进行安装:

  

yum -y install ceph 

 

  

 

  如果没有仓库文件ceph.repo, 按上面的步骤手工创建。

  
下发配置文件和管理信息至各节点:

  

ceph-deploy admin CENTOS7-1 CENTOS7-2 CENTOS7-3

 

  

 

  
安装mgr(管理守护进程), 大于12.x版本需安装, 我们装的是最新版,需执行:

  

ceph-deploy mgr create CENTOS7-1 CENTOS7-2 CENTOS7-3

 

  

 

  
注意: 新版本的OSD没有prepare与activate命令。

  这里需要新的硬盘作为OSD存储设备, 关闭虚拟机, 增加一块硬盘, 不用格式化。

  
 

  重启, fdisk -l 查看新磁盘名称:
 

  执行创建OSD命令:

  

ceph-deploy osd create --data /dev/sdb CENTOS7-2

 

  

 

  三台节点都需分别依次执行。

  

ceph-deploy gatherkeys CENTOS7-1

 

  

 

  
Reduced data availability: 41 pgs inactive

   Degraded data redundancy: 134/268 objects degraded (50.000%), 22 pgs degraded, 87 pgs undersized

   39 slow ops, oldest one blocked for 2286 sec, daemons [osd.0,mon.CENTOS7-2,mon.CENTOS7-3] have slow ops.

   clock skew detected on mon.CENTOS7-2, mon.CENTOS7-3

   services:

   mon: 3 daemons, quorum CENTOS7-1,CENTOS7-2,CENTOS7-3

   mgr: centos7-1(active), standbys: centos7-3, centos7-2

   mds: fs_test-1/1/1 up {0=centos7-1=up:replay}

   osd: 3 osds: 1 up, 2 in

   data:

   pools: 9 pools, 128 pgs

   objects: 134 objects, 64 KiB

   usage: 1.0 GiB used, 19 GiB / 20 GiB avail

   pgs: 32.031% pgs unknown

   134/268 objects degraded (50.000%)

   65 active+undersized

   41 unknown

   22 active+undersized+degraded

  

 

 

  在各节点执行命令, 确保时间同步一致:

  

ntpdate ntp1.aliyun.com 

 

  

 

  3.5 安装管理后台

  


 

 

  

openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca

 

  

 

  

[root@CENTOS7-1 mgr-dashboard]# ll

 

  total 8

  -rw-rw-r-- 1 ceph_user ceph_user 1155 Jul 14 02:26 dashboard.crt

  -rw-rw-r-- 1 ceph_user ceph_user 1704 Jul 14 02:26 dashboard.key

  

 

  


ceph config set mgr mgr/dashboard/server_addr 192.168.116.141

 

  ceph config set mgr mgr/dashboard/server_port 18843

  

 

  
 

  3.6 创建Cephfs

  集群创建完后, 默认没有文件系统, 我们创建一个Cephfs可以支持对外访问的文件系统。

  

ceph-deploy --overwrite-conf mds create CENTOS7-1 CENTOS7-2 CENTOS7-3

 

  

 

  


[root@CENTOS7-1 mgr-dashboard]# ceph fs ls

 

  name: fs_test, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

  

 

  

[root@CENTOS7-1 mgr-dashboard]# ceph mds stat

 

  fs_test-1/1/1 up {0=centos7-1=up:active}

  

 

  附: 如果创建错误, 需要删除, 执行:

  

ceph fs rm fs_test --yes-i-really-mean-it

 

  ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it

  

 

  确保在ceph.conf中开启以下配置:

  

[mon]

 

  mon allow pool delete = true

  

 

  
挂载cephfs

  

[root@node3 ~]# ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.116.141:6789 /usr/local/cephfs_directory

 

  ceph-fuse[6687]: starting ceph client

  2019-07-14 21:39:09.644181 7fa5be56e040 -1 init, newargv = 0x7fa5c940b500 newargc=9

  ceph-fuse[6687]: starting fuse

  

 

  
tmpfs 1.9G 24K 1.9G 1% /var/lib/ceph/osd/ceph-0

  ceph-fuse 27G 0 27G 0% /usr/local/cephfs_directory

  tmpfs 378M 0 378M 0% /run/user/1000

  

 

 

  /usr/local/cephfs_directory目录已成功挂载。

  
执行MAVEN安装, 忽略测试用例:

  

[root@CENTOS7-1 rados-java]# mvn install -Dmaven.test.skip=true

 

  

 

  生成jar包, rados-0.7.0.jar

  

[root@CENTOS7-1 target]# ll

 

  总用量 104

  drwxr-xr-x 3 root root 17 8月 11 18:32 classes

  drwxr-xr-x 2 root root 27 8月 11 18:32 dependencies

  drwxr-xr-x 3 root root 25 8月 11 18:32 generated-sources

  drwxr-xr-x 2 root root 28 8月 11 18:32 maven-archiver

  drwxr-xr-x 3 root root 35 8月 11 18:32 maven-status

  -rw-r--r-- 1 root root 105701 8月 11 18:32 rados-0.7.0.jar

  

 

  
创建软链接, 加入CLASSPATH

  

ln -s /usr/local/sources/rados-java/target/rados-0.7.0.jar /opt/jdk1.8.0_301/jre/lib/ext/rados-0.7.0.jar

 

  

 

  安装jna

  

yum -y install jna

 

  

 

  创建软链接

  

ln -s /usr/share/java/jna.jar /opt/jdk1.8.0_301/jre/lib/ext/jna.jar

 

  

 

  查看

  

[root@CENTOS7-1 target]# ll /opt/jdk1.8.0_301/jre/lib/ext/jna.jar

 

  lrwxrwxrwx 1 root root 23 8月 11 19:00 /opt/jdk1.8.0_301/jre/lib/ext/jna.jar - /usr/share/java/jna.jar

  

 

  

[root@CENTOS7-1 target]# ll /opt/jdk1.8.0_301/jre/lib/ext/rados-0.7.0.jar

 

  lrwxrwxrwx 1 root root 52 8月 11 18:59 /opt/jdk1.8.0_301/jre/lib/ext/rados-0.7.0.jar - /usr/local/sources/rados-java/target/rados-0.7.0.jar

  

 

  
CephClient类,注意, 最新版0.6的异常处理包位置已发生变化。

  

import com.ceph.rados.Rados;

 

  import com.ceph.rados.exceptions.*;

  import java.io.File;

  public class CephClient {

   public static void main (String args[]){

   try {

   Rados cluster = new Rados("admin");

   System.out.println("Created cluster handle.");

   File f = new File("/etc/ceph/ceph.conf");

   cluster.confReadFile(f);

   System.out.println("Read the configuration file.");

   cluster.connect();

   System.out.println("Connected to the cluster.");

   } catch (RadosException e) {

   System.out.println(e.getMessage() + ": " + e.getReturnValue());

  

 

  


[root@CENTOS7-1 sources]# javac CephClient.java 

 

  [root@CENTOS7-1 sources]# java CephClient

  Created cluster handle.

  Read the configuration file.

  Connected to the cluster.

  

 

  成功与ceph建立连接。

  注意:如果java和javac版本不同,可以使用rpm -qa grep java 进行查找, rpm -e --nodeps jdk进行删除,source /etc/profile进行生效

  jdk的位数为64位

  
本文由传智教育博学谷 - 狂野架构师教研团队发布
 

  如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力
 

  转载请注明出处!

  以上就是一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手)()的详细内容,想要了解更多 一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手)的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: