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 条评论
登录 后参与评论

相关文章

来自专栏IT 指南者专栏

基于 Hexo + GitHub Pages 搭建个人博客(三)

打开 themes 目录下的 next 主题配置文件,找到 Wechat Subscriber 标签,将该标签下的配置改成如下形式:

49940
来自专栏张戈的专栏

解决Nginx Helper插件一键清理缓存功能导致网站打不开问题

5 月份,张戈博客分享了一篇《Nginx 开启 fastcgi_cache 缓存加速,支持 html 伪静态页面》的文章。文中也提到了 WordPress 有一...

44290
来自专栏网络

强大的开源网络侦查工具:IVRE

IVRE简介 IVRE(又名DRUNK)是一款开源的网络侦查框架工具,IVRE使用Nmap、Zmap进行主动网络探测、使用Bro、P0f等进行网络流量被动分析,...

40270
来自专栏移动开发的那些事儿

IM二分法智能心跳策略

19030
来自专栏信安之路

同源策略与跨域请求

做前端开发经常会碰到各种跨域问题,通常情况下,前端除了 iframe 、script 、link、img、svg 等有限的标签可以支持跨域外(这也与这些标签的用...

21010
来自专栏张善友的专栏

MSDTC 故障排除

大多数 K2 blackpearl  运行时操作都需要 Microsoft 分布式事务处理协调器 (MSDTC) 支持,以确保操作事务性一致。如果没有 MSDT...

28360
来自专栏沈唁志

宝塔面板Mysql 5.6版本无法正常启动的解决方法

朋友找我的时候说的是 Mysql 启动不了,看他发的截图是宝塔面板,就要来了面板信息去看了一下

2.4K20
来自专栏北京马哥教育

Nginx区分PC或手机访问不同网站

近几年来,随着手机和pad的普及,越来越多的用户选择使用移动客户端访问网站,而为了获取更好的用户体验,就需要针对不同的设备显示出最合适的匹配,...

1.7K90
来自专栏Seebug漏洞平台

Discuz!X ≤3.4 任意文件删除漏洞分析

Discuz!X社区软件,是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。

45180
来自专栏友弟技术工作室

如何在CLI上管理密码

基于密码的认证在网络盛行的今天,你可能需要或者已经使用了某种密码管理工具来跟踪管理你正在使用的所有密码。有各种各样的在线或离线服务或者软件工具用于完成此类事情,...

531110

扫码关注云+社区

领取腾讯云代金券