简介
Ceph是一个可无限伸缩的开源分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性,它基于RADOS实现。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用,RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
ceph特点
高性能
1,摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。
2,考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
3,能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据。
高可用性
1,副本数可以灵活控制。
2,支持故障域分隔,数据强一致性。
3,多种故障场景自动进行修复自愈。
4,没有单点故障,自动管理。
高可扩展性
1,去中心化。
2,扩展灵活。
3,随着节点增加而性能线性增长。
特性丰富
- 支持三种存储接口:块存储、文件存储、对象存储。
- 支持自定义接口,支持多种语言驱动。
Ceph部署(版本:12.2.13-luminous)
环境准备
-
三台机器为centos7系统,根据ceph官方建议,对kernel使用elrepo源进行了升级,版本为5.4.103
-
三台机器都设置hostname,并将/etc/hosts文件添加如下映射
10.0.1.170 ceph-170 10.0.1.171 ceph-171 10.0.1.172 ceph-172
-
所有机器关闭防火墙和selinux
-
每台机器准备两块数据盘。这里我的数据盘是/dev/xvdc和/dev/xvde
-
所有机器创建阿里云源
cat << EOF >> /etc/yum.repos.d/ceph.repo [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/ gpgcheck=0 priority=1 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/ gpgcheck=0 priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS gpgcheck=0 priority=1 EOF
-
打通170到本机170,171,172的ssh免密登录,这里用ssh-copy-id即可
-
所有节点安装ntp时间服务器:
yum install -y ntp && systemctl start ntpd
安装配置ceph存储
在ceph1上执行,以初始化:
-
安装部署工具:
yum install -y ceph-deploy
-
创建配置文件目录:
mkdir /etc/ceph && cd /etc/ceph
-
新建集群:
ceph-deploy new ceph-170
-
安装集群:
ceph-deploy install ceph-170 ceph-171 ceph-172
-
在ceph1上执行,修改配置文件
cat << EOF >> /etc/ceph/ceph.conf public_network = 10.0.1.0/24 mon_allow_pool_delete = true [mgr] mgr modules = dashboard EOF
-
同步配置文件:
scp /etc/ceph/ceph.conf ceph-171:/etc/ceph/ && scp /etc/ceph/ceph.conf ceph-172:/etc/ceph/
-
在节点开启mon服务:
ceph-deploy mon create ceph-170 ceph-171 ceph-172
-
收集所有节点的key:
ceph-deploy gatherkeys ceph-170 ceph-171 ceph-172
-
列举磁盘:
ceph-deploy disk list ceph-170 && ceph-deploy disk list ceph-171 && ceph-deploy disk list ceph-172
-
擦净磁盘:
ceph-deploy disk zap ceph-170 /dev/xvdc /dev/xvde && ceph-deploy disk zap ceph-171 /dev/xvdc /dev/xvde && ceph-deploy disk zap ceph-172 /dev/xvdc /dev/xvde
-
添加osd:
ceph-deploy osd create --data /dev/xvdc ceph-170 && ceph-deploy osd create --data /dev/xvde ceph-170 && ceph-deploy osd create --data /dev/xvdc ceph-171 ceph-deploy osd create --data /dev/xvd3 ceph-171 && ceph-deploy osd create --data /dev/xvdc ceph-172 && ceph-deploy osd create --data /dev/xvde ceph-172
-
开启ceph manager(mgr)服务:
ceph-deploy mgr create ceph-170 ceph-171 ceph-172
-
同步配置文件和key:
ceph-deploy admin ceph-170 ceph-171 ceph-172
-
开启图形化界面:
ceph mgr module enable dashboard
-
开始ceph mds服务:
ceph-deploy mds create ceph-170 ceph-171 ceph-172
-
查看集群状态:
ceph -s
存储池和块存储
-
创建一个存储池(这里存储池默认副本为3,容量为所有osd空间/3,pg数量为128,因为每个osd最大pg数量为250,这里是6块盘,最大就是1500个pg,而pool副本为3,如果设置512个pg,就会占用512*3,超过pg最大值,会报错,看需求设置,我这里是128):
ceph osd pool create mypool 128
-
为存储池开启rgw:
ceph osd pool application enable mypool rgw
-
修改pool副本数量为2个,默认是3个:
ceph osd pool set mypool size 2
-
查看pool副本:
ceph osd pool get mypool size
-
查看所有存储池:
ceph osd lspools
-
创建一个映像(这里是在存储池mypool下创建一个testdev的块设备,大小为10240mb,也就是10G):
rbd create mypool/testdev --size 10240 --image-feature=layering
-
查看映像属性:
rbd info mypool/testdev
-
映射到块设备:
rbd map mypool/testdev --id admin
-
查看映射的块设备(这里直接格式话块设备就能当正常磁盘使用挂载):
rbd showmapped
-
外部机器设备使用该映像?这里其他机器使用iscsi远程挂载磁盘,k8s里用ceph-common挂载到pod
文件系统cephfs
-
创建两个pool,一个放置fs的元数据,一个放置普通数据:
ceph osd pool create mydata 128 && ceph osd pool create mymedata 128
-
pool开启rgw:
ceph osd pool application enable mydata rgw && ceph osd pool application enable mymedata rgw
-
pool开启cephfs:
ceph osd pool application enable mydata cephfs --yes-i-really-mean-it && ceph osd pool application enable mymedata cephfs --yes-i-really-mean-it
-
创建cephfs(这里就可以像nfs一样作为文件系统被外置挂载了):
ceph fs new k8sfs mymedata mydata
-
查看cephfs列表:
ceph fs ls
-
获取机器的key:
cat /etc/ceph/ceph.client.admin.keyring
-
其他机器客户端挂载,linux内核3.1以上:
mount -t ceph -o name=admin,secret=上面获取的key值 10.0.1.170:6789,10.0.1.171:6789,10.0.1.172:6789:/data/ /cephfs/
-
安装ceph fuse,客户端创建目录:
yum install ceph-fuse && mkdir /etc/ceph/
-
使用ceph fuse挂载,服务端拷贝ceph的conf和key到客户端目录:
scp /etc/ceph/ceph.conf客户端ip:/etc/ceph/ceph.conf && scp /etc/ceph/ceph.client.admin.keyring 客户端ip:/etc/ceph/ceph.client.admin.keyring
-
使用ceph fuse挂载:
ceph-fuse -m 10.0.1.170:6789 /cephfs/
-
K8s内挂载安装ceph-fuse即可,内部的pod可直接挂载
新增或删除节点
新增节点
-
将新的节点ip,这里我是10.0.1.186,加入到原来ceph集群的节点hosts内,原3个节点执行:
echo '10.0.1.186 ceph-186' >> /etc/hosts
-
给新节点186配置hosts
cat << EOF >> /etc/hosts 10.0.1.170 ceph-170 10.0.1.171 ceph-171 10.0.1.172 ceph-172 10.0.1.186 ceph-186 EOF
-
给新节点配置ceph阿里源
cat << EOF >> /etc/yum.repos.d/ceph.repo [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/ gpgcheck=0 priority=1 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/ gpgcheck=0 priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS gpgcheck=0 priority=1 EOF
-
在配置节点(安装了ceph-deploy)上,这里是10.0.1.170执行:
cd /etc/ceph && ceph-deploy install ceph-186
-
在配置节点执行,拷贝配置文件:
scp /etc/ceph/ceph.conf ceph-186:/etc/ceph/ && scp /etc/ceph/ceph.client.admin.keyring ceph-186:/etc/ceph/
-
在配置节点执行,添加186mon节点:
ceph-deploy mon create ceph-186
-
在配置节点执行,收集186节点key:
ceph-deploy gatherkeys ceph-186
-
在配置节点执行,列举磁盘:
ceph-deploy disk list ceph-186
-
在配置节点执行,擦净磁盘:
ceph-deploy disk zap ceph-186 /dev/xvdc && ceph-deploy disk zap ceph-186 /dev/xvde
-
在配置节点执行,添加186mgr节点:
ceph-deploy mgr create ceph-186
-
在配置节点执行,添加186mds节点:
ceph-deploy mds create ceph-186
-
在配置节点执行,添加186osd节点:
ceph-deploy osd create --data /dev/xvdc ceph-186 && ceph-deploy osd create --data /dev/xvde ceph-186
-
在186上执行,开启图形界面:
ceph mgr module enable dashboard
-
这时已经添加完成,查看集群状态,执行:
ceph -s
删除节点
-
删除一个mon节点,例如186,执行:
ceph-deploy mon destroy ceph-186
-
删除一个mgr节点,例如186,执行:
ceph-deploy mgr destroy ceph-186
-
删除一个mds节点,例如186,执行:
ceph-deploy mds destroy ceph-186
-
如果有磁盘或机器故障需要更换或者移除一个osd节点
-
先在ceph管理界面的osds查看需要移除的osd磁盘id编号(这里我拿osd 7来举例)
-
如果是磁盘故障或是更换而机器正常,执行:
systemctl stop ceph-osd@7.service
-
如果是机器故障,则从这一步开始,osd踢出集群,执行:
ceph osd out osd.7
-
从crush中移除节点,让集群crush重新计算,执行:
ceph osd crush remove osd.7
-
删除osd节点,执行:
ceph osd rm osd.7
-
删除osd节点认证,不删编号会被占用,执行:
ceph auth del osd.7
-
这样就移除成功了
-
如果需要从集群中移除osd的hosts节点,执行:
ceph osd crush rm ceph-187
-
其他osd的操作
-
查看osd简单状态,执行:
ceph osd stat
-
查看osd的详细状态,执行:
ceph osd dump
-
查看指定osd的详细状态,执行:
ceph osd dump 7
-
查看osd目录树,执行:
ceph osd tree
-
下线osd,让osd不接受读写请求,但osd仍存活,执行:
ceph osd down 7
-
上线osd,让osd接受读写请求,执行:
ceph osd up 7
-
暂停osd集群,执行:
ceph osd pause
-
重新开启osd集群,执行:
ceph osd unpause
如果觉得该文章对你有帮助的话请给我点个👍吧,感谢