简介
Ceph是一个符合POSIX、开源的分布式存储系统。最初由Sage Weill于2007年开发,Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制。本文详细介绍了Ceph的历史和架构。
Ceph是一个软件分布式存储平台,为了确保集群中数据的分布式存储和良好的可扩展性,Ceph运用了著名的CRUSH(Controllled Replication Under Scalable Hashing)算法。Ceph开发的主要目标是提供高可扩展性和提供对象存储、块存储和文件系统的存储机制。Ceph提供一个单一的存储平台,可以处理所有类型的数据存储(包括对象、块和文件)。它的高扩展性可以达到PB级,它还拥有高容错性和高一致性数据冗余机制。
Ceph的历史
在2004年,Sage Weil开发了一个名叫Ceph的开源项目,并于2006年,基于开源协议开源了Ceph。Weil 曾经是“Inktank Storage”公司的创始人。Inktank Storage一直专注于Ceph的研发,直到它被红帽收购。2012年,Ceph的第一个稳定版本发布了。2014年10月,Ceph的开发团队发布了Ceph的第七个稳定版本Giant。为了让Ceph更加成熟与完美,这个项目还在继续开发中。
组成
一个Ceph集群由两种类型的后台进程(Daemon)组成:
OSD Daemon
Ceph Monitor
-
OSDs: Ceph的OSD守护进程(OSD)存储数据,处理数据复制,恢复,回填,重新调整,并通过检查其它Ceph OSD守护程序作为一个心跳 向Ceph的监视器报告一些检测信息。Ceph的存储集群需要至少2个OSD守护进程来保持一个 active + clean状态.(Ceph默认制作2个备份,但你可以调整它)
-
-
Monitors:Ceph的监控保持集群状态映射,包括OSD(守护进程)映射,分组(PG)映射,和CRUSH映射。 Ceph 保持一个在Ceph监视器, Ceph OSD 守护进程和 PG的每个状态改变的历史(称之为“epoch”).
-
-
MDS: MDS是Ceph的元数据服务器,代表存储元数据的Ceph文件系统(即Ceph的块设备和Ceph的对象存储不使用MDS)。Ceph的元数据服务器使用POSIX文件系统,用户可以执行基本命令如 ls, find,等,并且不需要在Ceph的存储集群上造成巨大的负载.
-
-
Ceph把客户端的数据以对象的形式存储到了存储池里。利用CRUSH算法,Ceph可以计算出安置组所包含的对象,并能进一步计算出Ceph OSD集合所存储的安置组。CRUSH算法能够使Ceph存储集群拥有动态改变大小、再平衡和数据恢复的能力。
Ceph 特点
-
Object:有原生的API,而且也兼容Swift和S3的API
-
-
Block:支持精简配置、快照、克隆
-
-
File:Posix接口,支持快照
Ceph也是分布式存储系统,它的特点是:
-
高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到PB级的扩展。
-
-
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
-
-
高性能:数据分布均衡,并行化度高。对于objects storage和block storage,不需要元数据服务器。
无论你想提供 Ceph对象存储和/或Ceph块设备服务至云平台 ,部署Ceph文件系统或者为了其他目的而使用Ceph,所有的 Ceph存储集群部署都是从设置每个Ceph节点,你的网络和Ceph存储集群开始的。
一个Ceph存储集群要求至少有一个Ceph监视器和两个Ceph OSD守护进程。当运行Ceph文件系统客户端时,必须要有Ceph元数据服务器。
Ceph提供了3种使用场景:
1、分布式文件系统CephFS。
-
多个客户端mount CephFS到本地,CephFS遵循POSIX接口,使用体验类似于ext4等本地文件系统。
-
类似于其他分布式文件系统,各个CephFS客户端共享同一命名空间。
2、RadosGW(rgw)对象存储。
-
rgw使用场景类似于Amazon S3,据个人理解也类似于七牛云存储。
3、块设备rbd(Rados Block Device)。
-
Ceph提供虚拟的rbd块设备,用户像使用SATA盘那样的物理块设备一样使用rbd。
-
-
rbd的使用是排他的,每个rbd块设备是用户私有的,相对的,CephFS的使用方式是共享的。
-
-
虚拟化和云计算的发展正当盛年,IaaS结合rbd块设备这一使用方式有如干柴遇烈火,因此rbd是Ceph 社区开发的重心之一。本文也主要从rbd的视角来了解Ceph。
安装部署:
环境说明
主机名 项目 IP
hhly001 mon 192.168.12.12
hhly002 osd 192.168.12.13
hhly003 osd 192.168.12.14
关闭 SELINUX
-
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
-
setenforce 0
打开 Ceph 需要的端口
(也可以先关闭防火墙,因为是内部测试)
-
firewall-cmd --zone=public --add-port=6789/tcp --permanent
-
firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
-
firewall-cmd --reload
安装 EPEL 软件源:
-
rpm -Uvh
-
yum -y update
-
yum -y upgrade
安装 ntp 同步时间
-
yum -y install ntp ntpdate ntp-doc
-
ntpdate 0.us.pool.ntp.org
-
hwclock --systohc
-
systemctl enable ntpd.service
-
systemctl start ntpd.service
创建用户
所有服务器上操作
-
useradd ceph
-
echo 'C6P_PHY~dzl4U' | passwd --stdin ceph
增加sudo权限
-
echo "ceph ALL = (ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
-
chmod 0440 /etc/sudoers.d/ceph
requiretty准备
-
执行命令visudo修改suoders文件:
-
注释Defaults requiretty
-
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
-
否则会出现sudo: sorry, you must have a tty to run sudo
-
增加行 Defaults visiblepw
-
否则会出现 sudo: no tty present and no askpass program specified
-
也可以这样改成这样 Defaults:ceph !requiretty
-
上面的操作在4台服务器均这样操作
Hosts修改
所有机器都需要这样添加
-
[root@hhly001 ceph]# cat /etc/hosts
-
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
-
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
-
192.168.12.12 hhly001
-
192.168.12.13 hhly002
-
192.168.12.14 hhly003
生成key,可以一路回车
-
[root@hhly001 ceph]# ssh-keygen
ssh 打通
-
[root@hhly001 .ssh]# ssh-copy-id -i id_rsa.pub ceph@hhly001
-
[root@hhly001 .ssh]# ssh-copy-id -i id_rsa.pub ceph@hhly002
-
[root@hhly001 .ssh]# ssh-copy-id -i id_rsa.pub ceph@hhly003
管理节点安装ceph-deploy部署工具
增加epel源
-
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
配置ceph yum仓库
-
[ceph@10-19-148-70 yum.repos.d]$sudo vi ceph.repo
-
[ceph-noarch]
-
name=Ceph noarch packages
-
baseurl={ceph-release}/{distro}/noarch
-
enabled=1
-
gpgcheck=1
-
type=rpm-md
-
gpgkey=
将上面的ceph-release 和distro根据自己的需求修改,比如我这边采用当前的jewel版本,distro为centos7 这里就写成el7,当然你也可以用firefly, giant ,Hammer, infernalis ,版本迭代命名方式和openstack比较像,按字母顺序来
-
[ceph-noarch]
-
name=Ceph noarch packages
-
baseurl=
-
enabled=1
-
gpgcheck=1
-
type=rpm-md
-
gpgkey=
hhly001安装ceph-deploy
-
yum update && sudo yum install ceph-deploy
创建集群设置Monitor节点
-
[root@hhly001 .ssh]# ceph-deploy hhly002 hhly003
-
[root@hhly001 ceph]# cat ceph.conf
-
[global]
-
mon_pg_warn_max_per_osd = 3000
-
mon clock drift allowed = 20
-
mon clock drift warn backoff = 30
-
fsid = 6cfd443a-59e8-4669-97d6-b9d5b6daf4b2
-
mon_initial_members = hhly001
-
mon_host = 192.168.12.12
-
auth_cluster_required = cephx
-
auth_service_required = cephx
-
auth_client_required = cephx
-
osd pool default size = 2
-
osd pool default min size = 1
-
osd pool default pg num = 512
-
osd pool default pgp num = 512
-
osd crush chooseleaf type = 1
所有节点安装ceph
-
[root@hhly001 ceph]# ceph-deploy install hhly001 hhly002 hhly003
初始化monitor节点
-
[root@hhly001 ceph]# ceph-deploy mon create-initial
-
[root@hhly001 ceph]#ceph-deploy disk list hhly002
-
[root@hhly001 ceph]#ceph-deploy disk list hhly003
-
mkdir -p /data/osd1
-
chown -R ceph.ceph osd1/
-
mkdir -p /data/osd2
-
chown -R ceph.ceph osd2/
-
[root@hhly001 ceph]#ceph-deploy osd prepare hhly002:/data/osd1 hhly003:/data/osd2
-
[root@hhly001 ceph]#ceph-deploy osd activate hhly002:/data/osd1 hhly003:/data/osd2
在hhly002上创建osd
-
注意虚拟硬盘作为一个整个盘,不要挂载,因为执行osd安装时,会自动进行格式化和挂载,如果提前挂载了其他目录,会导致无法挂载新的磁盘,安装失败
-
1、虚拟硬盘首先进行格式化
-
不同文件格式的文件系统格式化方式不一样,以下是xfs格式化命令
-
mkfs.xfs -f /dev/vdc
-
格式化多个磁盘就执行多次
-
2、列出 node1上可用的磁盘
-
[root@node1 ceph]# ceph-deploy disk list node1
-
3、disk zap子命令删除现有分区表和磁盘内容,这一步一定要确认好选择的正确的磁盘名称
-
执行如下:比如我三个硬盘 /dev/vdc /dev/vdd /dev/vde
-
[root@node1 ceph]# ceph-deploy disk zap node1:/dev/vdc node1:/dev/vdd node1:/dev/vde
-
osd create子命令准备磁盘,即默认先用xfs文件系统格式化磁盘,然后会激活磁盘的第一第二分区,分别作为数据分区和日志分区:
-
4、以上操作以后开始创建osd,执行如下命令
-
ceph-deploy osd create node1:/dev/vdc node1:/dev/vdd node1:/dev/vde
查看osd状态
-
[root@hhly001 ceph]# ceph -s
-
cluster 6cfd443a-59e8-4669-97d6-b9d5b6daf4b2
-
health HEALTH_OK
-
monmap e1: 1 mons at {hhly001=192.168.12.12:6789/0}
-
election epoch 1, quorum 0 hhly001
-
osdmap e83: 2 osds: 2 up, 2 in
-
pgmap v1004: 1792 pgs, 14 pools, 848 bytes data, 43 objects
-
10330 MB used, 1735 GB / 1745 GB avail
-
1792 active+clean
查看OSD tree
-
[root@hhly001 ceph]# ceph osd tree
-
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-
-1 3.00000 root default
-
-2 1.00000 host hhly002
-
2 1.00000 osd.2 up 1.00000 1.00000
-
-3 2.00000 host hhly003
-
3 2.00000 osd.3 up 1.00000 1.00000
部署过程只遇到一个问题:
问题解决办法:
清理原有的ceph池,新建一个池!
查询当前池方法
-
[root@hhly001 ceph]# ceph osd lspools
-
2 mytest,3 .rgw,4 .rgw.root,5 .rgw.control,6 .rgw.gc,7 .rgw.buckets,8 .rgw.buckets.index,9 .log,10 .intent-log,11 .usage,12 .users,13 .users.email,14 .users.swift,15 .users.uid,
删除 rgw池
-
[root@hhly001 ceph]# ceph osd pool delete rgw rgw --yes-i-really-really-mean-it
创建 volumes 存储池
-
[root@hhly001 ceph]# ceph osd pool create volumes 156 156
阅读(1375) | 评论(0) | 转发(0) |