安装环境是学习ceph的第一步,安装ceph的过程可以学习到非常多ceph的相关概念,尤其可以避免很多后续使用的坑
写在前面
松鼠哥的ceph专业课程上线啦!
面向新手同学,从0实战,全面入门ceph安装部署与运维,有需要的同学赶紧联系松鼠哥订购吧:
ceph的安装并没有什么难度,但是在实际操作中,不少新学ceph的同学总会遇到这样那样的部署问题,搞好久,集群也还没跑起来。实际上,ceph部署不应该在学习ceph过程中耗费太多时间和精力,初学时候,能快速部署集群,多接触、操作集群、解决集群产生的问题,才是快速成长的方式,在对ceph有一定程度的熟悉和认识后,再尝试手工部署,甚至编译集群进行安装,或许对ceph会有更深的认识。本篇总结了笔者在实际学习、部署生产环境中用到的方法和步骤,希望给新手同学一些参考
环境准备
测试环境是4台虚拟机,所有机器都是刚刚安装好系统(minimal)只配置完网卡和主机名的centos7.5
- ceph1 - osd节点和mon节点
- ceph2 - osd节点和mon节点
- ceph3 - osd节点和mon节点
- deploy - 部署节点
首先在所有节点创建一个部署、管理ceph集群的用户,并授予sudo权限,不建议使用root来运行ceph,同时关闭防火墙和selinux
1 | [root@deploy ~]# useradd cephfsd |
完成后在deploy节点使用cephfsd用户登陆,开始下一步工作
首先是hosts文件配置和免密登陆
1 | [cephfsd@deploy ~]$ cat /etc/hosts |
软件包安装
需要的软件包安装有两种方式
- 每个节点自行使用yum安装,这种方式要求所有节点都能访问外网
- 使用内部搭建的yum源安装,这种方式只需要有某个节点可以访问外网即可
不管是哪种方式,安装ceph及相关软件包都需要配置ceph源。我们使用阿里云的源
1 | [Ceph] |
第一种方式
简单粗暴,在每个节点上加入ceph源后,先安装epel-release,如果我们不安装,就会缺少部分包,会有下面的错误
1 | ... |
所以安装的命令是
1 | [cephfsd@deploy ~]$ sudo yum -y install epel-release |
第二种方式
第一种安装方式要求节点均能访问阿里云的源,但是很多时候,尤其是生产环境,这些节点是不允许访问外网的,另外,如果是测试环境,有时需要多次重装集群,每次都从外网下载也带来一些麻烦,所以这里推荐使用自建源的方式安装,自建源一劳永逸,我们在deploy节点上自建一个源
配置了ceph源并安装epel-release后,我们把ceph及相关软件包全部下载,然后搭建一个内部源,
1 | [cephfsd@deploy ~]$ sudo mkdir -p /yum/ceph/luminous |
配置内部源
1 | [cephfsd@deploy ~]$ sudo createrepo -pdo /yum/ceph/luminous/ /yum/ceph/luminous/ |
如果源的包发生变化,例如加入了新的包,或者删掉了一些旧包,需要更新xml
1 | [cephfsd@deploy ~]$ sudo createrepo --update /yum/ceph/luminous/ |
修改/etc/httpd/conf/httpd.conf
文件,然后启动httpd
1 | DocumentRoot "/yum/ceph/" |
至此,内部源就建好了,接下来到每一个安装ceph的节点,配置源指向这个内部源
1 | [cephfsd@ceph1 ~]$ cd /etc/yum.repos.d/ |
部署集群
部署集群主要是用ceph-deploy来进行
首先是初始化集群配置
1 | [cephfsd@deploy ceph-deploy]$ ceph-deploy new ceph1 ceph2 ceph3 |
初始化集群主要是生成最基本的配置文件ceph.conf
和monitor key文件ceph.mon.keyring
,我们要手动修改ceph.conf
,添加集群公网和集群网络的配置
1 | [cephfsd@deploy ceph-deploy]$ cat ceph.conf |
注意到,这里new,我们初始化三个monitor,接下来我们创建monitor
1 | [cephfsd@deploy ceph-deploy]$ ceph-deploy mon create-initial |
mon create-initial
会根据ceph.conf进行创建mon,判断monitor都创建成功后,会进行keyring的收集,这些keyring在后续创建其他成员的时候要用到,接下来我们分发集群keyring
1 | [cephfsd@deploy ceph-deploy]$ ceph-deploy admin ceph1 ceph2 ceph3 |
这个操作是将集群的admin.keyring
分发给指定的节点,这样这些节点就可以使用ceph命令了,接下来创建mgr
1 | [cephfsd@deploy ceph-deploy]$ ceph-deploy mgr create ceph1 ceph2 ceph3 |
mgr分担了很多原本monitor的工作,目前它也是重要的一个组件,根据集群规模,可以创建2-3个mgr,不过也没有必要太多,接下来可以开始创建osd了
1 | [cephfsd@deploy ceph-deploy]$ ceph-deploy osd create --data /dev/sdb ceph1 |
创建后,可以查看集群是否添加成功
1 | [cephfsd@ceph1 ~]$ sudo ceph -s |
osd全部创建成功了
创建存储池
块存储场景
首先创建rbd使用的存储池,因为deploy节点没有admin授权,无法直接使用ceph命令,所以这里切换到ceph1节点进行操作
1 | [cephfsd@ceph1 ~]$ sudo ceph osd pool create rbd 64 64 |
可以看到,rbd池的pg创建完成了,默认情况下,使用的pool是3副本配置,测试创建一块rbd试下
1 | [cephfsd@ceph1 ~]$ sudo rbd create testrbd --size=10G |
没有问题
对象存储场景
对象存储需要使用到radosgw
,即对象存储网关,所以需要先起一个网关,在起网关的时候,它会检查它需要的存储池是否存在,不存在则自动创建,创建网关在deploy节点上进行
1 | [cephfsd@deploy ceph-deploy]$ ceph-deploy rgw create ceph1 |
创建没问题后,到集群节点查看
1 | [cephfsd@ceph1 ~]$ sudo ceph -s |
可以看到,rgw有1个active了,我们看一下pool的情况
1 | [cephfsd@ceph1 ~]$ sudo ceph osd pool ls |
创建了默认的几个pool,这些池的pg数也是默认的,如果觉得不合适,可以在起rgw前手动创建好
最后,集群目前是HEALTH_WARN
状态,原因是mon之间的时间差太大,一般做法是在所有ceph节点上起ntp服务,指向一个内部的ntp服务器,这个内部的ntp服务器最好是可以连接外网进行同步的,这里我们使用deploy来安装ntp服务,此前我们已经安装了ntp的相关包
修改/etc/ntp.conf
文件的server部分为阿里云的时间服务器
1 | [cephfsd@deploy ceph-deploy]$ sudo cat /etc/ntp.conf |grep ^server |
接下来,每个ceph节点都将ntp服务器指向这个ntp,然后启动ntpd.service
1 | [cephfsd@ceph1 ~]$ cat /etc/ntp.conf |grep ^server |
过一会,各个节点时间同步后,误差减小,集群正常
1 | [cephfsd@ceph1 ~]$ sudo ntpq -pn |
总结
ceph的安装是学习ceph的第一步,也是很重要的一步,初学者容易遇到不少奇奇怪怪的问题,ceph社区,或者读者私底下来问关于ceph部署的问题,其实有很大一部分问题不应该出现,绝大部分也都是环境问题,本篇ceph安装是笔者近几年来一直使用的方法,包括几PB的生产环境,都是这么部署的,供初学的同学参考
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2019/04/23/centos7部署ceph/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!