在 CentOS 7.1 上安装分布式存储系统 Ceph

关于 Ceph 的介绍网上一大堆,这里就不重复了。Sage Weil 读博士的时候开发了这套牛逼的分布式存储系统,最初是奔着高性能分布式文件系统去的,结果云计算风口一来,Ceph 重心转向了分布式块存储(Block Storage)和分布式对象存储(Object Storage),现在分布式文件系统 CephFS 还停在 beta 阶段。Ceph 现在是云计算、虚拟机部署的最火开源存储解决方案,据说有20%的 OpenStack 部署存储用的都是 Ceph 的 block storage.

Ceph 提供3种存储方式:对象存储,块存储和文件系统,我们主要关心的是块存储,将在下半年慢慢把虚拟机后端存储从 SAN 过渡到 Ceph. 虽然还是 0.94 版本,Ceph 现在已经比较成熟了,有个同事已经在生产环境里运行 Ceph 了两年多,他曾遇到很多问题,但最终还是解决了,可见 Ceph 还是非常稳定和可靠的。

硬件环境准备

准备了6台机器,其中3台物理服务器做监控节点(mon: ceph-mon1, ceph-mon2, ceph-mon3),2台物理服务器做存储节点(osd: ceph-osd1, ceph-osd2),1台虚拟机做管理节点(adm: ceph-adm)。

Ceph 要求必须是奇数个监控节点,而且最少3个(自己玩玩的话,1个也是可以的),ceph-adm 是可选的,可以把 ceph-adm 放在 monitor 上,只不过把 ceph-adm 单独拿出来架构上看更清晰一些。当然也可以把 mon 放在 osd 上,生产环境下是不推荐这样做的。

  • ADM 服务器硬件配置比较随意,用1台低配置的虚拟机就可以了,只是用来操作和管理 Ceph;
  • MON 服务器2块硬盘做成 RAID1,用来安装操作系统;
  • OSD 服务器上用10块 4TB 硬盘做 Ceph 存储,每个 osd 对应1块硬盘,每个 osd 需要1个 Journal,所以10块硬盘需要10个 Journal,我们用2块大容量 SSD 硬盘做 journal,每个 SSD 等分成5个区,这样每个区分别对应一个 osd 硬盘的 journal,剩下的2块小容量 SSD 装操作系统,采用 RAID1.

配置列表如下:


  1. | Hostname | IP Address | Role | Hardware Info |
  2. |-----------+---------------+-------|---------------------------------------------------------|
  3. | ceph-adm | 192.168.2.100 | adm | 2 Cores, 4GB RAM, 20GB DISK |
  4. | ceph-mon1 | 192.168.2.101 | mon | 24 Cores,64GB RAM, 2x750GB SAS |
  5. | ceph-mon2 | 192.168.2.102 | mon | 24 Cores,64GB RAM, 2x750GB SAS |
  6. | ceph-mon3 | 192.168.2.103 | mon | 24 Cores,64GB RAM, 2x750GB SAS |
  7. | ceph-osd1 | 192.168.2.121 | osd | 12 Cores,64GB RAM, 10x4TB SAS,2x400GB SSD,2x80GB SSD |
  8. | ceph-osd2 | 192.168.2.122 | osd | 12 Cores,64GB RAM, 10x4TB SAS,2x400GB SSD,2x80GB SSD |

软件环境准备

所有 Ceph 集群节点采用 CentOS 7.1 版本(CentOS-7-x86_64-Minimal-1503-01.iso),所有文件系统采用 Ceph 官方推荐的 xfs,所有节点的操作系统都装在 RAID1 上,其他的硬盘单独用,不做任何 RAID.

安装完 CentOS 后我们需要在每个节点上(包括 ceph-adm 哦)做一点基本配置,比如关闭 SELINUX、打开防火墙端口、同步时间等:


  1. 关闭 SELINUX
  2. # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  3. # setenforce 0
  4. 打开 Ceph 需要的端口
  5. # firewall-cmd --zone=public --add-port=6789/tcp --permanent
  6. # firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
  7. # firewall-cmd --reload
  8. 安装 EPEL 软件源:
  9. # rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
  10. # yum -y update
  11. # yum -y upgrade
  12. 安装 ntp 同步时间
  13. # yum -y install ntp ntpdate ntp-doc
  14. # ntpdate 0.us.pool.ntp.org
  15. # hwclock --systohc
  16. # systemctl enable ntpd.service
  17. # systemctl start ntpd.service

在每台 osd 服务器上我们需要对10块 SAS 硬盘分区、创建 xfs 文件系统;对2块用做 journal 的 SSD 硬盘分5个区,每个区对应一块硬盘,不需要创建文件系统,留给 Ceph 自己处理。


  1. # parted /dev/sda
  2. GNU Parted 3.1
  3. Using /dev/sda
  4. Welcome to GNU Parted! Type 'help' to view a list of commands.
  5. (parted) mklabel gpt
  6. (parted) mkpart primary xfs 0% 100%
  7. (parted) quit
  8. # mkfs.xfs /dev/sda1
  9. meta-data=/dev/sda1 isize=256 agcount=4, agsize=244188544 blks
  10. = sectsz=4096 attr=2, projid32bit=1
  11. = crc=0 finobt=0
  12. data = bsize=4096 blocks=976754176, imaxpct=5
  13. = sunit=0 swidth=0 blks
  14. naming =version 2 bsize=4096 ascii-ci=0 ftype=0
  15. log =internal log bsize=4096 blocks=476930, version=2
  16. = sectsz=4096 sunit=1 blks, lazy-count=1
  17. realtime =none extsz=4096 blocks=0, rtextents=0
  18. ...

上面的命令行要对10个硬盘处理,重复的操作太多,以后还会陆续增加服务器,写成脚本 parted.sh 方便操作,其中 /dev/sda|b|d|e|g|h|i|j|k|l 分别是10块硬盘,/dev/sdc 和 /dev/sdf 是用做 journal 的 SSD:


  1. # vi parted.sh
  2. #!/bin/bash
  3. set -e
  4. if [ ! -x "/sbin/parted" ]; then
  5. echo "This script requires /sbin/parted to run!" >&2
  6. exit 1
  7. fi
  8. DISKS="a b d e g h i j k l"
  9. for i in ${DISKS}; do
  10. echo "Creating partitions on /dev/sd${i} ..."
  11. parted -a optimal --script /dev/sd${i} -- mktable gpt
  12. parted -a optimal --script /dev/sd${i} -- mkpart primary xfs 0% 100%
  13. sleep 1
  14. #echo "Formatting /dev/sd${i}1 ..."
  15. mkfs.xfs -f /dev/sd${i}1 &
  16. done
  17. SSDS="c f"
  18. for i in ${SSDS}; do
  19. parted -s /dev/sd${i} mklabel gpt
  20. parted -s /dev/sd${i} mkpart primary 0% 20%
  21. parted -s /dev/sd${i} mkpart primary 21% 40%
  22. parted -s /dev/sd${i} mkpart primary 41% 60%
  23. parted -s /dev/sd${i} mkpart primary 61% 80%
  24. parted -s /dev/sd${i} mkpart primary 81% 100%
  25. done
  26. # sh parted.sh

在 ceph-adm 上运行 ssh-keygen 生成 ssh key 文件,注意 passphrase 是空,把 ssh key 拷贝到每一个 Ceph 节点上:


  1. # ssh-keygen -t rsa
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. # ssh-copy-id root@ceph-mon1
  7. # ssh-copy-id root@ceph-mon2
  8. # ssh-copy-id root@ceph-mon3
  9. # ssh-copy-id root@ceph-osd1
  10. # ssh-copy-id root@ceph-osd2

在 ceph-adm 上登陆到每台节点上确认是否都能无密码 ssh 了,确保那个烦人的连接确认不会再出现:


  1. # ssh root@ceph-mon1
  2. The authenticity of host 'ceph-mon1 (192.168.2.101)' can't be established.
  3. ECDSA key fingerprint is d7:db:d6:70:ef:2e:56:7c:0d:9c:62:75:b2:47:34:df.
  4. Are you sure you want to continue connecting (yes/no)? yes
  5. # ssh root@ceph-mon2
  6. # ssh root@ceph-mon3
  7. # ssh root@ceph-osd1
  8. # ssh root@ceph-osd2

Ceph 部署

比起在每个 Ceph 节点上手动安装 Ceph,用 ceph-deploy 工具统一安装要方便得多:


  1. # rpm -Uvh http://ceph.com/rpm-hammer/el7/noarch/ceph-release-1-1.el7.noarch.rpm
  2. # yum update -y
  3. # yum install ceph-deploy -y

创建一个 ceph 工作目录,以后的操作都在这个目录下面进行:


  1. # mkdir ~/ceph-cluster
  2. # cd ~/ceph-cluster

初始化集群,告诉 ceph-deploy 哪些节点是监控节点,命令成功执行后会在 ceps-cluster 目录下生成 ceph.conf, ceph.log, ceph.mon.keyring 等相关文件:


  1. # ceph-deploy new ceph-mon1 ceph-mon2 ceph-mon3

在每个 Ceph 节点上都安装 Ceph:


  1. # ceph-deploy install ceph-adm ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2

初始化监控节点:


  1. # ceph-deploy mon create-initial

查看一下 Ceph 存储节点的硬盘情况:


  1. # ceph-deploy disk list ceph-osd1
  2. # ceph-deploy disk list ceph-osd2

初始化 Ceph 硬盘,然后创建 osd 存储节点,存储节点:单个硬盘:对应的 journal 分区,一一对应:


  1. 创建 ceph-osd1 存储节点
  2. # ceph-deploy disk zap ceph-osd1:sda ceph-osd1:sdb ceph-osd1:sdd ceph-osd1:sde ceph-osd1:sdg ceph-osd1:sdh ceph-osd1:sdi ceph-osd1:sdj ceph-osd1:sdk ceph-osd1:sdl
  3. # ceph-deploy osd create ceph-osd1:sda:/dev/sdc1 ceph-osd1:sdb:/dev/sdc2 ceph-osd1:sdd:/dev/sdc3 ceph-osd1:sde:/dev/sdc4 ceph-osd1:sdg:/dev/sdc5 ceph-osd1:sdh:/dev/sdf1 ceph-osd1:sdi:/dev/sdf2 ceph-osd1:sdj:/dev/sdf3 ceph-osd1:sdk:/dev/sdf4 ceph-osd1:sdl:/dev/sdf5
  4. 创建 ceph-osd2 存储节点
  5. # ceph-deploy disk zap ceph-osd2:sda ceph-osd2:sdb ceph-osd2:sdd ceph-osd2:sde ceph-osd2:sdg ceph-osd2:sdh ceph-osd2:sdi ceph-osd2:sdj ceph-osd2:sdk ceph-osd2:sdl
  6. # ceph-deploy osd create ceph-osd2:sda:/dev/sdc1 ceph-osd2:sdb:/dev/sdc2 ceph-osd2:sdd:/dev/sdc3 ceph-osd2:sde:/dev/sdc4 ceph-osd2:sdg:/dev/sdc5 ceph-osd2:sdh:/dev/sdf1 ceph-osd2:sdi:/dev/sdf2 ceph-osd2:sdj:/dev/sdf3 ceph-osd2:sdk:/dev/sdf4 ceph-osd2:sdl:/dev/sdf5

最后,我们把生成的配置文件从 ceph-adm 同步部署到其他几个节点,使得每个节点的 ceph 配置一致:


  1. # ceph-deploy --overwrite-conf admin ceph-adm ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2

测试

看一下配置成功了没?


  1. # ceph health
  2. HEALTH_WARN too few PGs per OSD (10 < min 30)

增加 PG 数目,根据 Total PGs = (#OSDs * 100) / pool size 公式来决定 pg_num(pgp_num 应该设成和 pg_num 一样),所以 20*100/2=1000,Ceph 官方推荐取最接近2的指数倍,所以选择 1024。如果顺利的话,就应该可以看到 HEALTH_OK 了:


  1. # ceph osd pool set rbd size 2
  2. set pool 0 size to 2
  3. # ceph osd pool set rbd min_size 2
  4. set pool 0 min_size to 2
  5. # ceph osd pool set rbd pg_num 1024
  6. set pool 0 pg_num to 1024
  7. # ceph osd pool set rbd pgp_num 1024
  8. set pool 0 pgp_num to 1024
  9. # ceph health
  10. HEALTH_OK

更详细一点:


  1. # ceph -s
  2. cluster 6349efff-764a-45ec-bfe9-ed8f5fa25186
  3. health HEALTH_OK
  4. monmap e1: 3 mons at {ceph-mon1=192.168.2.101:6789/0,ceph-mon2=192.168.2.102:6789/0,ceph-mon3=192.168.2.103:6789/0}
  5. election epoch 6, quorum 0,1,2 ceph-mon1,ceph-mon2,ceph-mon3
  6. osdmap e107: 20 osds: 20 up, 20 in
  7. pgmap v255: 1024 pgs, 1 pools, 0 bytes data, 0 objects
  8. 740 MB used, 74483 GB / 74484 GB avail
  9. 1024 active+clean

如果操作没有问题的话记得把上面操作写到 ceph.conf 文件里,并同步部署的各节点:


  1. # vi ceph.conf
  2. [global]
  3. fsid = 6349efff-764a-45ec-bfe9-ed8f5fa25186
  4. mon_initial_members = ceph-mon1, ceph-mon2, ceph-mon3
  5. mon_host = 192.168.2.101,192.168.2.102,192.168.2.103
  6. auth_cluster_required = cephx
  7. auth_service_required = cephx
  8. auth_client_required = cephx
  9. filestore_xattr_use_omap = true
  10. osd pool default size = 2
  11. osd pool default min size = 2
  12. osd pool default pg num = 1024
  13. osd pool default pgp num = 1024
  14. # ceph-deploy admin ceph-adm ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2

如果一切可以从来

部署过程中如果出现任何奇怪的问题无法解决,可以简单的删除一切从头再来:


  1. # ceph-deploy purge ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
  2. # ceph-deploy purgedata ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
  3. # ceph-deploy forgetkeys

Troubleshooting

如果出现任何网络问题,首先确认节点可以互相无密码 ssh,各个节点的防火墙已关闭或加入规则:


  1. # ceph health
  2. 2015-07-31 14:31:10.545138 7fce64377700 0 -- :/1024052 >> 192.168.2.101:6789/0 pipe(0x7fce60027050 sd=3 :0 s=1 pgs=0 cs=0 l=1 c=0x7fce60023e00).fault
  3. HEALTH_OK
  4. # ssh ceph-mon1
  5. # firewall-cmd --zone=public --add-port=6789/tcp --permanent
  6. # firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
  7. # firewall-cmd --reload
  8. # ceph health
  9. HEALTH_OK

初次安装 Ceph 会遇到各种各样的问题,总体来说排错还算顺利,随着经验的积累,今年下半年将会逐步把 Ceph 加入到生产环境。

原文发布时间为:2015-08-03



本文来自合作伙伴“Linux中国

时间: 2024-09-30 15:59:04

在 CentOS 7.1 上安装分布式存储系统 Ceph的相关文章

在CentOS 7上安装分布式存储系统Ceph

关于 Ceph 的介绍网上一大堆,这里就不重复了.Sage Weil 读博士的时候开发了这套牛逼的分布式存储系统,最初是奔着高性能分布式文件系统去的,结果云计算风口一来,Ceph 重心转向了分布式块存储(Block Storage)和分布式对象存储(Object Storage),现在分布式文件系统 CephFS 还停在 beta 阶段.Ceph 现在是云计算.虚拟机部署的最火开源存储解决方案,据说有20%的 OpenStack 部署存储用的都是 Ceph 的 block storage. Ce

CentOS 7 安装分布式存储系统 Ceph 与使用

Ceph 提供3种存储方式:对象存储,块存储和文件系统,下图很好的展示了 Ceph 存储集群的架构: 我们主要关心的是块存储,将在下半年慢慢把虚拟机后端存储从 SAN 过渡到 Ceph. 虽然还是 0.94 版本,Ceph 现在已经比较成熟了,有个同事已经在生产环境里运行 Ceph 了两年多,他曾遇到很多问题,但最终还是解决了,可见 Ceph 还是非常稳定和可靠的. 硬件环境准备 准备了6台机器,其中3台物理服务器做监控节点(mon: ceph-mon1, ceph-mon2, ceph-mon

如何在CentOS 7.x上安装Zephyr测试管理工具

测试管理指测试人员所需要的任何的所有东西.测试管理工具用来记录测试执行的结果.计划测试活动以及汇报质量控制活动的情况.在这篇文章中,我们会向你介绍如何配置 Zephyr 测试管理工具,它包括了管理测试活动需要的所有东西,不需要单独安装测试活动所需要的应用程序,从而降低测试人员不必要的麻烦.一旦你安装完它,你就看可以用它跟踪 bug 和缺陷,和你的团队成员协作项目任务,因为你可以轻松地共享和访问测试过程中多个项目团队的数据. Zephyr 要求 安装和运行 Zephyr 要求满足以下最低条件.可以

在 CentOS 6.4 上安装 CloudStack 4.2

在 CentOS 6.4上安装CloudStack 4.2 原文路径:http://www.vpsee.com/2013/11/install-cloudstack-4-2-on-centos-6-4/ 和 OpenStack,OpenNebula 类似,CloudStack 是另一款开源云计算平台.CloudStack的前身是 Cloud.com 家的一款商业云计算产品(也有开源版本),2011年 Cloud.com 被Citrix 收购,2012年的时候 Citrix 将收购的云平台 Clo

如何在Ubuntu / CentOS 6.x上安装Bugzilla 4.4

如何在Ubuntu / CentOS 6.x上安装Bugzilla 4.4 这里,我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla.Bugzilla是一款基于web,用来记录跟踪缺陷数据库的bug跟踪软件,它同时是一款免费及开源软件(FOSS),它的bug跟踪系统允许个人和开发团体有效地记录下他们产品的一些突出问题.尽管是"免费"的,Bugzilla依然有很多其它同类产品所没有的"珍贵"特性.因此,Bugzilla很快就变

centos-如何在Linux(CentOs)平台上安装MTL4包?

问题描述 如何在Linux(CentOs)平台上安装MTL4包? 对Linux不是很了解,今天要安装MTL4的库的时候就傻了. 1.add the url repository http://www.simunova.com/rpm to your repository list and update. (There will be 2 error messages that come from missing signature. Please ignore this warning for

在CentOS 6.4上安装Ampache流媒体服务

Ampache是一个基于WEB的音频/视频流媒体软件和文件管理器.你可以使用几乎所有的互联网设备从任何地方去访问你的音乐和视频.它不是一个媒体管理器,只是有效利用了现有分类好的媒体文件.所以,你必须预先组织好这些媒体文件. 方案 尽管它应该在几乎所有基于RHEL的系统上工作,但这个指南是在CentOS 6.4上测试的.在这篇指南中, 我的测试机主机名和IP地址分别为server.unixmen.com 和 192.168.1.201/24.你可以根据自己的地址适当改变这些值. 前提 你的服务器上

在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端

在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端 当手中有相当多的机器需要管理的时候,自动化处理冗余又无聊的任务对系统管理员来说就很重要了.很多管理员习惯了自己写脚本模拟复杂软件之间的调度.不幸的是,脚本会过时,脚本的作者会离职,如果不花费巨大精力来维护这些脚本的话,它们早晚会一点儿用也没有.如果能有一个系统,任何人都可以使用.安装工具,不论其受雇于何人,那真是太期待了.目前已有几种系统可以解决这类需求,这篇教程将介绍其中之一--Puppet--的使用方法. Puppet 是

怎样在RHEL、CentOS和Fedora上安装Git及设置Git账号

对于新手来说,Git 是一个自由.开源.高效的分布式版本控制系统(VCS),它是基于速度.高性能以及数据一致性而设计的,以支持从小规模到大体量的软件开发项目. Git 是一个可以让你追踪软件改动.版本回滚以及创建另外一个版本的目录和文件的软件仓库. Git 主要是用 C 语言来写的,混杂了少量的 Perl 脚本和各种 shell 脚本.它主要在 Linux 内核上运行,并且有以下列举的卓越的性能: 易于上手 运行速度飞快,且大部分操作在本地进行,因此,它极大的提升了那些需要与远程服务器通信的集中