前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ceph基础运维操作 原

ceph基础运维操作 原

作者头像
domain0
发布2018-08-02 12:04:34
6990
发布2018-08-02 12:04:34
举报
文章被收录于专栏:运维一切运维一切

ceph中文文档

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

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

代码语言:javascript
复制
[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 完毕之后初始化目录

代码语言:javascript
复制
#!/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的状态

代码语言:javascript
复制
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* 如果发现有分区可以使用下面脚本删除

代码语言:javascript
复制
#!/bin/sh
fori in $(ls /dev/sd*|grep -v sda|grep -v 1)
do
    parted $i<<ESXU
    rm 1
    quit
    ESXU
Done

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

代码语言:javascript
复制
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真幸福)

代码语言:javascript
复制
#!/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/秒

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/05/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增加一个osd 安装前准备(a主机部署了ceph-deplay需要在b主机上部署增加osd) 安装前需要配置ssh免密登录,和hosts,这里不记录了
    • 【在b主机上】 增加ceph源 Vim /etc/yum.repo.d/ceph.repo
    • 卸载osd 如果要卸载一个osd,首先要将这个osd移出集群:
    • 增加mon Mon增加之前需要像上面的增加osd那样先去初始化好机器,特别是机器的hostname,ceph依赖高版本的内核,如果是操作系统首选centos7(centos6要退出历史舞台了),hostname中不要带- \等之类的特殊操作符号,就中规中矩字母+数字。安装好ceph各种包之后,然后初始化好目录,然后找一个临时目录比如/data/ceph/mon/tmp/ 导出mon的密钥环
    • 删除mon
    • Cephfs 这个玩意相当的纠结(个人感受),本身ceph设计理念是无中心的,数据在哪算算就好。可偏偏cephfs就是有中心的(也就是所谓的master),我想可能没有某个文件系统是可以适配所有的文件场景的,cephfs(只是fs,注意区分)这种的结构和moosefs比较相似,都比较适合大量小文件的场景,我有时想,ceph可以精简一点,moosefs就怕metadata丢失,有的同学耗费精力去搞drbd,还不如用ceph的rbd做mfs的元数据盘,性能又好又安全。不过就是没有自动切换master的装置,还要自己去弄Keepalived实现,与其这样繁琐,还不如直接用cephfs,不过YY总是美好的。
      • Cephfs的挂载
        • Rbd的挂载
        • 一些参考的测试数据: ##cephfs测试结果
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档