Chinaunix首页 | 论坛 | 博客
  • 博客访问: 318814
  • 博文数量: 145
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1139
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-14 16:47
个人简介

路漫漫其修远兮,吾将上下而求索

文章分类

全部博文(145)

文章存档

2016年(10)

2015年(15)

2014年(120)

我的朋友

分类: 系统运维

2016-12-19 21:01:07

简介
Ceph是一个符合POSIX、开源的分布式存储系统。最初由Sage Weill于2007年开发,Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制。本文详细介绍了Ceph的历史和架构。

Ceph是一个软件分布式存储平台,为了确保集群中数据的分布式存储和良好的可扩展性,Ceph运用了著名的CRUSH(Controllled Replication Under Scalable Hashing)算法。Ceph开发的主要目标是提供高可扩展性和提供对象存储、块存储和文件系统的存储机制。Ceph提供一个单一的存储平台,可以处理所有类型的数据存储(包括对象、块和文件)。它的高扩展性可以达到PB级,它还拥有高容错性和高一致性数据冗余机制。

Ceph的历史
在2004年,Sage Weil开发了一个名叫Ceph的开源项目,并于2006年,基于开源协议开源了Ceph。Weil 曾经是“Inktank Storage”公司的创始人。Inktank Storage一直专注于Ceph的研发,直到它被红帽收购。2012年,Ceph的第一个稳定版本发布了。2014年10月,Ceph的开发团队发布了Ceph的第七个稳定版本Giant。为了让Ceph更加成熟与完美,这个项目还在继续开发中。

组成
一个Ceph集群由两种类型的后台进程(Daemon)组成:
OSD Daemon
Ceph Monitor

点击(此处)折叠或打开

  1. OSDs: Ceph的OSD守护进程(OSD)存储数据,处理数据复制,恢复,回填,重新调整,并通过检查其它Ceph OSD守护程序作为一个心跳 向Ceph的监视器报告一些检测信息。Ceph的存储集群需要至少2个OSD守护进程来保持一个 active + clean状态.(Ceph默认制作2个备份,但你可以调整它)
  2. Monitors:Ceph的监控保持集群状态映射,包括OSD(守护进程)映射,分组(PG)映射,和CRUSH映射。 Ceph 保持一个在Ceph监视器, Ceph OSD 守护进程和 PG的每个状态改变的历史(称之为“epoch”).
  3. MDS: MDS是Ceph的元数据服务器,代表存储元数据的Ceph文件系统(即Ceph的块设备和Ceph的对象存储不使用MDS)。Ceph的元数据服务器使用POSIX文件系统,用户可以执行基本命令如 ls, find,等,并且不需要在Ceph的存储集群上造成巨大的负载.
  4. Ceph把客户端的数据以对象的形式存储到了存储池里。利用CRUSH算法,Ceph可以计算出安置组所包含的对象,并能进一步计算出Ceph OSD集合所存储的安置组。CRUSH算法能够使Ceph存储集群拥有动态改变大小、再平衡和数据恢复的能力。
Ceph 特点

点击(此处)折叠或打开

  1. Object:有原生的API,而且也兼容Swift和S3的API
  2. Block:支持精简配置、快照、克隆
  3. File:Posix接口,支持快照
Ceph也是分布式存储系统,它的特点是:

点击(此处)折叠或打开

  1. 高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到PB级的扩展。
  2. 高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
  3. 高性能:数据分布均衡,并行化度高。对于objects storage和block storage,不需要元数据服务器。
无论你想提供 Ceph对象存储和/或Ceph块设备服务至云平台 ,部署Ceph文件系统或者为了其他目的而使用Ceph,所有的 Ceph存储集群部署都是从设置每个Ceph节点,你的网络和Ceph存储集群开始的。
一个Ceph存储集群要求至少有一个Ceph监视器和两个Ceph OSD守护进程。当运行Ceph文件系统客户端时,必须要有Ceph元数据服务器。
Ceph提供了3种使用场景:

1、分布式文件系统CephFS。

点击(此处)折叠或打开

  1. 多个客户端mount CephFS到本地,CephFS遵循POSIX接口,使用体验类似于ext4等本地文件系统。
  2. 类似于其他分布式文件系统,各个CephFS客户端共享同一命名空间。

2、RadosGW(rgw)对象存储。

点击(此处)折叠或打开

  1. rgw使用场景类似于Amazon S3,据个人理解也类似于七牛云存储。
3、块设备rbd(Rados Block Device)。

点击(此处)折叠或打开

  1. Ceph提供虚拟的rbd块设备,用户像使用SATA盘那样的物理块设备一样使用rbd。
  2. rbd的使用是排他的,每个rbd块设备是用户私有的,相对的,CephFS的使用方式是共享的。
  3. 虚拟化和云计算的发展正当盛年,IaaS结合rbd块设备这一使用方式有如干柴遇烈火,因此rbd是Ceph 社区开发的重心之一。本文也主要从rbd的视角来了解Ceph。
安装部署:
环境说明
主机名             项目                IP
hhly001           mon               192.168.12.12
hhly002           osd                 192.168.12.13
hhly003           osd                 192.168.12.14

关闭 SELINUX

点击(此处)折叠或打开

  1. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  2. setenforce 0
打开 Ceph 需要的端口
(也可以先关闭防火墙,因为是内部测试)

点击(此处)折叠或打开

  1. firewall-cmd --zone=public --add-port=6789/tcp --permanent
  2. firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
  3. firewall-cmd --reload
安装 EPEL 软件源:

点击(此处)折叠或打开

  1. rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
  2. yum -y update
  3. yum -y upgrade
安装 ntp 同步时间

点击(此处)折叠或打开

  1. yum -y install ntp ntpdate ntp-doc
  2. ntpdate 0.us.pool.ntp.org
  3. hwclock --systohc
  4. systemctl enable ntpd.service
  5. systemctl start ntpd.service
创建用户
所有服务器上操作

点击(此处)折叠或打开

  1. useradd ceph
  2. echo 'C6P_PHY~dzl4U' | passwd --stdin ceph
增加sudo权限

点击(此处)折叠或打开

  1. echo "ceph ALL = (ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
  2. chmod 0440 /etc/sudoers.d/ceph
requiretty准备
  

点击(此处)折叠或打开

  1. 执行命令visudo修改suoders文件:
  2. 注释Defaults requiretty
  3. Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
  4. 否则会出现sudo: sorry, you must have a tty to run sudo
  5. 增加行 Defaults visiblepw
  6. 否则会出现 sudo: no tty present and no askpass program specified
  7. 也可以这样改成这样 Defaults:ceph !requiretty
  8. 上面的操作在4台服务器均这样操作
Hosts修改
所有机器都需要这样添加

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# cat /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 192.168.12.12 hhly001
  5. 192.168.12.13 hhly002
  6. 192.168.12.14 hhly003
生成key,可以一路回车

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ssh-keygen
ssh 打通

点击(此处)折叠或打开

  1. [root@hhly001 .ssh]# ssh-copy-id -i id_rsa.pub ceph@hhly001
  2. [root@hhly001 .ssh]# ssh-copy-id -i id_rsa.pub ceph@hhly002
  3. [root@hhly001 .ssh]# ssh-copy-id -i id_rsa.pub ceph@hhly003

管理节点安装ceph-deploy部署工具
增加epel源

点击(此处)折叠或打开

  1. sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
配置ceph yum仓库

点击(此处)折叠或打开

  1. [ceph@10-19-148-70 yum.repos.d]$sudo vi ceph.repo
  2. [ceph-noarch]
  3. name=Ceph noarch packages
  4. baseurl=https://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
  5. enabled=1
  6. gpgcheck=1
  7. type=rpm-md
  8. gpgkey=https://download.ceph.com/keys/release.asc
将上面的ceph-release 和distro根据自己的需求修改,比如我这边采用当前的jewel版本,distro为centos7 这里就写成el7,当然你也可以用firefly, giant ,Hammer, infernalis ,版本迭代命名方式和openstack比较像,按字母顺序来

点击(此处)折叠或打开

  1. [ceph-noarch]
  2. name=Ceph noarch packages
  3. baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
  4. enabled=1
  5. gpgcheck=1
  6. type=rpm-md
  7. gpgkey=https://download.ceph.com/keys/release.asc
hhly001安装ceph-deploy

点击(此处)折叠或打开

  1. yum update && sudo yum install ceph-deploy
创建集群设置Monitor节点

点击(此处)折叠或打开

  1. [root@hhly001 .ssh]# ceph-deploy hhly002 hhly003
  2. [root@hhly001 ceph]# cat ceph.conf
  3. [global]
  4. mon_pg_warn_max_per_osd = 3000
  5. mon clock drift allowed = 20
  6. mon clock drift warn backoff = 30
  7. fsid = 6cfd443a-59e8-4669-97d6-b9d5b6daf4b2
  8. mon_initial_members = hhly001
  9. mon_host = 192.168.12.12
  10. auth_cluster_required = cephx
  11. auth_service_required = cephx
  12. auth_client_required = cephx
  13. osd pool default size = 2
  14. osd pool default min size = 1
  15. osd pool default pg num = 512
  16. osd pool default pgp num = 512
  17. osd crush chooseleaf type = 1
所有节点安装ceph

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph-deploy install hhly001 hhly002 hhly003
初始化monitor节点

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph-deploy mon create-initial
  2. [root@hhly001 ceph]#ceph-deploy disk list hhly002
  3. [root@hhly001 ceph]#ceph-deploy disk list hhly003
  4. mkdir -p /data/osd1
  5. chown -R ceph.ceph osd1/
  6. mkdir -p /data/osd2
  7. chown -R ceph.ceph osd2/
  8. [root@hhly001 ceph]#ceph-deploy osd prepare hhly002:/data/osd1 hhly003:/data/osd2
  9. [root@hhly001 ceph]#ceph-deploy osd activate hhly002:/data/osd1 hhly003:/data/osd2
在hhly002上创建osd

点击(此处)折叠或打开

  1. 注意虚拟硬盘作为一个整个盘,不要挂载,因为执行osd安装时,会自动进行格式化和挂载,如果提前挂载了其他目录,会导致无法挂载新的磁盘,安装失败
  2. 1、虚拟硬盘首先进行格式化
  3. 不同文件格式的文件系统格式化方式不一样,以下是xfs格式化命令
  4. mkfs.xfs -f /dev/vdc
  5. 格式化多个磁盘就执行多次
  6. 2、列出 node1上可用的磁盘
  7. [root@node1 ceph]# ceph-deploy disk list node1
  8. 3、disk zap子命令删除现有分区表和磁盘内容,这一步一定要确认好选择的正确的磁盘名称
  9. 执行如下:比如我三个硬盘 /dev/vdc /dev/vdd /dev/vde
  10. [root@node1 ceph]# ceph-deploy disk zap node1:/dev/vdc node1:/dev/vdd node1:/dev/vde
  11. osd create子命令准备磁盘,即默认先用xfs文件系统格式化磁盘,然后会激活磁盘的第一第二分区,分别作为数据分区和日志分区:
  12. 4、以上操作以后开始创建osd,执行如下命令
  13. ceph-deploy osd create node1:/dev/vdc node1:/dev/vdd node1:/dev/vde
查看osd状态

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph -s
  2. cluster 6cfd443a-59e8-4669-97d6-b9d5b6daf4b2
  3. health HEALTH_OK
  4. monmap e1: 1 mons at {hhly001=192.168.12.12:6789/0}
  5. election epoch 1, quorum 0 hhly001
  6. osdmap e83: 2 osds: 2 up, 2 in
  7. pgmap v1004: 1792 pgs, 14 pools, 848 bytes data, 43 objects
  8. 10330 MB used, 1735 GB / 1745 GB avail
  9. 1792 active+clean
查看OSD tree

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph osd tree
  2. ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
  3. -1 3.00000 root default
  4. -2 1.00000 host hhly002
  5. 2 1.00000 osd.2 up 1.00000 1.00000
  6. -3 2.00000 host hhly003
  7. 3 2.00000 osd.3 up 1.00000 1.00000
部署过程只遇到一个问题:


问题解决办法:
清理原有的ceph池,新建一个池!
查询当前池方法

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph osd lspools
  2. 2 mytest,3 .rgw,4 .rgw.root,5 .rgw.control,6 .rgw.gc,7 .rgw.buckets,8 .rgw.buckets.index,9 .log,10 .intent-log,11 .usage,12 .users,13 .users.email,14 .users.swift,15 .users.uid,
删除 rgw池

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph osd pool delete rgw rgw --yes-i-really-really-mean-it
创建 volumes 存储池

点击(此处)折叠或打开

  1. [root@hhly001 ceph]# ceph osd pool create volumes 156 156















阅读(593) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~