分布式存储系统(Ceph)基础

存储基础

  • 存储设备
    • DAS:IDE、SATA、SCSI、SAS、USB
    • NAS:NFS、CIFS
    • SAN:SCSI、FC SAN、iSCSI

存储内容包括元数据和数据,名称节点(NameNode)存放元数据,数据节点(DataNode)存放实体数据。

元数据节点通常将随机IO转换为顺序IO进行存取,参考redis的AOF机制。

  • 高可用
    • 主从复制或者冗余备份

Ceph

  • Ceph是一个对象式存储系统,它把每一个待管理的数据流切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存取。
  • 对象数据的底层存储服务是由多个主机组成的存储集群,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠、自动化、分布式对象存储系统。
  • librados是RADOS存储集群的API,支持C、C++、Java、Python、Ruby和PHP等编程语言。
  • Ceph uniquely delivers object, block, and file storage in one unified system. (RaodsGW、RBD、CephFS)

osd (Object Storage Device)

mon (Monitor):维护集群元数据

mgr (Manager):维护查询类操作

将整个存储空间切分为区,每个分区就是存储池,存储池的大小取决于磁盘大小,

SP (Storage Pool):rados cluster抽象而成的存储池

PG (Placement Group):存储池中可以映射到osd上的归置组,便于管理

存储过程:

对象名称进行一致性hash计算,映射到PG上,根据存储池类型和冗余副本数量,找到足量的osd进行存储。

Monitors

  • ceph-mon 维护集群图的状态,包括monitor、manager、OSD、CRUSH
  • CephX认证协议,负责维护认证信息并实行认证,任何组件间都需要认证
  • 通常至少需要三个monitors用于冗余和高可用

Managers

  • ceph-mgr跟踪ceph集群运行时的指标数据,包括存储空间利用率、当前性能指标、系统负载
  • 可利用基于python的插件,对于mgr进行功能扩展,本身支持网络面板以及REST API
  • 通常至少需要俩个managers用于高可用

RADOS 组件

  • Ceph OSDs
    • OSD(守护进程,ceph-osd)存储数据、数据复制、恢复、重新均衡,并提供监视信息给mon和mgr通过心跳检查其他守护进程
    • 至少需要三个OSDs用于高可用
  • MDSs
    • MDS存储Ceph文件系统的元数据
    • 允许POSIX文件系统用户执行基本的命令

数据抽象接口

  • LIBRADOS
    • 用户可通过支持的编程语言开发自定义客户端程序通过RADOS协议与存储系统进行交互
  • CephFS
    • 使用POSIX规范文件系统在Ceph集群存放数据
    • 依赖于独立运行的守护进程ceph-mds向客户端提供服务
  • Ceph Block Device (RBD)
    • 拥有RADOS的功能,如快照、复制、一致性,并使用内核模块或librbd库与OSD进行交互
    • 与内核模块、KVMs和云计算系统的交互均可以展现无限伸缩的高性能
    • 无须依赖于特定的守护进程,内建了librbd库
  • Ceph Object GateWay (RadosGW)
    • 在librados基础上提供对REST形式的对象存储功能
    • 依赖于守护进程ceph-radosgw,其是一个用于与Ceph集群交互的HTTP服务器

管理节点

  • 常用的管理接口是一组命令行工具程序,例如rados、ceph、rbd等命令,管理员可以从某个特定的MON节点执行管理操作,也可使用专用的管理节点
  • 专用的管理节点有助于在Ceph相关的程序升级或硬件维护期间为管理员提供一个完整的、独立的并隔离于存储集群之外的操作环境,从而避免因重启或意外中断而导致维护操作异常中断

文件存储方式

  • FileStore:将文件分割成对象,OSD格式化成了XFS文件系统,需要先将对象转换成文件,属组文件级元数据放在元数据区,对象自己的元数据放在levelDB中。

  • BlueStore:OSD就是裸设备不进行格式化,levelDB(RocksDB)配合BlueFS存放元数据,其他地方直接存放并管理数据。

部署

  • ceph-deploy (primary, run on admin-host)
    • 只用于Ceph部署,并且不会处理客户端配置
  • ceph-ansible (recommand)
  • ceph-chef
  • puppet-ceph

集群拓扑及网络

  • 每个节点使用两个网卡
    • 一个与客户端交互(public network, mandatory)
    • 一个与集群其它节点交互(private network, optional)

部署准备

设备前提

ifconfig

fdisk -l /dev/vd*

cat /etc/hosts

系统设置

设定时钟同步

若可直接访问互联网,启动chronyd服务并设定随系统启动

systemctl start chronyd.service

systemctl enable chronyd.service

配置本地时间服务器,当存在可用本地服务器时,修改节点的/etc/crhony/conf配置文件

server CHRONY-SERVER-NAME-OR-IP iburst

主机名称解析

ip hostname name…

关闭iptables或firewalld服务

在不确定具体启动状态的前提下,同时关闭并禁用二者即可

systemctl stop firewalld.service

systemctl stop iptables.service

systemctl disable firewalld.service

systemctl disable iptables.service

yum仓库配置

在ceph-admin节点上,安装生成所需版本的yum仓库配置

rpm -ivh https://mirrors.aliyun.com/ceph/rom-xxx/xx/xxx/xxxx.rpm

cd /etc/yum.repos.d/

cat ceph.repo

yum install epel-release // 相关依赖库

创建Ceph特定用户账号

ceph-deploy必须以普通用户登录到各目标节点,且此用户需要拥有无密码使用sudo命令的权限,以便在安装软件及生成配置文件的过程中无需中断配置过程。新版ceph-deploy支持使用"–username {username}"选项提供可无密码使用sudo命令的用户名,指定的用户需要能够通过SSH协议自动认证并连接到各个节点

在各个节点创建新用户并设置密码magedu

useradd cephadm && echo “magedu” | passwd --stdin cephadm

确保无密码执行sudo命令 (可直接编辑/etc/sudoers.d/cephadm)

echo “cephadm ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/cephadm

chmod 0440 /etc/sudoers.d/cephadm

sudo -l

su - cephadm

配置用户基于密钥的ssh认证

使用cephadm用户生成密钥

ssh-keygen -t rsa -P ‘’

ssh-copy-id -i .ssh/id_rsa.pub cephadm@localhost

ssh-copy-id -i .ssh/id_rsa.pub cephadm@store01

[scp -rp .ssh/ cephadm@store01:/home/cephadm] // 或者直接copy文件夹

为了方便操作,可修改~/.ssh/config文件,设定访问其它节点默认使用的用户名

Host store01

​ Hostname store01.magedu.com

​ User cephadm

配置其他节点sudo权限

scp -rp /etc/sudoers.d/cephadm store01:/etc/sudoers.d/

管理节点安装ceph-deploy

yum update

yum install ceph-deploy python-setuptools python2-subprocess32

部署RADOS集群

初始化

创建集群相关配置文件目录

mkdir ceph-cluster

cd ceph-cluster

初始化第一个MON节点

ceph-deploy new {initial-monitor-node(s)} // 名称必须与节点当前使用的主机名称保存一致

编辑生成ceph.conf配置文件,在[global]配置段中设置面向客户端通信使用的IP地址所在网络

public network = 172.20.0.0/16

安装Ceph集群

ceph-deploy install {ceph-node}[{ceph-node}…]

配置初始MON节点,手机所有密钥

ceph-deploy mon create-install

将配置文件和admin密钥拷贝到各节点上,以免每次执行需要指定MON节点和amdin.keyring

ceph-deploy admin store01 …

在需要运行ceph命令的节点上以root身份设定cephadm可以读取keyring文件

setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring

配置manager节点,启动mgr进程

ceph-deploy mgr create store01

在Ceph集群的各节点上以cephadm用户测试集群的状态

ceph health

ceph -s

向RADOS集群添加OSD

整理磁盘

ceph-deploy disk list {osd-server-name} …

ceph-deploy disk zap {osd-server-name} {disk-name}

【如果对应节点的设备有数据,需要以root身份执行ceph-volumn lvm zap --destroy {DEVICE}】

添加OSD

ceph-deploy osd create {node} --data {data-disk}

ceph-deploy osd list {node} …

ceph osd stat 或者 ceph osd {dump / ls}

移除OSD

ceph osd out {osd-num}

sudo systemctl stop ceph-osd@{osd-num}

ceph osd rm {osd-num}

上传/下载数据对象

ceph osd pool create {pool-name} [rule-num] {PG-num}

rados put {object-name} {obj-location} --pool={pool-name} // 或者使用-p 指定存储池

rados ls --pool = {pool-name}

ceph osd map {pool-name} {object} // 获取在存储池中数据对象的具体位置信息

rados rm {object-name} --pool = {pool-name}

ceph osd pool rm {pool-name} {pooll-name} --yes-i-really-really-mean-it // 需要先启用存储池删除配置

扩展Ceph集群

扩展Monitor节点

ceph-deploy mon add {ceph-nodes} // 最好是奇数个节点

ceph quorum_status --format json-query

扩展Manager节点

ceph-deploy mgr create {ceph-nodes}

ceph -s

访问接口

Ceph块设备接口

创建存储池并启用rbd功能进行初始化

ceph osd pool create {pool-name} {PG-num}

ceph osd pool application enable {pool-name} rbd

rbd pool init -p {pool-name}

按需创建映像,将映像文件作为块设备使用

rbd create {image-name} --size {size} --pool {pool-name}

rbd info // 获取相关信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值