• Ceph存储


    数据存储类型

    块存储

    存储设备与客户端主机是 一对一 的关系,块存储设备只能被一个主机挂载使用,数据以块为单位进行存储的,典型代表:硬盘

    文件存储

    一对多,能被多个主机同时挂载/传输使用,数据以文件的形式存储的,其中文件的元信息和实际数据是分开存储的,并且有目录的层级关系,典型代表:NFS、FTP

    对象存储

    一对多,能被多个主机/应用程序通过API接口访问使用,数据以文件的形式存储的,一个文件即是一个对象(object),文件的元信息和实际数据是在一起的。

    文件是扁平化方式存储的,没有目录的层级关系,典型代表:OSS(阿里云)  S3(AWS)

    Ceph 开源的分布式存储系统,具有高性能、高可扩展性、高可用性等特点,还集块存储、文件存储、对象存储功能于一身。

    单机存储设备

    DAS(直接附加存储,是直接接到计算机的主板总线上去的存储)

    IDE、SATA、SCSI、SAS、USB 接口的磁盘
    所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储

    NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)

    NFS、CIFS、FTP文件系统级别的存储,本身就是一个做好的文件系统,通过nfs接口在用户空间输出后,客户端基于内核模块与远程主机进行网络通信,把它转为好像本地文件系统一样来使用,这种存储服务是没办法对它再一次格式化创建文件系统块的

    SAN(存储区域网络)

    SCSI协议(只是用来传输数据的存取操作,物理层使用SCSI线缆来传输)、FCSAN(物理层使用光纤来传输)、iSCSI(物理层使用以太网来传输)
    也是一种网络存储,但不同之处在于SAN提供给客户端主机使用的接口是块级别的存储

    什么是Ceph

    Ceph使用C++语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。

    Ceph的优势

    高扩展性

    去中心化,支持使用普通X86服务器,支持上千个存储节点的规模,支持TB到EB级的扩展。

    高可靠性

    没有单点故障,多数据副本,自动管理,自动修复。

    高性能

    摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。

    功能强大

    Ceph是个大一统的存储系统,集块存储接口(RBD)、文件存储接口(CephFS)、对象存储接口(RadosGW)于一身,因而适用于不同的应用场景。

    Ceph架构

    客户端 (主机/虚拟机/容器/应用程序)

    使用Ceph进行数据读写的客户终端

    LibRADOS对象访问接口

    提供存储访问接口给客户端使用。Ceph默认提供三个接口:RBD块存储接口、RGW对象存储接口、CephFS文件存储接口。还支持用户使用JAVA/Python/C/PHP等编程语言二次开发自定义访问接口

    RADOS基础存储系统 (统一存储池)

    提供存储能力的。Ceph中一切都是以对象(object)形象存储的,RADOS就是负责存储这些对象的,并保证数据的一致性和可靠性。

    Ceph组件

    OSD(ceph-osd)

    负责存储数据,一般一个磁盘对应一个OSD,响应客户端的读写请求

    Monitor(ceph-mon)

    负责保存OSD的元数据,维护Ceph集群状态的各种映射视图(监控全局状态),管理客户端的认证与授权

    Manager(ceph-mgr)

    负责跟踪Ceph集群状态和监控指标,暴露接口给监控软件获取监控指标数据

    MDS(ceph-mds)

    负责保存CephFS文件存储系统的元数据,管理目录结构,仅在使用CephFS文件存储接口功能的时候使用

    PG

    归置组,可理解成保存OSD位置的索引,一个PG可以包含多个数据对象(object),一个数据对象(object)只能属于一个PG

    Pool

    数据池/资源池/存储池,可理解成一个存放PG的命名空间,一个Pool可以多个PG,不同Pool的PG可以同名


    OSD的存储引擎

    FileStore

    是L(12.X)以前版本的唯一可选的OSD存储引擎,将数据对象(object)存储为文件系统中的文件,性能上存在许多不足

    BlueStore

    是L(12.X)版本及以后版本默认的OSD存储引擎,将数据对象(object)直接存储在块设备上,具有更好的数据读写性能和可靠性


    Ceph的存储过程

    1. 文件默认会被按照4M大小进行分片成一个或者多个数据对象(object)
    2. 每个数据对象(object)都有一个oid(由文件ID(ino)和分片编号(non组成),通过对oid使用hash算法得到一个16进制的特征码,再除以Pool的PG总数取余,得到数据对象(object)的pgid(由Pool_id+pgid组成)
    3. 通过对pgid使用CRUSH算法得到PG对应的OSD的ID(如果是多副本,则是主从的OSD的ID)
    4. 将数据对象(object)的数据存储到对应的OSD上

    部署Ceph集群

    基于 ceph-deploy 部署

    环境规划
    主机名

    Public网络

    Cluster网络角色
    admin192.168.64.10admin(管理节点)、client
    node01192.168.64.20 192.168.100.11mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
    node02192.168.64.30 192.168.100.12mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
    node03192.168.64.40 192.168.100.13mon、osd(/dev/sdb、/dev/sdc、/dev/sdd)
    client192.168.64.50client

    环境准备

    根据规划设置主机名

    1. hostnamectl set-hostname admin
    2. hostnamectl set-hostname node01
    3. hostnamectl set-hostname node02
    4. hostnamectl set-hostname node03
    5. hostnamectl set-hostname client

    配置 hosts 解析

    1. cat >> /etc/hosts << EOF
    2. 192.168.64.10 admin
    3. 192.168.64.20 node01
    4. 192.168.64.30 node02
    5. 192.168.64.40 node03
    6. 192.168.64.50 client
    7. EOF

    安装常用软件和依赖包

    1. yum -y install epel-release
    2. yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass

    在 admin 管理节点配置 ssh 免密登录所有节点

    1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    2. sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@admin
    3. sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node01
    4. sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node02
    5. sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node03

    配置时间同步

    1. systemctl enable --now chronyd
    2. timedatectl set-ntp true                    #开启 NTP
    3. timedatectl set-timezone Asia/Shanghai        #设置时区
    4. chronyc -a makestep                            #强制同步下系统时钟
    5. timedatectl status                            #查看时间同步状态
    6. chronyc sources -v                            #查看 ntp 源服务器信息
    7. timedatectl set-local-rtc 0                    #将当前的UTC时间写入硬件时钟

    重启依赖于系统时间的服务

    1. ​​​​​​​systemctl restart rsyslog 
    2. systemctl restart crond

    关闭无关服务

    ​​​​​​​systemctl disable --now postfix

    配置 Ceph yum源

    1. wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
    2. rpm -ivh ceph-release-1-1.el7.noarch.rpm --force

    部署 Ceph 集群

    为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行

    mkdir -p /etc/ceph

    安装 ceph-deploy 部署工具

    1. cd /etc/ceph
    2. yum install -y ceph-deploy
    3. ceph-deploy --version

    在管理节点为其它节点安装 Ceph 软件包

    1. cd /etc/ceph
    2. ceph-deploy install --release nautilus node0{1..3} admin
    3. #ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本

    生成初始配置

    1. cd /etc/ceph
    2. ceph-deploy new --public-network 192.168.64.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03
    3. #在管理节点运行下述命令,告诉 ceph-deploy 哪些是 mon 监控节点
    4. ceph-deploy --overwrite-conf mon create-initial
    5. #配置初始化 mon 节点,并向所有节点同步配置

    在 mon 节点上查看自动开启的 mon 进程

    ps aux | grep ceph

    在管理节点查看 Ceph 集群状态

    1. cd /etc/ceph
    2. ceph -s

    查看 mon 集群选举的情况

    ceph quorum_status --format json-pretty | grep leader

  • 相关阅读:
    数据库中间件-ShardingSphere-Proxy(一)
    基于区块链技术的疫情管理系统
    优雅而酷炫的自定义CSS滚动条:展示
    用友NC Cloud自由报表的首次设计体验(图文)
    000-基于Sklearn的机器学习入门:工作环境搭建与配置
    【深度学习CV-baseline】GoogleNet-更深的卷积神经网络
    Spring 源码(13)Spring Bean 的创建过程(4)
    linux下定位内存泄漏 /proc/pid/status 解释
    工程项目安全管理系统安质保智慧建造云平台3.0帮建设单位管好工程项目
    数据仓库概念梳理
  • 原文地址:https://blog.csdn.net/akk_dian/article/details/133897944