基于centos6.7的Ceph分布式文件系统安装指南

Posted yhao浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于centos6.7的Ceph分布式文件系统安装指南相关的知识,希望对你有一定的参考价值。

        Ceph是加州大学Santa Cruz分校的Sage Weil(DreamHost的联合创始人)专为博士论文设计的新一代自由软件分布式文件系统。自2007年毕业之后,Sage开始全职投入到Ceph开 发之中,使其能适用于生产环境。Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制。2010年3 月,Linus Torvalds将Ceph client合并到内 核2.6.34中。

关于Ceph的详细介绍见:Ceph:一个 Linux PB 级分布式文件系统


本文是在Centos6.7上对Ceph的部署的详细指南。


发现有部分网站转载本文,转载可以,但请给出原文链接,尊重劳动成果,谢谢!


首先对部署环境进行说明:

IPHostnameceph磁盘备注
10.201.26.121ceph0120gadm, mon, osd0
10.201.26.122ceph0220gosd1
10.201.26.123ceph0320gosd2
10.201.26.121cephclient挂载点:/cephfsceph客户端

Ceph的文件系统作为一个目录挂载到客户端cephclient的/cephfs目录下,可以像操作普通目录一样对此目录进行操作。


1. 安装前准备(root用户)
参考文档:http://docs.openfans.org/ceph/ceph4e2d658765876863/ceph-1/installation30105feb901f5b8988c53011/preflight3010988468c03011

1.1 在每台机添加hosts
修改文件/etc/hosts(或者/etc/sysconfig/network),添加以下内容:
10.201.26.121   ceph01
10.201.26.122   ceph02
10.201.26.123   ceph03

 


1.2 每个Ceph节点上创建一个用户
# adduser ceph
# passwd ceph
密码统一设为: ceph




1.3 在每个Ceph节点中为用户增加 root 权限
# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
# chmod 0440 /etc/sudoers.d/ceph




1.4 关闭防火墙等服务

# service iptables stop
# chkconfig iptables off        //关闭开机启动防火墙

每台机器节点都需要修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled





2. CEPH部署设置(root用户操作)
增加Ceph资料库至 ceph-deploy 管理节点. 之后,安装 ceph-deploy
安装 EPEL 软件源(单台机操作即可):
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm


# yum update -y

安装ceph依赖
# rpm -Uvh http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
# yum install ceph-deploy -y



否则会出现以下问题:



3. 数据节点磁盘挂载(root用户)
在ceph01、ceph02、ceph03上分别挂载了一块20g大小的磁盘作为ceph的数据存储测试使用。需要将它们分区,创建xfs文件系统。

3.1 分区(三台机),创建xfs文件系统
# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary xfs 0% 100%
(parted) quit


# mkfs.xfs /dev/sdb1 



如果出现以下问题:


是因为xfs在默认的系统安装上是不被支持的,需要自己手动安装默认的包。
先修过yum的配置文件
# vim /etc/yum.repos.d/CentOS-Base.repo
[centosplus]
enabled=1                //把0改为1
# yum install -y xfsprogs kmod-xfs         //安装软件包
然后再执行mkfs.xfs /dev/sdb1就可以了。



4. 存储集群搭建(ceph用户)
集群规模:1个管理节点,1个监控节点,3个数据节点。 

4.0免密码登陆(三台机)
在每台机上运行以下命令:
$ ssh-keygen -t rsa -P ''(回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)


 

下面从admin节点开始使用ceph-deploy

4.1 在admin上创建集群目录(ceph01)
$ mkdir ceph-cluster
$ cd ceph-cluster


4.2 创建集群(ceph01)
$ ceph-deploy new ceph01
 
 


4.3 安装ceph(ceph01)
$ ceph-deploy install ceph01 ceph02 ceph03
此命令将会按顺序在3台机上安装ceph

如果报错:
RuntimeError: Failed to execute command: rpm -Uvh --replacepkgs         http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
执行以下命令再重新执行一遍:
$ rpm -e ceph-release
 
如果报错:
[INFO  ] Running command: sudo rpm -Uvh --replacepkgs https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm
[WARNIN] curl: (22) The requested URL returned error: 404 Not Found
[DEBUG ] Retrieving https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm
[WARNIN] error: skipping https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm - transfer failed
[ERROR ] RuntimeError: command returned non-zero exit status: 1
[ERROR ] RuntimeError: Failed to execute command: rpm -Uvh --replacepkgs https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm

这是因为在centos6中,没有infernalis这个版本的rpm包
因为暂时没有找到在哪里修改这个版本信息,故采用手动安装(三台机都需要)
$ sudo yum install -y yum-plugin-priorities
$ sudo rpm -Uvh http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
$ sudo yum -y install ceph

  如果报错:
[DEBUG ]  You could try running: rpm -Va --nofiles --nodigest
[ERROR ] RuntimeError: command returned non-zero exit status: 1
[ERROR ] RuntimeError: Failed to execute command: yum -y install ceph
执行一遍一下命令再重新执行一遍:
$ rpm -Va --nofiles –nodigest


4.4 创建并初始化监控节点(ceph01)
$ ceph-deploy mon create-initial


执行此命令后会初始化mon结点,并且在mon结点生成ceph.conf等文件,ceph.conf文件中声明了mon结点等信息


如果报错:

在mon节点(ceph01)上手动执行以下命令:
$ sudo yum install redhat-lsb
然后再执行ceph-deploy mon create-initial
 
查看一下 Ceph 存储节点的硬盘情况:
$ ceph-deploy disk list ceph01
$ ceph-deploy disk list ceph02
$ ceph-deploy disk list ceph03


如果报错:
[ERROR ] RuntimeError: remote connection got closed, ensure ``requiretty`` is disabled for ceph02


需要在mdsnode,osdnode1,osdnode2三个节点中使用leadorceph用户的身份执行sudo visudo命令,然后修改
Defaults requiretty 为Defaults:ceph !requiretty


4.5 添加数据节点(ceph01)
(为了快速安装,本例中为每个Ceph OSD守护进程使用单个目录而非单个磁盘    。使用ceph-deply osd命令可查看在分离的磁盘/分区上创建OSD和日志的方法。登陆Ceph节点,    并为每个Ceph OSD守护进程创建单个目录。)
# ssh root@ceph01
# mkdir /data
# mkdir /data/osd0
# chmod -R 777 /data/
# exit


# ssh root@ceph02
# mkdir /data
# mkdir /data/osd1
# chmod -R 777 /data/
# exit


# ssh root@ceph03
# mkdir /data
# mkdir /data/osd2
# chmod -R 777 /data/
# exit


4.6 挂载磁盘(三台机)
将各个磁盘分别挂载到对应的目录(ceph01、ceph02、ceph03)
$ sudo mount /dev/sdb1 /data/osd0
(另外两个节点类似,不过是osd1,osd2)


4.7 在管理节点准备OSD(ceph01)
$ ceph-deploy osd prepare ceph01:/data/osd0 ceph02:/data/osd1 ceph03:/data/osd2


4.8 激活OSD(ceph01)
(注意如果osd的目录所在磁盘是ext4格式的文件系统会报错,需要进行额外的设置)
$ ceph-deploy osd activate ceph01:/data/osd0 ceph02:/data/osd1 ceph03:/data/osd2

 
如果报错:

是因为多次卸载和安装ceph造成磁盘的id和cluster的uuid不一致,需要将 /data/osd0下的文件全部清空(3台机都要改)

4.9 开机挂载磁盘(三台机)
挂载好的新磁盘会在下一次重启或开机的时候失效,因此我们需要在每台机上对新磁盘进行挂载,分别在每台机编辑/etc/fstab文件,在最后添加(以ceph01为例):
$ sudo vim /etc/fstab
/dev/sdb1    /osd0        xfs    defaults    0    0

 


4.10 分发配置和密钥
使用ceph-deploy命令将配置文件和管理密钥复制到管理节点和你的Ceph节点。
# ceph-deploy admin ceph01 ceph02 ceph03


4.11 查看集群状态
# ceph health        //当集群完成配对后,应返回active+clean状态


如果报错:
[ceph@ceph03 ceph-cluster]$ ceph health
2016-03-06 21:53:54.886552 7fdc5cf5a700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2016-03-06 21:53:54.886584 7fdc5cf5a700  0 librados: client.admin initialization error (2) No such file or directory
Error connecting to cluster: ObjectNotFound


是因为普通用户无法读取导致无法进行cephx认证,执行以下命令:

# sudo chmod +r /etc/ceph/ceph.client.admin.keyring
 


如果出现以下情况:

[ceph@ceph03 ceph-cluster]$ ceph health
HEALTH_WARN 64 pgs degraded; 64 pgs stuck degraded; 64 pgs stuck unclean; 64 pgs stuck undersized; 64 pgs undersized


是因为配置中默认osd=3,备份=2,与实际不符,更改配置文件ceph.conf,增加以下两行:
osd_pool_default_size = 2
osd_pool_default_min_size = 1
(不过没有生效,怀疑需要重启集群,待测试),或者添加一个osd节点(有些说法是要最少3个osd)
 
 
如果报错:
2016-04-21 15:21:05.597951 7fde9cb6b700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2016-04-21 15:21:05.597963 7fde9cb6b700  0 librados: client.admin initialization error (2) No such file or directory


是因为没有权限读取keyring


执行以下命令赋权限:
$ sudo chmod 777 /etc/ceph/*

已经成功!!(这里发现没有启动mds节点,需要手动启动,输入命令service ceph start mds.ceph01)




重新部署(注意!)
部署过程中如果出现任何奇怪的问题无法解决,可以简单的删除一切从头再来:
# ceph-deploy purge ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
# ceph-deploy purgedata ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
# ceph-deploy forgetkeys


5. 创建文件系统

创建文件系统的步骤参考官网:http://docs.ceph.com/docs/master/cephfs/createfs/ 
对于一个刚创建的MDS服务,虽然服务是运行的,但是它的状态直到创建 pools 以及文件系统的时候才会变为Active.
还没有创建时候的状态
$ ceph mds stat



5.1 创建管理节点(ceph01)
$ ceph-deploy mds create ceph01
 
 


注意:如果不创建mds管理节点,client客户端将不能正常挂载到ceph集群!


5.2 查看pool
$ ceph osd lspools

新创建的ceph集群只有rdb一个pool。这时我们需要创建一个新的pool


5.3 新建pool
参考官网:http://docs.ceph.com/docs/master/rados/operations/pools/ 
$ ceph osd pool create cephfs_data 10#用于数据的pool
$ ceph osd pool create cephfs_metadata 10#用于元数据的pool
$ ceph fs new myceph  cephfs_metadata cephfs_data 



5.4 检验
查看mds状态
$ ceph mds stat

查看集群状态
$ ceph -s
 






附录1 —— ceph常用命令
1. 查看状态命令:
查看ceph集群状态:ceph -s

查看mon状态:ceph mon stat
查看msd状态:ceph msd stat
查看osd状态:ceph osd stat

查看osd目录树(可以查看每个osd挂在哪台机,是否已启动):ceph osd tree


2. 启动节点命令:
需要在对应的节点进行启动(如果对应节点没有该服务,会进行提示)
启动mon进程:service ceph start mon.ceph01
启动msd进程:service ceph start msd.ceoh01(我们集群没有msd节点)
启动osd进程:service ceph start osd.0(在ceph01上)
启动osd进程:service ceph start osd.1(在ceph02上)
启动osd进程:service ceph start osd.2(在ceph03上)





附录2——client挂载

Client挂载方式有两种:内核kernal方式和fuse方式。由于我们使用的centos6.7内核版本太低,而升级内核时间太长,故直接采用fuse方式进行挂载。下面分别介绍centos6.7和ubuntu15.04挂载client的方法。


注:client挂载前需要在client节点安装ceph,方法参考上述文档

1. centos 6.7使用fuse挂载(client节点)

安装ceph源
参考官方文档:http://docs.ceph.com/docs/master/cephfs/fuse/
(其中的ceph.keyring需要改为ceph.client.admin.keyring )
如果不进行此步骤,否则会报“No package ceph-fuse available.”
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

安装ceph-fuse
# yum install -y ceph-fuse


创建挂载目录
# mkdir /cephfs

复制配置文件
将ceph配置文件ceph.conf从管理节点copy到client节点
# scp ceph@10.201.26.131:/etc/ceph/ceph.conf /etc/ceph/

复制密钥
将ceph的ceph.client.admin.keyring从管理节点copy到client节点
# scp ceph@10.201.26.131:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
 
查看ceph授权
# ceph auth list
 
 
挂载到指定目录
将ceph挂载到/cephfs
# ceph-fuse -m 10.201.26.131:6789 /cephfs
 

取消挂载
# umount/cephfs



2. ubuntu15.04 使用fuse挂载

安装ceph-fuse
# apt-get install -y ceph-fuse
 
或者手动安装,下载地址:http://mirrors.aliyun.com/ubuntu/pool/main/c/ceph/,下载包ceph-dbg_0.94.1-0ubuntu1_amd64.deb
# dpkg -i ceph-dbg_0.94.1-0ubuntu1_amd64.deb

创建挂载目录
# mkdir /cephfs

复制配置文件
将ceph配置文件ceph.conf从管理节点copy到client节点
# scp ceph@10.201.26.131:/etc/ceph/ceph.conf /etc/ceph/
 
复制密钥
将ceph的ceph.client.admin.keyring从管理节点copy到client节点
# scp ceph@10.201.26.131:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
 
查看ceph授权
# ceph auth list
 
挂载到指定目录
将ceph挂载到/cephfs
# ceph-fuse -m 10.201.26.131:6789 /cephfs
 
取消挂载
# umount/cephfs

以上是关于基于centos6.7的Ceph分布式文件系统安装指南的主要内容,如果未能解决你的问题,请参考以下文章

基于 Ceph 的 Kubernetes 数据持久化

Ceph 分布式文件系统

ceph文件系统安装配置

Cephfs+Samba构建基于Ceph的文件共享服务

基于CentOS6.7的DRBD安装配置过程详解

架构设计:系统存储(28)——分布式文件系统Ceph(挂载)