CEPH简介
CEPH是一个开源的项目,它是软件定义的、同一的存储解决方案。CEPH是一个可大规模扩展、高性能并且无单点故障的分布式存储系统。从一开始它就运行在通用的商用的硬件上,具有高度的可伸缩性,容量可扩展至EB界别,甚至更大
CEPH架构
1、相关名词解释
- RADOS:Reliable Autonomic Distributed Object Store(可靠的,自主的,分布式的对象存储)。在 ceph 中这个名词经常出现,有时会以 R 表示 RADOS。实际上这个词仅仅是对 ceph 的一个修饰词,并不代表 ceph 的组件什么的。粗暴的认为, RADOS = ceph 对象存储集群即可
- RGW:对象存储网关,也就是对象存储接口
- RBD:块设备,也就是块存储接口
- CEPH FS:ceph 文件系统,也就是文件级存储接口
2、CEPH基础架构
- CEPH组件主要分分为两部分:
Ceph Node:构成Ceph集群的基础组件
Ceph Client:对外提供多种方式使用Ceph存储的组件
3、CEPH基础组件
- OSD(ceph-osd):object storage daemon,对象存储进程。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程。换句话说,ceph 集群通过管理 OSD 来管理物理硬盘。OSD 一般功能为:存储数据、维护数据副本、数据恢复、数据再平衡以及对ceph monitor组件提供相关监控信息
- Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)和 resetful api。Manager组件开启高可用时,至少2个
- MDS(ceph-mds):Metadata server,元数据服务。为ceph 文件系统提供元数据服务(ceph 对象存储和块存储不需要MDS)。为 posix 文件系统用户提供性能良好的基础命令(ls,find等)
- Monitor(ceph-mon):维护集群的状态,包含monitor组件信息,manger 组件信息,osd组件信息,mds组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client在连接ceph集群时通过此组件进行验证。Monitor组件开启高可用时,至少3个
4、Ceph Clients
此部分介绍 ceph 对外提供各种功能的组件。其中包含:Block Device、Object Storage、Filesystem
- Block Device:块存储设备,RBD
- Object Storage: 对象存储,RGW,对外可提供 swift 、s3 接口类型restful api
- Filesystem:文件系统,CephFS。提供一个兼容POSIX的文件系统
5、Ceph存储过程
前面介绍Ceph的一些组件及对外提供的功能,这部分主要介绍Ceph的逻辑存储,这部分主要介绍Ceph的存储逻辑。在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(OBJ)
ceph 在对象存储的基础上提供了更加高级的思想。当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph因此引入了 placement group (pg)的概念。一个PG就是一组对象的集合
obj和pg之间的映射由ceph client计算得出
讨论 pg 时,不得不提的另外一个名词:pgp,pgp决定了pg和osd 之间的映射关系。一般将 pgp_num 设置成和 pg_num 一样大小。这里还有一个名词需要提一下,在ceph中会经常见到crush算法。简单来说,crush 算法就是指 ceph 中数据如何存储、读取的过程。由于ceph集群面对许多的独立项目,因此ceph还引入了ceph pool的概念用于划分不同的项目
ceph pool 是对 ceph 对象的逻辑划分,并不是物理划分
pg和ceph pool的区别:
- pg对于用户来说是透明的,只是底层的一种优化方案
- ceph pool对于用户来说,就像mysql中的database
像大多数集群软件一样,ceph 也提供了缓存的概念。称之为 Cache Tier(缓存层,在具体使用时有时会称之为缓存池)。缓存池对用户来说是透明的,因此不会改变用户的原有使用逻辑
以上缓存池的介绍,均为底层逻辑。在没有缓存池时,ceph client 直接指向存储池,在添加缓存池后,ceph client 指向缓存池,缓存池再指向存储池
CEPH集群安装部署
1、环境规划
主机名 | 操作系统 | IP地址 | 内存 | 硬盘/G |
---|---|---|---|---|
ceph01 | centos7.7 | ens33:192.168.100.101 ; ens34:192.168.7.159 | 4 | 20+1024 |
ceph02 | centos7.7 | ens33:192.168.100.102 ; ens34:192.168.7.160 | 4 | 20+1024 |
ceph03 | centos7.7 | ens33:192.168.100.103 ; ens34:192.168.7.158 | 4 | 20+1024 |
ceph04 | centos7.7 | ens33:192.168.100.104 ; ens34:192.168.7.161 | 4 | 20+1024 |
- 使用ceph01、ceph02、ceph03来搭建集群
- ceph04作为扩容部署
2、环境部署(所有节点)
(1)安装环境包
[root@localhost ~]# yum -y install wget curl net-tools bash-completion vim
(2)关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
(3)关闭核心功能
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
(4)更改主机名
[root@localhost ~]# hostnamectl set-hostname ceph01
[root@localhost ~]# hostnamectl set-hostname ceph02
[root@localhost ~]# hostnamectl set-hostname ceph03
[root@localhost ~]# hostnamectl set-hostname ceph04
(5)配置hosts文件
[root@ceph01 ~]# vim /etc/hosts
192.168.100.101 ceph01
192.168.100.102 ceph02
192.168.100.103 ceph03
192.168.100.104 ceph04
(6)配置各节点免交互登陆
[root@ceph01 ~]# ssh-keygen
[root@ceph01 ~]# ssh-copy-id root@ceph01
[root@ceph01 ~]# ssh-copy-id root@ceph02
[root@ceph01 ~]# ssh-copy-id root@ceph03
[root@ceph01 ~]# ssh-copy-id root@ceph04
(7)配置YUM源
[root@ceph01 ~]# cd /etc/yum.repos.d
[root@ceph01 yum.repos.d]# mkdir bak
[root@ceph01 yum.repos.d]# mv C* bak/
[root@ceph01 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@ceph01 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ceph01 yum.repos.d]# vimceph.repo
[ceph]
name=Ceph packages for
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[root@ceph01 yum.repos.d]# ll
总用量 12
drwxr-xr-x. 2 root root 187 3月 30 17:55 bak
-rw-r--r-- 1 root root 2523 6月 16 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 602 3月 30 18:01 ceph.repo
-rw-r--r-- 1 root root 664 5月 11 2018 epel.repo
[root@ceph01 ~]# yum update -y
3、配置时间同步
(1)在ceph01配置时间服务器
[root@ceph01 ~]# yum -y install ntpdate ntp
[root@ceph01 ~]# ntpdate ntp1.aliyun.com
#把当前系统时间写入到CMOS中
[root@ceph01 ~]# clock -w
[root@ceph01 ~]# vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default nomodify
restrict 127.0.0.1
restrict ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap fudge 127.127.1.0 stra
tum 10
server 127.127.1.0
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
[root@ceph01 ~]# systemctl start ntpd
(2)在ceph02、ceph03、ceph04上同步时间源
[root@ceph02 ~]# yum -y install ntpdate
[root@ceph02 ~]# ntpdate ceph01
[root@ceph02 ~]# crontab -e
*/30 * * * * /usr/bin/ntpdate ceph01 >> /var/log/ntpdate.log
[root@ceph02 ~]# systemctl restart crond
4、ceph集群搭建
(1)在所有节点创建ceph配置文件目录
[root@ceph01 ~]# mkdir /etc/ceph
(2)在ceph01上安装工具包
[root@ceph01 ~]# yum -y install python-setuptools
[root@ceph01 ~]# yum -y install ceph-deploy
(3)在所有节点上安装ceph软件包
[root@ceph01 ~]# yum -y install ceph
(4)登陆ceph01创建mon
[root@ceph01 ~]# cd /etc/ceph/
[root@ceph01 ceph]# ceph-deploy new ceph01 ceph02 ceph03
#初始化mon并收集密钥
[root@ceph01 ceph]# ceph-deploy mon create-initial
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 //此处显示mon创建成功
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
(5)登陆ceph01创建osd
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph01
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph02
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph03
[root@ceph01 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 2.99698 root default
-3 0.99899 host ceph01
0 hdd 0.99899 osd.0 up 1.00000 1.00000
-5 0.99899 host ceph02
1 hdd 0.99899 osd.1 up 1.00000 1.00000
-7 0.99899 host ceph03
2 hdd 0.99899 osd.2 up 1.00000 1.00000
[root@ceph01 ceph]# ceph osd stat
3 osds: 3 up, 3 in; epoch: e13
#下发密钥到节点ceph02、ceph03
[root@ceph01 ceph]# ceph-deploy admin ceph02 ceph03
#在各节点给密钥增加权限
[root@ceph01 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph02 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph03 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_WARN
no active mgr
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: no daemons active
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
(6)创建mgr管理服务
[root@ceph01 ceph]# ceph-deploy mgr create ceph01 ceph02 ceph03
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph01(active), standbys: ceph02, ceph03
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 3.0 TiB / 3.0 TiB avail
pgs:
(7)创建ceph集群管理页面
#在创建之前要确认集群的状态,不能有错误
#启用dashboard模块
[root@ceph01 ceph]# ceph mgr module enable dashboard
#创建https证书
[root@ceph01 ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created
#查看mgr服务
[root@ceph01 ceph]# ceph mgr services
{
"dashboard": "https://ceph01:8443/"
}
#设置账号密码
[root@ceph01 ceph]# ceph dashboard set-login-credentials admin 123
Username and password updated
使用浏览器打开https://192.168.100.101:8443
即可登录查看
5、ceph扩容
(1)扩容osd(在ceph01上操作)
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph04^C
[root@ceph01 ceph]# ceph osd stat
4 osds: 4 up, 4 in; epoch: e17
(2)扩容mon(在ceph01上操作)
[root@ceph01 ceph]# vim ceph.conf
将ceph04主机名、IP地址新增到配置文件中
mon_initial_members = ceph01, ceph02, ceph03, ceph04
mon_host = 192.168.100.101,192.168.100.102,192.168.100.103,192.168.7.104
#配置ceph内部通信网段
public network = 192.168.100.0/24
#重新下发密钥到各个节点
[root@ceph01 ceph]# ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03 ceph04
#在ceph04给下发的密钥增加权限
[root@ceph04 ceph]# chmod +x ceph.client.admin.keyring
#在ceph01添加ceph04到mon
[root@ceph01 ceph]# ceph-deploy mon add ceph04
[root@ceph01 ceph]# systemctl restart ceph-mon.target
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_OK
services:
mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04 //此处显示添加成功
mgr: ceph01(active), standbys: ceph03, ceph02
osd: 4 osds: 4 up, 4 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 4.0 GiB used, 4.0 TiB / 4.0 TiB avail
pgs:
(3)mgr添加节点ceph04
[root@ceph01 ceph]# ceph-deploy mgr create ceph04^C
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_WARN
clock skew detected on mon.ceph02
services:
mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04
mgr: ceph01(active), standbys: ceph03, ceph02, ceph04
osd: 4 osds: 4 up, 4 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 4.0 GiB used, 4.0 TiB / 4.0 TiB avail
pgs:
6、osd数据恢复
(1)故障模拟(ceph01上操作)
[root@ceph01 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.99597 root default
-3 0.99899 host ceph01
0 hdd 0.99899 osd.0 up 1.00000 1.00000
-5 0.99899 host ceph02
1 hdd 0.99899 osd.1 up 1.00000 1.00000
-7 0.99899 host ceph03
2 hdd 0.99899 osd.2 up 1.00000 1.00000
-9 0.99899 host ceph04
3 hdd 0.99899 osd.3 up 1.00000 1.00000
#移除osd.2
[root@ceph01 ceph]# ceph osd out osd.2
#删除osd.2
[root@ceph01 ceph]# ceph osd crush remove osd.2
#删除osd.2的认证
[root@ceph01 ceph]# ceph auth del osd.2
#彻底删除osd.2
[root@ceph01 ceph]# ceph osd rm osd.2
#在ceph03重启osd服务
[root@ceph03 ~]# systemctl restart ceph-osd.target
#查看osd状态,osd.2的状态变成了down
[root@ceph01 ceph]# ceph osd tree
......
-7 0.99899 host ceph03
2 osd.2 down 1.00000
......
(2)恢复osd到集群(在ceph03上操作)
#查看ceph信息
[root@ceph03 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
......
tmpfs tmpfs 1.9G 52K 1.9G 1% /var/lib/ceph/osd/ceph-2
[root@ceph03 ~]# cd /var/lib/ceph/osd/ceph-2
#查看fsid
[root@ceph03 ceph-2]# more fsid
e99fd891-a32b-4e33-8934-b7a6c3158e8f
#ceph创建uuid
[root@ceph03 ceph-2]# ceph osd create e99fd891-a32b-4e33-8934-b7a6c3158e8f
#增加权限
[root@ceph03 ceph-2]# ceph auth add osd.2 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-2/keyring
#0.99899是权重,host=主机名
[root@ceph03 ceph-2]# ceph osd crush add 2 0.99899 host=ceph03
[root@ceph03 ceph-2]# ceph osd in osd.2
[root@ceph03 ceph-2]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.99597 root default
-3 0.99899 host ceph01
0 hdd 0.99899 osd.0 up 1.00000 1.00000
-5 0.99899 host ceph02
1 hdd 0.99899 osd.1 up 1.00000 1.00000
-7 0.99899 host ceph03
2 hdd 0.99899 osd.2 up 1.00000 1.00000
-9 0.99899 host ceph04
3 hdd 0.99899 osd.3 up 1.00000 1.00000
[root@ceph03 ceph-2]# systemctl restart ceph-osd.target