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