专栏首页运维一切ceph基础运维操作 原

ceph基础运维操作 原

ceph中文文档

增加一个osd 安装前准备(a主机部署了ceph-deplay需要在b主机上部署增加osd) 安装前需要配置ssh免密登录,和hosts,这里不记录了

【在b主机上】 增加ceph源 Vim /etc/yum.repo.d/ceph.repo

[ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

保存退出 开始安装ceph Yum install ceph –y 完毕之后初始化目录

#!/bin/sh
mkdir -p /data/ceph
mv /var/lib/ceph/* /data/ceph
rm -fr /var/lib/ceph
cd /var/lib
ln -s /data/ceph ceph
cd /var/log
rm -fr ceph
mkdir -p /data/ceph/log
ln -s  /data/ceph/log  ceph

初始化之后scp配置文件和keyring密钥环到/etc/ceph/目录 scp ceph.conf root@t102:/etc/ceph scp ceph.client.admin.keyring root@t102:/etc/ceph 之后就可以在机器上看到ceph的状态

Ceph –s
cluster 4236dc8e-709c-473e-a628-0800c62c51f9
health HEALTH_OK
monmap e3: 5 mons at {c207=192.168.12.07:6789/0,c208=192.168.12.08:6789/0,c209=192.168.12.09:6789/0,d139=192.168.3.139:6789/0,t81=192.168.2.81:6789/0}
election epoch 30, quorum 0,1,2,3,4 d139,c207,c208,c209,t81
mdsmap e80: 1/1/1 up {0=c207=up:active}, 1 up:standby
osdmap e2154: 56 osds: 56 up, 56 in
pgmap v236705: 2000 pgs, 2 pools, 38101 kB data, 29 objects
            6990 MB used, 15087 GB / 15094 GB avail
                2000 active+clean

到这里之后主机基本配置就已经完毕了 查看磁盘当前分区情况 ls /dev/sd* 如果发现有分区可以使用下面脚本删除

#!/bin/sh
fori in $(ls /dev/sd*|grep -v sda|grep -v 1)
do
    parted $i<<ESXU
    rm 1
    quit
    ESXU
Done

但是还有的用分区做了raid,但是没有清理映射,这样解除:

root@c209 ~]# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md127 : active (auto-read-only) raid5 sdh[6] sdf[4] sdd[2] sdj[8] sde[3] sdg[5] sdi[7] sdb[0] sdl[11] sdc[1] sdk[9]
2929049600 blocks super 1.2 level 5, 512k chunk, algorithm 2 [11/11] [UUUUUUUUUUU]

root@c209 ~]#mdadm --stop -s /dev/md127

保证磁盘干干净净,没有被其他程序占用之后就可以可是远程安装了。 ###【在a主机上】 部署脚本如下,h1是a主机的host,每3行一块盘,没有的自行屏蔽(听我的,直接直接用ts8,ssd真幸福)

#!/bin/sh

h1=t102

ceph-deploy --ceph-conf=/etc/ceph/ceph.conf disk zap $h1:/dev/sdb
ceph-deploy --ceph-conf=/etc/ceph/ceph.conf  --overwrite-confosd  prepare  $h1:/dev/sdb
ceph-deploy --ceph-conf=/etc/ceph/ceph.conf  --overwrite-confosd activate  $h1:/dev/sdb1:/dev/sdb2

ceph-deploy --ceph-conf=/etc/ceph/ceph.conf disk zap $h1:/dev/sdc
ceph-deploy --ceph-conf=/etc/ceph/ceph.conf  --overwrite-confosd  prepare  $h1:/dev/sdc
ceph-deploy --ceph-conf=/etc/ceph/ceph.conf  --overwrite-confosd activate  $h1:/dev/sdc1:/dev/sdc2

ceph-deploy --ceph-conf=/etc/ceph/ceph.conf disk zap $h1:/dev/sdd
ceph-deploy --ceph-conf=/etc/ceph/ceph.conf  --overwrite-confosd  prepare  $h1:/dev/sdd
ceph-deploy --ceph-conf=/etc/ceph/ceph.conf  --overwrite-confosd activate  $h1:/dev/sdd1:/dev/sdd2

如此b机器上的osd就全部安装到位了

卸载osd 如果要卸载一个osd,首先要将这个osd移出集群:

ceph osd out {osd-num}

运行了out之后,就会标准这块盘处于一个即将退盘的状态,他就会把自己的数据往外进行复杂转移,等待集群数据同步完毕之后就可以停止进程。

sudo /etc/init.d/ceph stop osd.{osd-num}

将osd从图中抹去,这样这块盘就不会在数据同步的列表中了

ceph osd crush remove {name}

将密钥环摘除

ceph auth del osd.{osd-num}

清理osd编号

ceph osd rm {osd-num}

具体看这里:http://docs.ceph.com/docs/master/rados/operations/add-or-rm-osds/和http://docs.openfans.org/ceph/ceph4e2d658765876863/ceph-1/ceph-storage-cluster3010ceph5b5850a896c67fa43011/deployment301090e87f723011/add-remove-osd-s-3010589e52a0-52209664osd3011

增加mon Mon增加之前需要像上面的增加osd那样先去初始化好机器,特别是机器的hostname,ceph依赖高版本的内核,如果是操作系统首选centos7(centos6要退出历史舞台了),hostname中不要带- \等之类的特殊操作符号,就中规中矩字母+数字。安装好ceph各种包之后,然后初始化好目录,然后找一个临时目录比如/data/ceph/mon/tmp/ 导出mon的密钥环

ceph auth get mon. -o /data/ceph/mon/tmp/keyring

导出mon的现有图

ceph mon getmap -o /data/ceph/mon/tmp/monmap

制作mon的文件系统

ceph-mon -i t102 --mkfs --monmap /data/ceph/mon/tmp/monmap --keyring /data/ceph/mon/tmp/keyring

备注:要先创建好/data/ceph/mon/tmp/目录,做mon的文件系统命令中t102是一个自定义的编号(我这里用的是机器的hostname,建议你也这样)具体格式如下: sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}

你看,是不是很简单,其实还有一步要注意一下,本来下来只需要启动mon进程就可以了,如下:

/etc/init.d/ceph start mon

但是你能会发现这样的错误(要多看看日志/var/log/ceph里):

2016-03-30 11:21:11.241145 7fb802dec880 0 mon.t102 does not exist in monmap, will attempt to join an existing cluster

2016-03-30 11:21:11.241362 7fb802dec880 -1 no public_addr or public_network specified, and mon.t102 not present in monmap or ceph.conf

大体的意思说mon.t102没有在mon的列表里,不能加到一个已经存在的集群中,说明白点就是先把你要新加的这个mon加到集群的配置map中才行。这样搞:

Ceph mon add <name> <IPaddr[:port]>

加到里面之后从上面从头到尾再来一遍就ok了。 对了,还有制作好mon的文件系统之后,要在对应的mon目录touch两个文件done和sysvinit 一个完整的mon目录大约长这个样子。

[root@c207 /data/lib/ceph/mon/ceph-c207]# ls

done keyring store.db sysvinit

删除mon

有些东西,破坏起来总是很简单

停止mon进程

ceph -a stop mon.{mon-id}

或者 /etc/init.d/ceph stop mon

清理mon map

ceph mon remove {mon-id}

运维大多是起起停停,要想少点这种体力活,事先要有一个好的规划,比如mon的部署吧,mon线上一般需要至少三台机器,2n+1嘛,跟zookeeper一样,必须是个奇数,这样至少要保证n+1个节点是ok的就不会影响到文件系统,比如3个mon最多只能挂掉1个,5个最多可以挂2个,7个最多可以挂3个,以此类推。我们要搞异地容灾,两地三中心,采用2-2-1(总共5个节点)的方案,这样三个中心随便哪个数据中心被原子弹轰炸了,文件系统都不会受到影响(多好^_^)。

具体看这里:http://docs.ceph.com/docs/master/rados/operations/add-or-rm-mons/

Cephfs 这个玩意相当的纠结(个人感受),本身ceph设计理念是无中心的,数据在哪算算就好。可偏偏cephfs就是有中心的(也就是所谓的master),我想可能没有某个文件系统是可以适配所有的文件场景的,cephfs(只是fs,注意区分)这种的结构和moosefs比较相似,都比较适合大量小文件的场景,我有时想,ceph可以精简一点,moosefs就怕metadata丢失,有的同学耗费精力去搞drbd,还不如用ceph的rbd做mfs的元数据盘,性能又好又安全。不过就是没有自动切换master的装置,还要自己去弄Keepalived实现,与其这样繁琐,还不如直接用cephfs,不过YY总是美好的。

列出文件系统列表

[root@c208 ~]# ceph fs ls

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data]

删除一个文件系统

[root@c208 ~]# ceph fs rm cephfs

Error EINVAL: all MDS daemons must be inactive before removing filesystem

删除文件系统之前必须保证mds停机

/etc/init.d/ceph stop mds

将mds状态置为fail

[root@c207 /data/log/ceph]# ceph mds fail 0

failed mds.0

[root@c207 /data/log/ceph]# ceph mds stat

e56: 0/1/0 up, 1 failed

现在可以删除了

ceph fs rm cephfs --yes-i-really-mean-it

然后把对应的pool也清理掉

ceph osd pool delete {cephfs_metadatacephfs_metadata}--yes-i-really-really-mean-it

如果又想挂cephfs了,创建好metadata和datapool,然后看准pool编号,直接用如下的命令创建就好了,

ceph mds new fs 4 3 –yes-i-really-mean-it

记得在创建之前先把mds给启动起来。

具体看这里http://docs.ceph.com/docs/master/cephfs/createfs/

Cephfs的挂载

首先要如上安装ceph-fuse相关的软件包,然后设置好配置文件,如下:

/etc/ceph/ceph.conf

[global]

fsid = 98523f30-600b-4ef8-b7c1-be05ee88439c

mon_host = 192.168.1.2,192.168.1.3,192.168.1.4

[client]

log file = /data/logs/ceph-client.log

keyring = /etc/ceph/keyring

然后要配置一下这个密钥环,可以如下查查:

ceph auth list

将client.admin的密钥环写入到/etc/ceph/keyring,别打懒复制粘贴,这里有一个坑,keyring的格式要正确,一般情况一下,他里面大约是这么写

[client.admin]

key=AQDFWtVWzPYkLBAAakzbeGIf/57BipUfdB4v3w==

注意[]和=,不是:重要的事情说一遍

出了什么错误就看log。

然后就是最后的挂载了:ceph-fuse /mnt/ceph(看,多么的漂亮、简单)

Rbd的挂载

Rbd远程块设备的挂载需要内核支持,最好是tlinux2.0的系统,多谢os组把内核自动加上了,不过如果没有加载,可以尝试到这里找一下:

[root@p215 /mnt]# cd /lib/modules/3.10.90-1-tlinux2-0031.tl2/kernel/drivers/block/

fusion-io/ iomemory-vsl4/ rbd.ko

就是这个rbd.ko

insmod rbd.ko,然后modprobe rbd

Rbd挂载需要安装ceph的相关依赖的软件包,安装方法同上,同时需要像cephfs那样的ceph.conf的配置支持(不然rbd怎么知道到哪里去存数据啊),还要有对应的rbd pool。

这是一些比较常用的操作:

创建一个远程块设备,指定大小为100GB

rbd create --size 102400 foo(默认使用rbd的pool,也可以这样指定rbd create bar --size 1024 --pool swimmingpool)

查看块设备列表

rbd ls

产看块设备信息

rbd info foo

建立映射关系

rbd map rbd/foo --id admin --keyring /etc/ceph/keyring

查看映射关系

rbd showmapped

制作文件系统并挂载

mkfs.ext3 /dev/rbd1&&mount /dev/rbd1 /mnt/rbd

调节容量

rbd resize --size 2048 foo (to increase)

rbd resize --size 2048 foo --allow-shrink (to decrease)

取消映射关系

rbd unmap /dev/rbd/rbd/foo

删除块设备

rbd rm foo

一些参考的测试数据: ##cephfs测试结果

[root@c207 /mnt/ceph]# dd if=/dev/zero of=1g bs=1M count=1024

记录了1024+0 的读入

记录了1024+0 的写出

1073741824字节(1.1 GB)已复制,9.20308 秒,117 MB/秒

[root@c207 /mnt/ceph]# dd if=/dev/zero of=512m bs=1M count=512

记录了512+0 的读入

记录了512+0 的写出

536870912字节(537 MB)已复制,4.4996 秒,119 MB/秒

[root@c207 /mnt/ceph]# dd if=/dev/zero of=5g bs=1M count=5000

记录了5000+0 的读入

记录了5000+0 的写出

5242880000字节(5.2 GB)已复制,45.2047 秒,116 MB/秒

大小文件写入数据正常,速度正常

文件覆盖写入数据正常

[root@c207 /mnt/ceph]# dd if=/dev/zero of=5g bs=1M count=5000

记录了5000+0 的读入

记录了5000+0 的写出

5242880000字节(5.2 GB)已复制,45.4655 秒,115 MB/秒

小文件写入速度

[root@c207 /mnt/ceph]# cat f/0

2016年 02月 18日星期四 20:45:00 CST

[root@c207 /mnt/ceph]# cat f/157000

2016年 02月 18日星期四 20:57:10 CST

总耗时12m10s=730s,平均一个客户端写入小文件速度为每秒215个

rbd写入测试结果

[root@c207 /mnt/rbd]# dd if=/dev/zero of=1g bs=1M count=1024

记录了1024+0 的读入

记录了1024+0 的写出

1073741824字节(1.1 GB)已复制,1.35318 秒,793 MB/秒

[root@c207 /mnt/rbd]# dd if=/dev/zero of=5g bs=1M count=5024

记录了5024+0 的读入

记录了5024+0 的写出

5268045824字节(5.3 GB)已复制,53.2081 秒,99.0 MB/秒

[root@c207 /mnt/rbd]# dd if=/dev/zero of=3g bs=1M count=3024

记录了3024+0 的读入

记录了3024+0 的写出

3170893824字节(3.2 GB)已复制,23.0463 秒,138 MB/秒

[root@c207 /mnt/rbd]# dd if=/dev/zero of=512m bs=1M count=512

记录了512+0 的读入

记录了512+0 的写出

536870912字节(537 MB)已复制,0.550973 秒,974 MB/秒

[root@c207 /mnt/rbd]# dd if=/dev/zero of=100m bs=1M count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.167676 秒,625 MB/秒

复写3g测试

[root@c207 /mnt/rbd]# dd if=/dev/zero of=3g bs=1M count=3024

记录了3024+0 的读入

记录了3024+0 的写出

3170893824字节(3.2 GB)已复制,23.1907 秒,137 MB/秒

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ceph 10.3版的安装

    domain0
  • CENTOS7手动安装CEPH 原

    1.配置你的hostname 你不要搞奇葩的hostname,奇葩的hostname就可能有奇葩的问题,你就老实的node1,这种的字母加数字 centos...

    domain0
  • ceph mds的客户端告警记录 原

    domain0
  • Ceph介绍及部署

    ceph是一个分布式存储系统,提供对象存储,块存储,文件存储,Ceph集群至少需要一个ceph monitor和两个OSD守护进程,而运行ceph文件系统客户端...

    dogfei
  • centos 7.3 快速安装ceph

    Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

    yaohong
  • kubernetes使用ceph作为存储挂载

    1、安装客户端(客户端版本与ceph集群的版本最好一致,不然创建image的时候死活创建不了):

    菲宇
  • ceph luminous 新功能之内置dashboard

    ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一...

    用户2772802
  • Centos7下使用Ceph-deploy快速部署Ceph分布式存储-操作记录

    之前已详细介绍了Ceph分布式存储基础知识,下面简单记录下Centos7使用Ceph-deploy快速部署Ceph环境: 1)基本环境

    洗尽了浮华
  • Ceph 快速部署 ( Centos7 + Jewel )

    这篇文章主要介绍了如何用三台虚拟机搭建一套 Ceph 分布式系统,步骤简洁但不失准确性。环境清理一小节可以解决绝大多数部署不成功的问题,最后一节介绍了常用的 C...

    腾讯云TStack
  • ​gitlab+jenkins打造ceph的rpm自动编译

    需要添加的插件:Gitlab Hook、Build Authorization Token Root、Gitlab Authentication、Gitlab

    用户1260683

作者介绍

domain0

腾讯工程师

腾讯 · 工程师 (已认证)

精选专题

活动推荐

扫码关注云+社区

领取腾讯云代金券