ceph简介


Ceph是一个具有高扩展、高可用、高性能的分布式存储系统,根据场景划分可以将Ceph分为对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储。比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。
Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡。同时由于Ceph本身的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。



ceph 目前提供对象存储(RADOSGW)、块存储RDB以及 CephFS 文件系统这 3 种功能。对于这3种功能介绍,分别如下:

1.对象存储,也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;

2.块存储,这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,×××的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;

3.文件存储,通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;


ceph组件介绍

Ceph的核心构成包括:Ceph OSD(对象存出设备)、Ceph Monitor(监视器) 、Ceph MSD(元数据服务器)、Object、PG、RADOS、Libradio、CRUSH、RDB、RGW、CephFS

OSD:全称 Object Storage Device,真正存储数据的组件,一般来说每块参与存储的磁盘都需要一个 OSD 进程,如果一台服务器上又 10 块硬盘,那么该服务器上就会有 10 个 OSD 进程。

MON:MON通过保存一系列集群状态 map 来监视集群的组件,使用 map 保存集群的状态,为了防止单点故障,因此 monitor 的服务器需要奇数台(大于等于 3 台),如果出现意见分歧,采用投票机制,少数服从多数。

MDS:全称 Ceph Metadata Server,元数据服务器,只有 Ceph FS 需要它。

Object:Ceph 最底层的存储单元是 Object 对象,每个 Object 包含元数据和原始数据。

PG:全称 Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。

RADOS:全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,可靠自主分布式对象存储,它是 Ceph 存储的基础,保证一切都以对象形式存储。

Libradio:Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前仅提供PHP、Ruby、Java、Python、C和C++支持。

CRUSH:是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

RBD:全称 RADOS block device,它是 RADOS 块设备,对外提供块存储服务。

RGW:全称 RADOS gateway,RADOS网关,提供对象存储,接口与 S3 和 Swift 兼容。

CephFS:提供文件系统级别的存储。


ceph集群服务器规划

名称 ip 系统
硬盘 角色
node1 192.168.0.198 centos7.2(最小化)2核2G sda系统盘30G,sdb20G,sdc20G mon,osd,mgr,deploy
node2 192.168.0.199 centos7.2(最小化)2核2G sda系统盘30G,sdb20G,sdc20G mon,osd,mgr
node3 192.168.0.200 centos7.2(最小化)2核2G sda系统盘30G,sdb20G,sdc20G mon,osd,mgr


服务器环境准备(三台机器)


安装centos7.2系统,最小化安装

设置好网络和防火墙  网络需要能访问外网,

ip 192.168.0.198

下面关闭防火墙

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux


设置yum源

cd /etc/yum.repos.d/

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install epel-release 

yum -y install vim wget lrzsz net-tools

然后清理掉其他yum源文件


ceph源

/etc/yum.repos.d/ceph.repo

[Ceph]

name=Ceph packages for $basearch

baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/$basearch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc


[Ceph-noarch]

name=Ceph noarch packages

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

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc


[ceph-source]

name=Ceph source packages

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

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc


配置主机名

hostnamectl set-hostname node1

hostname node1    ##198机器

hostnamectl set-hostname node2

hostname node2    ##199机器

hostnamectl set-hostname node3

hostname node3    ##200机器


增加hosts解析

vi /etc/hosts

192.168.0.198 node1

192.168.0.199 node2

192.168.0.200 node3


时间同步

yum install ntpdate -y

ntpdate 0.asia.pool.ntp.org

crontab -e

*/5 * * * * ntpdate 0.asia.pool.ntp.org


配置python2.7环境

cd /tmp

wget https://files.pythonhosted.org/packages/ed/69/c805067de1feedbb98c53174b0f2df44cc05e0e9ee73bb85eebc59e508c6/setuptools-41.0.0.zip

wget https://files.pythonhosted.org/packages/36/fa/51ca4d57392e2f69397cd6e5af23da2a8d37884a605f9e3f2d3bfdc48397/pip-19.0.3.tar.gz

unzip setuptools-41.0.0.zip 

cd setuptools-41.0.0

python setup.py install

tar zxf pip-19.0.3.tar.gz 

 cd pip-19.0.3

 python setup.py install


配置免密登录

ssh-keygen -t rsa -P ""

ssh-copy-id 192.168.0.198

ssh-copy-id 192.168.0.199

ssh-copy-id 192.168.0.200

ssh node1

ssh node2

ssh node3


=================================================

安装ceph

yum -y install ceph-deploy  (node1上)

查看版本

ceph-deploy --version

创建安装目录

mkdir /ceph-install && cd /ceph-install

创建ceph集群

ceph-deploy new node1 node2 node3

全部节点安装ceph (时间会比较长)

ceph-deploy install node1 node2 node3

或在节点上手动执行 yum install -y ceph

安装mon监控(会生成秘钥文件)

ceph-deploy mon create-initial

监控在/ceph-install 目录下执行,秘钥文件也会保存在这个目录

需要把秘钥文件复制到/etc/ceph/目录,才能正常执行ceph集群命令  如ceph -s

cp *.keyring /etc/ceph/

[root@localhost ceph-install]# ll
总用量 476
-rw------- 1 root root     71 4月  22 14:56 ceph.bootstrap-mds.keyring
-rw------- 1 root root     71 4月  22 14:56 ceph.bootstrap-mgr.keyring
-rw------- 1 root root     71 4月  22 14:56 ceph.bootstrap-osd.keyring
-rw------- 1 root root     71 4月  22 14:56 ceph.bootstrap-rgw.keyring
-rw------- 1 root root     63 4月  22 14:56 ceph.client.admin.keyring
-rw-r--r-- 1 root root    238 4月  22 14:24 ceph.conf
-rw-r--r-- 1 root root 434608 4月  22 14:56 ceph-deploy-ceph.log
-rw------- 1 root root     73 4月  22 14:24 ceph.mon.keyring

查看集群 ceph -s

[root@localhost ceph-install]# ceph -s
  cluster:
    id:     ed5d45f5-d722-4a3d-970b-d5936617919c
    health: HEALTH_OK
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:

创建OSD

 ceph-deploy osd create node1 --data /dev/sdb

 ceph-deploy osd create node1 --data /dev/sdc

 ceph-deploy osd create node2 --data /dev/sdb

 ceph-deploy osd create node2 --data /dev/sdc

 ceph-deploy osd create node3 --data /dev/sdb

 ceph-deploy osd create node3 --data /dev/sdc


把配置及admin秘钥放到各个节点

ceph-deploy --overwrite-conf admin node1 node2 node3


部署mgr

ceph-deploy mgr create node1 node2 node3


查看ceph状态

[root@localhost ceph-install]# ceph -s
  cluster:
    id:     ed5d45f5-d722-4a3d-970b-d5936617919c
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: node1(active), standbys: node3, node2
    osd: 6 osds: 6 up, 6 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   6.02GiB used, 114GiB / 120GiB avail
    pgs:

查看osd状态

[root@localhost ceph-install]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1       0.11691 root default                           
-3       0.03897     host node1                         
 0   hdd 0.01949         osd.0      up  1.00000 1.00000 
 1   hdd 0.01949         osd.1      up  1.00000 1.00000 
-5       0.03897     host node2                         
 2   hdd 0.01949         osd.2      up  1.00000 1.00000 
 3   hdd 0.01949         osd.3      up  1.00000 1.00000 
-7       0.03897     host node3                         
 4   hdd 0.01949         osd.4      up  1.00000 1.00000 
 5   hdd 0.01949         osd.5      up  1.00000 1.00000


cephFS 创建存储池与文件系统

ceph-fs需要元数据mds服务

所有osd上都创建mds服务

ceph-deploy mds create node1 node2 node3

接着创建poll存储池和名为data的文件系统

ceph osd pool create data_data 32

ceph osd pool create data_metadata 32

ceph fs new data data_metadata data_data

查看存储池和文件系统

ceph osd pool ls

ceph fs ls


客户端挂载

找一个客户机器,安装ceph-fuse挂载文件系统

mkdir /guazai

首先安装  yum install -y ceph-fuse

然后将ceph集群的配置文件和ceph.client.admin.keyring认证文件复制过来,注意keyring名称变化

scp 192.168.0.198:/etc/ceph/ceph.conf /etc/ceph/

scp 192.168.0.198:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.keyring


执行挂载

ceph-fuse -m 192.168.0.198,192.168.0.199,192.168.0.200:6789 /guazai

[root@node1 ceph]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        28G  3.6G   25G   13% /
devtmpfs        904M     0  904M    0% /dev
tmpfs           913M     0  913M    0% /dev/shm
tmpfs           913M  8.7M  904M    1% /run
tmpfs           913M     0  913M    0% /sys/fs/cgroup
/dev/sda1       297M  109M  189M   37% /boot
tmpfs           913M   24K  913M    1% /var/lib/ceph/osd/ceph-1
tmpfs           913M   24K  913M    1% /var/lib/ceph/osd/ceph-0
tmpfs           183M     0  183M    0% /run/user/0
ceph-fuse        36G     0   36G    0% /guazai


RDB块存储方式

查看存储池

ceph osd  pool ls

创建存储池

ceph osd pool create cephrbd 256

创建名为image的镜像大小10G

rbd create cephrbd/image --image-feature layering --size 10G

查看池中镜像及信息

rbd ls cephrbd

rbd info cephrbd/image

[root@node1 ~]#  rbd ls cephrbd
image
[root@node1 ~]# rbd info cephrbd/image
rbd image 'image':
	size 10GiB in 2560 objects
	order 22 (4MiB objects)
	block_name_prefix: rbd_data.111e6b8b4567
	format: 2
	features: layering
	flags: 
	create_timestamp: Mon Apr 22 17:51:43 2019

镜像扩容

rbd resize --size 15G cephrbd/image

[root@node1 ~]#  rbd resize --size 15G cephrbd/image
Resizing image: 100% complete...done.

镜像缩容

 rbd resize --size 12G cephrbd/image --allow-shrink

[root@node1 ~]# rbd resize --size 12G cephrbd/image --allow-shrink
Resizing image: 100% complete...done.

删除镜像

rbd rm cephrbd/demo-img


客户端挂载使用磁盘镜像

到客户机上安装ceph-common

yum install ceph-common -y

ceph.conf 和 ceph.client.admin.keyring 拷贝到客户端机器上

scp 192.168.0.198:/etc/ceph/ceph.conf /etc/ceph/

scp 192.168.0.198:/etc/ceph/ceph.client.admin.keyring /etc/ceph/

然后用ceph -s 客户机上查看集群

接着执行ceph osd crush tunables hammer     ##防止挂载镜像missing required protocol features失败

执行挂载镜像

rbd map cephrbd/image

[root@node1 ~]# rbd map cephrbd/image
/dev/rbd0
[root@node1 ~]# lsblk
NAME                                                                                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                                                                                                     8:0    0   30G  0 disk 
├─sda1                                                                                                  8:1    0  300M  0 part /boot
├─sda2                                                                                                  8:2    0    2G  0 part [SWAP]
└─sda3                                                                                                  8:3    0 27.7G  0 part /
sdb                                                                                                     8:16   0   20G  0 disk 
└─ceph--94d4a7fb--5998--42d2--8420--c8486f5f6ed9-osd--block--39bf5af2--aefa--4e1c--881e--7535f273f588 253:0    0   20G  0 lvm  
sdc                                                                                                     8:32   0   20G  0 disk 
└─ceph--a76198d8--61d8--4c1a--84d1--c9a0ef0dd806-osd--block--3baaa769--1396--4d2f--8692--189fd23cc68e 253:1    0   20G  0 lvm  
sr0                                                                                                    11:0    1    4G  0 rom  
rbd0                                                                                                  252:0    0   12G  0 disk

查看磁盘映射信息

rbd showmapped

[root@node1 ~]# rbd showmapped
id pool    image snap device    
0  cephrbd image -    /dev/rbd0

格式化、挂载 /dev/rbd0

mkfs.ext4 /dev/rbd0

[root@node1 ~]# mkdir /image

[root@node1 ~]# mount /dev/rbd0 /image

[root@node1 ~]# echo -e "/dev/rbd0 /image ext4 defaults 0 0" >> /etc/fstab

[root@node1 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        28G  3.6G   25G   13% /
devtmpfs        904M     0  904M    0% /dev
tmpfs           913M     0  913M    0% /dev/shm
tmpfs           913M  8.7M  904M    1% /run
tmpfs           913M     0  913M    0% /sys/fs/cgroup
/dev/sda1       297M  109M  189M   37% /boot
tmpfs           913M   24K  913M    1% /var/lib/ceph/osd/ceph-1
tmpfs           913M   24K  913M    1% /var/lib/ceph/osd/ceph-0
tmpfs           183M     0  183M    0% /run/user/0
/dev/rbd0        12G   41M   12G    1% /image


为镜像创建快照

rbd snap create cephrbd/image --snap image-sn1

查看快照

rbd snap ls cephrbd/image

[root@node1 image]# rbd snap ls cephrbd/image
SNAPID NAME       SIZE TIMESTAMP                
     4 image-sn1 12GiB Mon Apr 22 19:24:50 2019

删除快照

rbd snap remove cephrbd/image@image-sn1

[root@node1 ~]# rbd snap remove cephrbd/image@image-sn1
Removing snap: 100% complete...done.



rdb在线扩容

查看设备

[root@node1 image]# rbd showmapped
id pool    image snap device    
0  cephrbd image -    /dev/rbd0 
[root@node1 image]# rbd info cephrbd/image
rbd image 'image':
	size 12GiB in 3072 objects
	order 22 (4MiB objects)
	block_name_prefix: rbd_data.111e6b8b4567
	format: 2
	features: layering
	flags: 
	create_timestamp: Mon Apr 22 17:51:43 2019

12G扩容到20G

  rbd resize --size 20480 cephrbd/image

[root@node1 image]#  rbd resize --size 20480 cephrbd/image
Resizing image: 100% complete...done.

扩容格式化

resize2fs /dev/rbd0    

[root@node1 image]# resize2fs /dev/rbd0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/rbd0 is mounted on /image; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/rbd0 is now 5242880 blocks long.
[root@node1 image]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        28G  3.6G   25G   13% /
devtmpfs        904M     0  904M    0% /dev
tmpfs           913M     0  913M    0% /dev/shm
tmpfs           913M  8.7M  904M    1% /run
tmpfs           913M     0  913M    0% /sys/fs/cgroup
/dev/sda1       297M  109M  189M   37% /boot
tmpfs           913M   24K  913M    1% /var/lib/ceph/osd/ceph-1
tmpfs           913M   24K  913M    1% /var/lib/ceph/osd/ceph-0
tmpfs           183M     0  183M    0% /run/user/0
/dev/rbd0        20G   44M   19G    1% /image

上面是ext4 格式操作。对于XFS格式要执行    xfs_growfs  -d /image  进行格式化扩容


测试参考

https://blog.51cto.com/4746316/2329558

https://www.cnblogs.com/zhangzihong/p/9771035.html

https://www.cnblogs.com/yangxiaoyi/p/7795274.html

https://blog.51cto.com/wangzhijian/2159701?source=dra

http://www.mamicode.com/info-detail-1480817.html