1. 概述node
从本篇文章开始介绍一款如今很是火的分布式文件系统Ceph,包括这款文件系统的安装、基本使用场景、经常使用管理命令和重要工做原理。特别是讨论了PaxOS算法的基本理后,就更容易理解Ceph分布式文件系统中各类角色的工做原理。算法
2. Ceph的安装部署vim
本文将介绍Ceph分布式文件系统如何在CentOS 7.X版本上一步一步完成安装,使读者在阅读过程当中了解Ceph有哪些重要的子系统/工做模块,以及它们是如何关联工做的。请注意Ceph在Ubuntu等Linux操做系统上的安装过程和注意点大体相同,但若是读者和笔者一样选择在CentOS上安装Ceph,那么就请使用CentOS 7.X的版本,由于这个版本是Ceph官方介绍中推荐的,更重要的是CentOS 6.X已经不受支持了。缓存
2-1. 准备工做网络
本文的演示中咱们将按照如下表格安装一个三节点的Ceph分布式文件系统,并绑定一个文件系统的客户端进行文件读写操做。ssh
节点 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各个模块的用户,用户名也叫作cephui
[......]# groupadd ceph
[......]# useradd ceph -g ceph
[......]# passwd ceph
// 修改为你想要的密码
......123456123456
记得为用户设置root权限,既是在sudoers文件中加入相关配置信息:
[......]# vim /etc/sudoers
// 加入ceph的sudo权限
......
root ALL=(ALL) ALL
ceph ALL=(ALL) NOPASSWD:ALL
......12345671234567
参与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目录要作对应12345671234567
关于无密码登陆的设置过程就再也不深刻讲解了,由于是很基本的ssh设置。主要原则就是保证authorized_keys文件的公钥记录信息和这个文件在几个节点间的一致性。若是后续有新的节点加入到Ceph集群中,而且也要承担MDS Follower角色的工做,则一样要设置这个新节点到各个节点的相互无密码登陆功能。
2-1-2. 关于Ceph源和扩展组件
Ceph官网的下载速度奇慢,这实际上不怪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
export CEPH_DEPLOY_GPG_URL
另外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/p...
# repo文件的名字叫作epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl$basearch
mirrorlist=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
......123456789101112131415123456789101112131415
为了保证扩展源中的组件与CentOS官方源中的组件不冲突,能够调低扩展源的优先级。固然读者也能够自行手动解决Ceph安装过程提示的组件依赖问题——使用rpm命令的方式。笔者试过,深入的体会到什么叫生不如死。。。
设置仓库后,须要更新仓库缓存,以下:
[......]$ yum makecache
[......]$ yum update1212
2-1-3. 关于物理磁盘
Ceph是一种分布式文件系统,既然是文件系统,那么不管它的上层如何设计如何划分,始终须要对数据持久化存储进行落地。因此Ceph须要操做块存储设备(关于块存储的相关介绍,能够参看本专题最初的几篇文章),Ceph要求块存储设备的文件系统必须为XFS、BTRFS或者EXT4,且必须在操做系统上有独立挂载点。
2-2. 正式安装
Ceph的安装有两种方式,第一种是使用Ceph官方提供的Ceph-deploy(部署工具)进行安装,这种方式咱们须要首先yum Ceph-deploy,而后再使用Ceph-deploy提供的各类命令来安装Ceph的各个节点,但好处也很明显——Ceph的安装过程基本上是半自动化的,除了一些操做系统层面的问题须要解决外(例如用户对某个目录的读写权限设定错误,再例如防火墙的端口没有打开等等)整个过程还算比较顺利。另一种是全人工安装,除非你的操做系统存在特殊应用场景,或者有须要特别保护的组件须要进行独立设定,不然仍是建议使用前一种Ceph-deploy的方式。
2-2-1. 安装Ceph-Deploy和Ceph软件自己
首先安装ceph-deploy软件本省。请注意这个软件并非ceph工做的一部分,它只一个增长简便性的工具。
......
[......]$ yum -y install ceph-deploy
// NTP时钟同步服务
[......]$ yum install -y ntp ntpdate ntp-doc
//使用一个亚洲公用时间同步节点进行时间同步
[......]$ ntpdate 0.asia.pool.ntp.org
......12345671234567
只须要在某个节点上安装ceph-deploy就行,可是NTP服务是每个节点都要安装和进行同步,它主要是保证各节点的物理时钟同步。接下来咱们使用ceph-deploy工具在将要参与Ceph分布式文件系统的各个节点上,安装Ceph软件。注意,只是安装软件,并非说完成后就可让这些节点承担相应的工做职责了。如下命令只须要在安装了ceph-deploy的节点上执行就好了,ceph-deploy会帮助技术人员在指定的各个节点上使用yum命令安装ceph软件。接着使用如下命令在以上各个节点上正式安装Ceph软件:
[ceph@vmnode1 ~]$ ceph-deploy install vmnode1 vmnode2 vmnode3
// 命令格式为:
ceph-deploy install {ceph-node}[{ceph-node} ...]123123
安装Ceph软件的过程当中,有必定几率会出现各类警告信息。警告信息有的是能够忽略的,有的则是必须进行处理的。这些问题通常分为几类:镜像源和下载问题,依赖问题,权限问题。如何来处理这些问题,除了须要具有必定的玩转Linux系统的经验外,主要仍是细心,切忌急躁。
2-2-2. 安装Ceph Monitor
MON是Monitor的简称,字面意义为监控、监视。是的,它的做用是监控、管理和协调整个分布式系统环境中其它各个OSD/PG、Client、MDS角色的工做,保证整个分布环境中的数据一致性。注意,为了保证节点故障的状况下,整个Ceph分布式文件系统依然能够稳定工做,咱们必须设置多个MON角色。例如在本示例中,就设置参与Ceph分布式系统的三个节点上,都安装MON角色:
// 更名了意味新的MON节点
[ceph@vmnode1 ~]$ ceph-deploy new vmnode1 vmnode2 vmnode3
// 命令格式为:
ceph-deploy new {initial-monitor-node(s)}12341234
以上命令运行后,ceph-deploy工具会在本节点生成一些文件,包括:
ceph.conf
ceph.log
ceph.mon.keyring123123
最重要的文件固然就是ceph.conf文件了(实际上ceph.mon.keyring也很重要),观察这个文件内容:
[ceph@vmnode1 ~]$ cat ./ceph.conf
[global]
fsid = 50c157eb-6d74-4d7d-b8e8-959a7b855b55
mon_initial_members = vmnode1, vmnode2, vmnode3
mon_host = 172.16.71.182,172.16.71.183,172.16.71.184
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx1234567812345678
能够看到ceph.conf文件中已经设置好了咱们将要运行MON角色的三个节点信息。接下来咱们还须要在ceph.conf文件中增长一些信息,以下(后文还会详细讲解ceph中的重要参数):
[ceph@vmnode1 ~]$ vim ./ceph.conf
......
# 后续的文章会详细讲解ceph中重要的配置项
osd pool default size = 2
osd pool default min size = 2
max open files = 655350
cephx cluster require signatures = false
cephx service require signatures = false
......123456789123456789
接着使用如下命令,就能够在conf文件中已配置的MON节点上启动MON服务了(前提是,这些节点已经成功安装了Ceph软件):
# 开始初始化运行mon节点。
[ceph@vmnode1 ~]$ceph-deploy mon create-initial
# 若是须要指定一些自定义的配置参数,能够采用以下格式(命令有详细的帮助信息)来启动
[ceph@vmnode1 ~]$ceph-deploy --overwrite-conf --cluster ceph mon create-initial12341234
每个Ceph分布式系统都会有一个名字,若是在建立MON时不给定这个名字就会默认为“ceph”。完成以上步骤后,ceph-deploy工具会在当前运行命令的目录下生成几个文件,这些文件都很是重要,请不要擅自改动。在随后的安装过程当中ceph-deploy工具将按需将这些文件复制到对应角色的对应目录中去。