Ceph存储系统
概述
ceph是一个Linux PB级别的分布式存储系统,ceph的目标简单地定义为:
可轻松扩展到PB容量
对多种工作负载的高性能(每秒输入/输出操作[IOPS]和带宽)
高可靠性
与常见的集中式存储不同,分布式存储技术并不是将数据存储在某个或多个特定的节点上,而是通过网络使用多台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散地存储在这些机器的各个磁盘上
ceph架构
ceph架构大概可以划分为四部分:客户端(数据用户)、元数据服务器(缓存和同步分布式元数据)、一个对象存储集群(将数据和元数据作为对象存储)、集群监视器(执行监视功能)
ceph组件
ceph客户端
Linux显示文件系统的一个公共界面(通过虚拟文件系统VFS),ceph的用户视图就是透明的。管理员的视图肯定是不同的,考虑到很多服务器会包含存储系统这一潜在因素。从用户的角度看,他们访问大容量的存储系统,却不知道下面聚合成一个大容量的存储池的元数据服务器,监视器还有独立的对象存储设备。用户只是简单地看到一个安装点,在这个点上可以执行标准文件I/O
ceph元数据服务器
元数据服务器(cmds)的工作就是管理文件系统的名称空间(pools)。虽然元数据和数据两者都存储在对象存储集群,但两者分别管理,支持可扩展性。事实上,元数据在一个元数据服务器集群上被进一步拆分,元数据服务器能够自适应地复制和分配名称空间,避免出现热点。元数据服务器管理名称空间部分,可以(为冗余和性能)进行重叠。元数据服务器到名称空间的映射在 Ceph 中使用动态子树逻辑分区执行,它允许 Ceph 对变化的工作负载进行调整(在元数据服务器之间迁移名称空间)同时保留性能的位置
元数据服务器管理 inode 空间,将文件名转变为元数据。元数据服务器将文件名转变为索引节点,文件大小,和 Ceph 客户端用于文件 I/O 的分段数据(布局)
ceph监视器
ceph包含实施集群映射管理的监视器,但是故障管理的一些要素是在对象存储本身中执行的。当对象存储设备发生故障或者新设备添加时,监视器就检测和维护一个有效的集群映射。这个功能按一种分布的方式执行,这种方式中映射升级可以和当前的流量通信。Ceph 使用 Paxos,它是一系列分布式共识算法
ceph对象存储集群
和传统的对象存储类似,Ceph 存储节点不仅包括存储,还包括智能。传统的驱动是只响应来自启动者的命令的简单目标。但是对象存储设备是智能设备,它能作为目标和启动者,支持与其他对象存储设备的通信和合作
从存储角度来看,Ceph 对象存储设备执行从对象到块的映射(在客户端的文件系统层中常常执行的任务)。这个动作允许本地实体以最佳方式决定怎样存储一个对象。Ceph 的早期版本在一个名为 EBOFS 的本地存储器上实现一个自定义低级文件系统。这个系统实现一个到底层存储的非标准接口,这个底层存储已针对对象语义和其他特性(例如对磁盘提交的异步通知)调优。今天,B-tree 文件系统(BTRFS)可以被用于存储节点,它已经实了部分必要功能(例如嵌入式完整性)
因为 Ceph 客户实现 CRUSH,而且对磁盘上的文件映射块一无所知,下面的存储设备就能安全地管理对象到块的映射。这允许存储节点复制数据(当发现一个设备出现故障时)。分配故障恢复也允许存储系统扩展,因为故障检测和恢复跨生态系统分配。Ceph 称其为 RADOS
1. ceph安装
ceph的一个好处就是没有中心节点,这样以来任何两个节点在存储系统中都是对等的。官方文档的介绍是使用一个admin节点来部署monitor和osds,如下图
这里我们使用一个简化的方式,admin节点用monitor节点来代替。
1.1 环境准备
(1)准备3台Centos7服务器:
ceph-mon:192.168.123.202
ceph-osd0:192.168.123.203
ceph-osd1:192.168.123.204
(2)软件环境:
# service firewalld stop
# chkconfig firewalld off
# setenforce 0
# vim /etc/selinux/config
修改为:SELINUX=disabled
更新centos的yum源
# rm -rf /etc/yum.repos.d/*.repo
# wget http://mirrors.aliyun.com/repo/Centos-7.repo
# wget http://mirrors.aliyun.com/repo/epel-7.repo
手动添加ceph的安装源
# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://download.ceph.com/rpm-hammer/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://download.ceph.com/rpm-hammer/el7/noarch/
gpgcheck=0
执行更新yum源
# yum clean all ; yum makecache
1.2 安装前的准备
(1)为每个节点添加磁盘用于对象存储集群
$ parted /dev/sdb
(parted) mklable gpt #使用gpt分区表
(parted) mkpart primary xfs 0 100%
(parted) quit
$ mkfs.xfs /dev/sdb1 #使用xfs文件系统,单个文件大小没有上限
(2)安装ceph部署工具
# yum install -y ceph-deploy
(3)添加hosts信息
在所有节点hosts文件中添加如下信息
# vim /etc/hosts
192.168.123.202 ceph-mon
192.168.123.203 ceph-osd0
192.168.123.204 ceph-osd1
(4)同步时间
在管理节点admin(mon)上安装ntp服务器 ,更新本地时间,启动ntp服务
# yum install -y ntpdate ntp
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# ntpdate 0.centos.pool.ntp.org
# service ntpd start
设定其他节点与管理节点admin(mon)进行时间同步
# ntpdate ceph-mon
(5)在所有节点添加ceph专用用户
# useradd ceph
# passwd ceph
(6)添加sudo权限
# echo "ceph ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/ceph
# chmod 0440 /etc/sudoers.d/ceph
# visudo
修改Defaults requiretty 为Defaults:ceph !requiretty
(7)设置管理节点admin(mon)与osds节点ssh互通
# su - ceph
# ssh-keygen
# ssh-copy-id [email protected]
# ssh-copy-id [email protected]
(8)配置ssh的config文件
编辑管理节点admin(mon)的 /home/ceph/.ssh/config文件添加如下信息
# vim /home/ceph/.ssh/config
Host ceph-mon
Hostname ceph-mon
User ceph
Host ceph-osd0
Hostname ceph-osd0
User ceph
Host ceph-osd1
Hostname ceph-osd1
User ceph
如果不添加此文件,每次在执行ceph-deploye命令的时候需要指定 –username选项
修改文件权限
# chown 600 /home/ceph/.ssh/config
1.3 部署对象存储集群
在这个过程中,我们创建一个对象存储集群,包括一个ceph monitor和三个ceph osd daemon。
当这个集群达到 active+clean 的状态时,再扩展这个集群,添加一个元数据服务器(metadate server)和更多的ceph monitor
ceph-deploy命令会输出文件到当前目录下,并且会利用输出的文件。在整个执行的过程中,我们都是用ceph用户
(1)切换到ceph 用户
# su – ceph
(2)创建命令执行目录并授权给ceph
$ sudo mkdir /my-cluster
$ sudo chown ceph:ceph /my-cluster
$ cd /my-cluster
(3)创建集群
$ ceph-deploy new ceph-mon
(4)为所有节点安装部署ceph
$ ceph-deploy install ceph-mon ceph-osd0 ceph-osd1
此步骤可以所有节点单独离线安装:
# yum install -y redhat-lsb
# yum -y install ceph ceph-radosgw
(5)添加ceph monitor
$ ceph-deploy mon create-initial
(6)添加osds
$ ceph-deploy osd prepare ceph-mon:/dev/sdb1 ceph-osd0:/dev/sdb1 ceph-osd1:/dev/sdb1
$ ceph-deploy osd activate ceph-mon:/dev/sdb1 ceph-osd0:/dev/sdb1 ceph-osd1:/dev/sdb1
(7)拷贝配置文件和admin key到admin节点和其他节点
$ ceph-deploy admin ceph-mon ceph-osd0 ceph-osd1
$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
拷贝之后可以使用ceph命令行而不用指定monitor地址和ceph.client.admin.keyring
(8)查看ceph状态
$ ceph health
$ ceph status (或者$ ceph -s)
(9)添加元数据服务器(mds)
$ ceph-deploy mds create ceph-mon
接下来就可以使用ceph了
1.4 添加存储
ceph可以用作文件存储、块存储、对象存储。这里以块存储来演示ceph的使用
(1)创建存储池(pools)
[ceph@ceph-osd1 ~]$ ceph osd pool create ceph-pool 256 256
(2)创建块存储设备
[[email protected]-osd1 ~]$ rbd create ceph-block --size 200 --pool ceph-pool
(3)将块存储设备映射到本地并挂载使用
[ceph@ceph-osd1 ~]$ sudo modprobe rbd
[ceph@ceph-osd1 ~]$ sudo rbd map ceph-block --pool ceph-pool
/dev/rbd0
[ceph@ceph-osd1 ~]$ rbd showmapped
id pool image snap device
0 ceph-pool ceph-block - /dev/rbd0
(4)格式化存储设备,并挂载
[ceph@ceph-osd1 ~]$ sudo mkfs.ext4 /dev/rbd0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=4096 blocks, Stripe width=4096 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[ceph@ceph-osd1 ~]$ sudo mount /dev/rbd0 /mnt
[ceph@ceph-osd1 ~]$ ls /mnt
lost+found
参考资料:
http://my.oschina.net/JerryBaby/blog/331803?fromerr=Y03IQX56