[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就全部安装到位了
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}
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进程
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/
列出文件系统列表
[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/
首先要如上安装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远程块设备的挂载需要内核支持,最好是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
[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/秒