1. 概述
从本篇文章开始介绍一款现在非常火的分布式文件系统Ceph,包括这款文件系统的安装、基本使用场景、常用管理命令和重要工作原理。特别是讨论了PaxOS算法的基本理后,就更容易理解Ceph分布式文件系统中各种角色的工作原理。
2. Ceph的安装部署
本文将介绍Ceph分布式文件系统如何在CentOS 7.X版本上一步一步完成安装,使读者在阅读过程中了解Ceph有哪些重要的子系统/工作模块,以及它们是如何关联工作的。请注意Ceph在Ubuntu等Linux操作系统上的安装过程和注意点大致相同,但如果读者和笔者同样选择在CentOS上安装Ceph,那么就请使用CentOS 7.X的版本,因为这个版本是Ceph官方介绍中推荐的,更重要的是CentOS 6.X已经不受支持了。
2-1. 准备工作
本文的演示中我们将按照以下表格安装一个三节点的Ceph分布式文件系统,并绑定一个文件系统的客户端进行文件读写操作。
节点 | IP地址 | 角色说明 |
---|---|---|
vmnode1 | 172.16.71.182 | MDN、MDS、OSD |
vmnode2 | 172.16.71.183 | MDN、MDS、OSD |
vmnode3 | 172.16.71.184 | MDN、MDS、OSD |
client | 172.16.71.1 | Client |
以上表格中的角色缩写如果目前看不懂也无所谓,在后续的安装介绍中我们将说明这些功能角色的作用。Ceph的安装准备工作相对而言有一些繁琐,如果每一个节点都是全新的操作系统,那么这些节点至少需要经过创建用户、设置用户无密码登录权限、变更Ceph下载仓库、更新软件仓库等工作才能完成准备动作。其过程中往往会出现一些错误,需要在安装过程中耐心解决,下面我们就开始Ceph安装前的准备工作。
2-1-1. 关于用户
无论是测试环境还是正式环境,安装Ceph都不建议使用root账号。所以第一步我们需要专门创建一个用户和用户组,并为这个用户给定管理员权限。我们创建一个用户组ceph和一个专门用来运行Ceph各个模块的用户,用户名也叫做ceph
[......]# groupadd ceph
[......]# useradd ceph -g ceph
[......]# passwd ceph
// 修改成你想要的密码
......
记得为用户设置root权限,既是在sudoers文件中加入相关配置信息:
[......]# vim /etc/sudoers
// 加入ceph的sudo权限
......
root ALL=(ALL) ALL
ceph ALL=(ALL) NOPASSWD:ALL
......
参与Ceph构建的每个节点都要设置相同的用户信息,并且设置该用户在各个节点间的无密码登录功能——这是因为后面Ceph-deploy的工作过程中,将登录到各个节点上执行命令。
[ceph@vmnode1 ~]$ ssh-keygen
// 操作系统会出现一些提示,回车就行了
[ceph@vmnode1 ~]$ cd ~/.ssh/
[ceph@vmnode1 .ssh]$ cat ./id_rsa.pub >> ./authorized_keys
// 一定要更改authorized_keys的访问权限,不然无密码登录要失败
[ceph@vmnode1 ~]$ chmod 600 ./authorized_keys
// 将authorized_keys copy到你将要登录的操作系统上,注意用户的home目录要做对应
关于无密码登录的设置过程就不再深入讲解了,因为是很基本的ssh设置。主要原则就是保证authorized_keys文件的公钥记录信息和这个文件在几个节点间的一致性。如果后续有新的节点加入到Ceph集群中,并且也要承担MDS Follower角色的工作,则同样要设置这个新节点到各个节点的相互无密码登录功能。
2-1-2. 关于Ceph源和扩展组件
Ceph官网的下载速度奇慢(“https://download.ceph.com/“),这实际上不怪Ceph,原因大家也都懂,呵呵。一个办法是设置国外的代理服务,有免费的,不过好用的还是付费的。另一个好消息是,Ceph有国内镜像,例如163的和aliyun的。根据笔者观察163的镜像同步要比aliyun的镜像同步及时,比如163的镜像中已经有rpm-hammer/ceph-deploy-1.5.37的下载,但是aliyun的镜像中最高版本只有ceph-deploy-1.5.36。通过以下环境变量的设置就可以使用国内的镜像(这个过程不会影响后续的任何安装步骤):
# 你也可以改成国内其它Ceph镜像
export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/rpm-hammer/el7;
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc;
另外Ceph的安装过程还需要相当的第三方组件依赖,其中一些第三方组件在CentOS yum.repo Base等官方源中是没有的(例如LevelDB),所以读者在安装过程中会有一定的几率遇到各种依赖关系异常,并要求先行安装XXX第三方组件的提示(例如提示先安装liblevel.so)。虽然我们后文将会介绍的Ceph辅助部署工具,Ceph-deploy的工作本质还是通过yum命令去安装管理组件,但是既然CentOS yum.repo Base官方源中并没有某些需要依赖的第三方组件,所以一旦遇到类似的组件依赖问题安装过程就没法自动继续了。解决这个问题,本示例中建议引入CentOS的第三方扩展源Epel。
# 关于Epel 扩展源的引入这里不过做介绍了,网络上的资料一大把。这里给出一个“目前可用”(不保证多年后依然可用)的安装地址,以及安装后生成的repo配置片段(本示例中的第三方扩展源匹配CentOS 7.X操作系统)。
http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
# repo文件的名字叫做epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
......
为了保证扩展源中的组件与CentOS官方源中的组件不冲突,可以调低扩展源的优先级。当然读者也可以自行手动解决Ceph安装过程提示的组件依赖问题——使用rpm命令的方式。笔者试过,深刻的体会到什么叫生不如死。。。
设置仓库后,需要更新仓库缓存,如下:
[