1 前言
Ceph是一个开源的分布式存储系统,它提供高性能(数据分布式存储)、高可用性(故障自愈)、可扩展性(支持PB级)数据存储平台。
Ceph已经被集成在主线 Linux 内核中,作为备选的文件系统,相信后期会提供更好的发展。它的社区活跃度高,资料多,便于学习。
本文转自我个人的公众号:天目星 ,请大家多多关注。
一、使用的软件版本与架构图
linux:CentOS 7.5.1804
ceph:ceph-12.2.12
ceph-deploy:ceph-deploy-2.0.1
二、环境准备
主机名 | IP地址 |
node1 | 192.168.159.20 |
需要提前配置好yum源
使用阿里云源,以下操作将覆盖原repo文件,请提前备份
$ curl -o /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/epel.repo \
http://mirrors.aliyun.com/repo/epel-7.repo
安装yum插件
$ yum install yum-plugin-priorities
配置ceph的阿里云yum源
$ cat >> /etc/yum.repos.d/ceph.repo <
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
enabled=1
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
enabled=1
gpgcheck=0
[ceph-source]
name=ceph-source
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/
enabled=1
gpgcheck=0
EOF
三、安装ceph
使用ceph-deploy来部署,所以我们先安装
$ yum install python-setuptools
$ yum install ceph-deploy
四、部署ceph
我们先使用node3来部署单节点ceph
官网参考:http://docs.ceph.com/docs/master/start/quick-ceph-deploy/
创建部署目录
$ mkdir /tkscluster
$ cd /tkscluster
如非第一次部署请使用以下命令清理
ceph-deploy purge {ceph-node}[{ceph-node}]
ceph-deploy purgedata {ceph-node}[{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
在node1部署集群monitor节点
$ ceph-deploy new node1
部署ceph到相关节点
$ ceph-deploy install node1
查看刚刚安装的ceph版本
$ ceph --version
ceph version 12.2.12 (1436006594613ebd777) luminous (stable)
初始化monitor节点
$ ceph-deploy mon create-initial
完成后会生成以下key文件
[ceph_deploy.gatherkeys][INFO] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO] Destroy temp directory /tmp/tmpMPH0kA
将key文件分发到相关节点
$ ceph-deploy admin node1
部署manager节点(luminous版本)
$ ceph-deploy mgr create node1
提前装备三个硬盘/dev/{sdb,sdc,sdd}
部署osd节点
$ ceph-deploy osd create node1 --data /dev/sdb
$ ceph-deploy osd create node1 --data /dev/sdc
$ ceph-deploy osd create node1 --data /dev/sdd
检查集群状态
$ ceph health detail
HEALTH_OK
查看ceph配置
$ ceph --show-config
五、使用ceph
ceph提供块存储、文件存储、对象存储三种接口,它们各有优缺点。
块存储:具有优异优异的读写性能,但不能多处挂载同时读写
文件存储:可以多挂载多读写,但读写性能较差
对象存储:支持多挂载多读写,并且性能介于上述两个接口之间
这里主要介绍块设备的搭建
1、配置块存储设备
创建pool
在osd创建pool,pg_num可以根据以上公式计算
目前有3个osd,"pool size"默认为3
$ ceph osd pool create tkspool 128
pool 'tkspool' created
查看所有池的参数
$ ceph osd dump |grep pool
单节点测试环境,修改min_size值为1
$ ceph osd pool set tkspool min_size 1
set pool 3 min_size to 1
查看ceph实时运行情况
$ ceph -s
cluster:
id: 8eaa6787-4825-420c-a354-5209b5e5fc17
health: HEALTH_OK
services:
mon: 1 daemons, quorum node1
mgr: node1(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 1 pools, 128 pgs
objects: 0 objects, 0B
usage: 3.01GiB used, 12.0GiB / 15.0GiB avail
pgs: 128 active+undersized
查看已创建的pool
$ ceph osd lspools
1 tkspool,
查看存储池统计信息
$ rados df
删除pool
$ ceph osd pool delete tkspool tkspool --yes-i-really-really-mean-it
pool 'tkspool' removed
PS:删除pool需要在/etc/ceph/ceph.conf添加以下配置
$ cat >> /etc/ceph/ceph.conf << EOF
mon_allow_pool_delete = true
EOF
创建rbd镜像
初始化pool以供rbd使用
$ rbd pool init tkspool
创建块设备映像
$ rbd create --size 8196 --image-feature layering tkspool/tksimage
--size:创建的块设备大小,默认单位为M
--image-feature:linux内核支持的feature
查看创建好的块设备映像信息
$ rbd info tkspool/tksimage
rbd image 'tksimage':
size 8.00GiB in 2049 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.37156b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri May 31 11:25:09 2019
使用块设备
挂载设备
$ rbd map tkspool/tksimage
/dev/rbd0
可以使用fdisk命令查看刚刚挂上盘
fdisk -l |grep rbd0
分区与格式化
可以使用fdisk /dev/rbd0 分区
也可以不分区直接格式化整个硬盘
$ mkfs.xfs /dev/rbd0
挂载已格式化的硬盘
$ mkdir /data
$ mount /dev/rbd0 /data
查看已挂载的盘
$ df -h |grep /data
/dev/rbd0 8.0G 33M 8.0G 1% /data
测试存储情况
$ dd if=/dev/zero of=/data/zero.data count=20 bs=128M
20+0 records in
20+0 records out
2684354560 bytes (2.7 GB) copied, 6.76834 s, 397 MB/s
$ ll -h /data
ll -h /data
total 2.5G
-rw-r--r-- 1 root root 2.5G May 31 11:47 zero.data