Ceph -存储部署 ;

一 、 Ceph存储系统概述

Ceph是呼声很高的开源分布式的SDS产品存储系统。
同时提供对象存储、块存储和文件系统存储 三种功能,满足不同应用需求。
Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。
2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象和块存储应用。
从此出现Ceph开源社区版本和Redhat企业版。
Ceph 的强大足以改变公司的 IT 基础架构、和管理海量数据。 
Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 
Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,
它们之间靠相互通讯来复制数据、并动态地重分布数据。

 

Cehp的基础服务架构:

Cehp的基础服务架构主要包括了ObjectStorage Device(OSD),Monitor和MDS。
基于此,Ceph提供了Librados原生对象基础库、Librbd块存储库、Librgw基于S3和Swift兼容的对象库和Libceph文件系统库。
OSD(ObjectStorage Device)负责存储数据,处理数据复制、数据恢复、数据再均衡以及通过心跳机制监测其它OSD状况并报告给Ceph Monitors。Monitor负责监控集群状态,包括监控自身状态、集群OSD状态、Placement Group(存储组织和位置映射)状态、
CRUSH状态(Controlled Replication Under Scalable Hashing,一种伪随机数据分布算法)。
同时,Monitor还会记录它们的每一个历史状态改变版本信息,以确定集群该遵循哪个版本。
MDS负责文件系统的元数据存储和管理,也就是如前所说,块存储和对象存储服务是不需要这个模块的。MDS负责提供标准的POSIX文件访问接口。

                     

Ceph集群的物理部署逻辑示意图如下所示  ;

通常Ceph集群由很多OSD组成,OSD部署在不同的服务器上。同时又有若干个Monitor节点(MON),MON之间相互监控,同时又对OSD的状态进行监控。
客户端通过网络建立与Ceph集群的关联,也即访问关系。客户端通过Mon节点获知集群的状态,其中包含OSD节点的分布情况等内容。                                                                                                  图1

                                                   

二 、 Ceph存储系统的组件  ;

Ceph集群的核心组件是OSD和MON,其中OSD用于数据的具体存储操作,MON用于一些“映射图”,通过该“映射图”客户端可以计算出数据的存放位置,并将数据直接发送给相应的OSD处理。由于OSD和MON之间存在监控关系,并且通过相应的策略进行相关调度,保证自动故障处理和负载均衡等,因此将OSD、MON以及这些策略统称为RADOS。

为了便于对RADOS的管理和使用,在RADOS之上实现了一套动态库(librados),动态库通常位于客户端,通过网络与RADOS交互命令和数据。

Ceph天生就是对象存储,rados本身提供了一套以对象方式存储和访问Ceph集群数据的接口。而Ceph又同时提供了块存储和文件系统存储的功能,该功能基于Ceph的对象存储实现。

2.1  OSD
OSD的全称是Object Storage Device,OSD通常是一个物理的存储设备(例如磁盘),也可以是逻辑的存储设备(例如磁盘上的某个文件夹)。当然,这里的存储设备不限于服务器上的本地硬盘,也可以是通过iSCSI协议或者FC协议映射的LUN。有时候提及的OSD实际上是OSD守护进程,视语境而定。

2.2  OSD守护进程
OSD守护进程是OSD的软件实现,OSD守护进程用来对OSD进行管理(数据读写等),客户端数据交互的对象是OSD守护进程。

2.3 MON
MON是Ceph集群的监控软件,一个守护进程,其中包含若干“映射图”信息。客户端向Ceph集群写数据前通常要向MON请求,获取最新的“映射图”,并通过其计算出数据的存放位置。

 

2.4 librados

librados是一个动态库程序,其提供了客户端访问Ceph集群的原生态统一接口。其它接口或者命令行工具都基于该动态库实现。
在librados中实现了Crush算法和网络通信等公共功能,数据请求操作在librados计算完成后可以直接与对应的OSD交互进行数据传输。为了便于Ceph集群管理,其提供了很多命令行工具,包括ceph、rados和rbd等等,这些命令行工具都直接或间接基于librados实现。

 

 

三 、 CEPH  部署环境  ;

最少三台服务器,每台上至少有一个20G硬盘分区
我这里是把管理节点和客户端也作为了存储节点
因为存储节点最少有三台,如果服务器足够的情况下可以分开来做
CentOS release 6.9 (Final)      3台    , 每台设备需要 20G的硬盘,根据自己情况而定我这里使用虚拟机就给20G了  
10.0.0.14(ceph01 adm, mon, osd0)       
10.0.0.15(ceph02  osd1 client)               
10.0.0.16(ceph03 osd2   )  

3.1   配置网卡  ;

[root@ceph01 ~]#  cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.14
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
3.2  修改主机名  ;

[root@ceph02 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=ceph02
 

3.3   添加本地域名解析  ;

[root@ceph01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.14 ceph01
10.0.0.15 ceph02
10.0.0.16 ceph03
[root@ceph01 ~]# 
 

3.4  禁用selinux  和关闭iptables    ;

[root@ceph01 ~]# cat /etc/selinux/config |grep discabled
#     disabled - No SELinux policy is loaded.
SELINUX=disabled                                       #disable   表示禁用 
[root@ceph01 ~]# 

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


四 、准备部署 Ceph  ;

  4.1 ;安装 EPEL 软件源 (单台管理节点ceph01 操作 ):
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 # yum update -y                --->> 更新一下 yum       
Ceph -存储部署 ;_第1张图片


4.2  ;安装ceph依赖
# rpm -Uvh http://download.ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
# yum install ceph-deploy -y
Ceph -存储部署 ;_第2张图片

如果不安装以上两个包则会出现以下问题:
Ceph -存储部署 ;_第3张图片
 

4.3. 数据节点磁盘挂载  ; 
在ceph01、ceph02、ceph03上分别挂载了一块20g大小的磁盘作为ceph的数据存储测试使用。需要将它们分区,创建xfs文件系统。
4.3.1 ; 分区(三台机),创建xfs文件系统
# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary xfs 0% 100%
(parted) quit


# mkfs.xfs /dev/sdb1 
Ceph -存储部署 ;_第4张图片
如果出现以下问题:

是因为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就可以了。

 

五  、搭建存储集群 

5.1 免密码登陆(三台机)
在每台机上运行以下命令:
#   ssh-keygen -t rsa -P ''   (回车)      ssh-keygen -t dsa   (也可以用这个 ,两种秘钥方式 )  
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
Ceph -存储部署 ;_第5张图片
 

5.2 、下面从admin节点开始使用ceph-deploy
    5.2.1 、 在admin上创建集群目录(ceph01)
     #   mkdir ceph-cluster       ---->> 创建目录(可以自定义)
      # cd ceph-cluster      


5.3 、 创建集群(ceph01)
      # ceph-deploy new ceph01
Ceph -存储部署 ;_第6张图片
 

5.4 、 安装ceph(ceph01)
  # ceph-deploy install ceph01 ceph02 ceph03
  此命令将会按顺序在3台服务器上安装 ceph
Ceph -存储部署 ;_第7张图片
如果报错:
RuntimeError: Failed to execute command: rpm -Uvh --replacepkgs         http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
执行以下命令之后再重新执行一遍安装ceph 的命令 :
 # 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
Ceph -存储部署 ;_第8张图片
  如果报错:
[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


 5.5 、创建并初始化监控节点(ceph01)
  # ceph-deploy mon create-initial
Ceph -存储部署 ;_第9张图片

执行此命令后会初始化mon结点,并且在mon结点生成ceph.conf等文件,ceph.conf文件中声明了mon结点等信息
Ceph -存储部署 ;_第10张图片
 

如果报错:
Ceph -存储部署 ;_第11张图片
在(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
Ceph -存储部署 ;_第12张图片
 

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

 

需要在mdsnode,osdnode1,osdnode2三个节点中使用leadorceph用户的身份执行sudo visudo命令,然后修改
Defaults requiretty 为Defaults:ceph !requiretty
Ceph -存储部署 ;_第13张图片
 

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


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


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


5.7 、 挂载磁盘(三台机)
将各个磁盘分别挂载到对应的目录(ceph01、ceph02、ceph03)
 # mount /dev/sdb1 /data/osd0
(另外两个节点一样的操作,只变更最后相应的目录  osd1,osd2)

 

5.8 、 在管理节点准备OSD(ceph01)
   # ceph-deploy osd prepare ceph01:/data/osd0 ceph02:/data/osd1 ceph03:/data/osd2
Ceph -存储部署 ;_第14张图片
 

5.9 、  激活OSD(ceph01)
(注意:如果osd的目录所在磁盘是ext4格式的文件系统会报错,需要进行额外的设置)
    # ceph-deploy osd activate ceph01:/data/osd0 ceph02:/data/osd1 ceph03:/data/osd2
Ceph -存储部署 ;_第15张图片
 
如果报错:
Ceph -存储部署 ;_第16张图片
是因为多次卸载和安装ceph造成磁盘的id和cluster的uuid不一致,需要将 /data/osd0下的文件全部清空(3台服务器都需要改)
 

5.10 、开机挂载磁盘(三台机)
挂载好的新磁盘会在下一次重启或开机的时候失效,因此我们需要在每台机上对新磁盘进行挂载,分别在每台机编辑/etc/fstab文件,在最后添加(以ceph01为例):
   # vim /etc/fstab
      /dev/sdb1    /osd0        xfs    defaults    0    0
Ceph -存储部署 ;_第17张图片
 


5.11 、 分发配置和密钥 ;
 使用ceph-deploy命令将配置文件和管理密钥复制到管理节点和你的Ceph节点。
       # ceph-deploy admin ceph01 ceph02 ceph03
Ceph -存储部署 ;_第18张图片
 

5.12 、  查看集群状态
 # 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

  
如果报错:
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
Ceph -存储部署 ;_第19张图片
 

执行以下命令赋权限:
#  chmod 777 /etc/ceph/*
Ceph -存储部署 ;_第20张图片
成功!(这里发现没有启动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


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



6.2 、  创建管理节点(ceph01)
  #  ceph-deploy mds create ceph01
 Ceph -存储部署 ;_第21张图片
 


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


6.3  、 查看pool
   # ceph osd lspools

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


6.4 、 新建pool
   # ceph osd pool create cephfs_data 10#用于数据的pool
   # ceph osd pool create cephfs_metadata 10#用于元数据的pool
  # ceph fs new myceph  cephfs_metadata cephfs_data 
Ceph -存储部署 ;_第22张图片


6.7 、检验
  查看mds状态
  #  ceph mds stat

查看集群状态
  # ceph -s
Ceph -存储部署 ;_第23张图片 
 


++++++++++++++++++++++++++++++++ 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上)


=========================================End==============================================

你可能感兴趣的:(Ceph)