安装ceph测试环境

刚开始我手头有2个虚拟机,系统是Ubuntu 12.04,因此用其中一个安装所有ceph服务(包括mon、osd),一个作为admin节 点。后来尝试把admin节点也作为ceph client,发现Ubuntu 12.04的默认内核版本太低,不兼容rbd 。于是让同事新分配了一个新的虚拟机,Ubuntu 14.04系统,用作ceph client。3台vm都只有一个内网IP。测试服务的架构如下:

clustermap

上述节点的作用说明如下:

  • admin node: 仅作集中部署用途,运行ceph-deploy命令
  • ceph node: 运行所有ceph服务,不过我这里只启用了mon、osd
  • client node: 运行ceph的块存储客户端(rbd client)

(一)准备工作

首先设置3个vm的主机名,写在/etc/hosts里。ceph部署时使用短域名(hostname -s)识别服务器。

172.17.0.95 ceph.yygamedev.com ceph
172.17.6.176 ceph2.yygamedev.com ceph2
172.17.6.236 ceph3.yygamedev.com ceph3

在这3台vm里,创建ceph用户,设置该用户的sudo类型为NOPASSWD。然后退出系统,使用ceph用户重新登录。接着要配置vm的ssh服务,让admin节点的ceph用户可以不用密码登录另外两台服务器。关于ssh配置请参考这篇文档

admin节点的~ceph/.ssh/config文件内容如下,我们的ssh服务使用非标准的9022端口。

Host ceph2
Hostname ceph2
User ceph
Port 9022

Host ceph3
Hostname ceph3
User ceph
Port 9022

接下来在admin节点上安装ceph-deploy工具,这个工具用来自动化安装ceph服务,非常方便。在admin节点上执行如下命令,增加release key:

 wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add - 

将ceph包增加到系统的repo里:

echo "deb http://ceph.com/debian-firefly/ precise main" | sudo tee /etc/apt/sources.list.d/ceph.list

上述firefly是ceph的版本号,目前我用的firefly是2014 LTS版本,其他版本号请见:

http://docs.ceph.com/docs/master/releases/

最后更新repo并且安装ceph-deploy:

sudo apt-get update && sudo apt-get install ceph-deploy

(二)部署工作

(1)如下部署工作,如无特别说明,都在管理节点,使用ceph用户完成。首先创建一个专门的部署子目录:

mkdir my-cluster
cd my-cluster

(2)如果你之前已经部署过ceph cluster,那么在正式部署之前,最好删除掉它们:

ceph-deploy purgedata ceph ceph2 ceph3
ceph-deploy forgetkeys

(3)现在创建一个全新的ceph cluster:

ceph-deploy new ceph2

这里的ceph2是mon服务的主机名。检查当前目录,你会发现多了一些东西。

(4)运行ceph-deploy对3台vm依次安装ceph服务:

ceph-deploy install ceph ceph2 ceph3

(5)初始化mon服务,收集key:

ceph-deploy mon create-initial

运行完后发现当前目录多了如下key文件:

ceph.bootstrap-mds.keyring
ceph.bootstrap-osd.keyring
ceph.client.admin.keyring

(6)增加3个osd。请注意ceph的默认复制策略是对同一文件保存3份副本,因此最少要有3个osd服务。典型的部署场景是一块物理磁盘对应一个osd,不过我的环境比较简单,只在ceph2这个vm里创建了3个子目录,每个目录对应一个osd进程。在ceph2的/data下创建3个子目录:

sudo mkdir /data/osd{0,1,2}

(7)回到管理节点,执行如下命令:

ceph-deploy osd prepare ceph2:/data/osd0 ceph2:/data/osd1 ceph2:/data/osd2
ceph-deploy osd activate ceph2:/data/osd0 ceph2:/data/osd1 ceph2:/data/osd2

第一个命令表示初始化osd,第二个命令表示激活osd.

(8)继续运行ceph-deploy admin命令将配置文件和key复制到所有节点:

ceph-deploy admin ceph ceph2 ceph3

(9)确保所有节点上,这个文件具有可读权限:

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

(10)最后检查集群的健康状态:

$ ceph health
HEALTH_OK

上述返回说明集群健康OK。

但是,这个安装后,返回的状态很可能不正常,还要调整一项crushmap参数。

首先获取当前的crushmap:

ceph osd getcrushmap -o /tmp/crushmap.original

/tmp/crushmap.original是一个编译过的文件,在编辑它之前必须反编译它:

crushtool -d /tmp/crushmap.original -o /tmp/crushmap

现在编辑/tmp/crushmap,如下行修改为:

step chooseleaf firstn 0 type osd

默认的应该是:

step chooseleaf firstn 1 type host

这里表示ceph的存储选择优先顺序,默认是按主机选择。我这里是在1个vm里运行3个osd,所以改成按osd选择。

修改完后,重新编译该文件:

crushtool -c /tmp/crushmap -o /tmp/crushmap.new

更新集群的clustermap:

ceph osd setcrushmap -i /tmp/crushmap.new

现在就OK了。再运行ceph health和ceph -s应该看到返回都正常。

(三)测试块设备

由于只安装了mon和osd,因此这里只测试ceph的rbd块设备服务。进入ceph3这个client节点,切换用户到root,如下命令都以root执行。

# 加载rbd内核模块:
[email protected]:~# modprobe rbd

# 用rbd命令创建一个大小为1024MB的镜像:
[email protected]:~# rbd create test_image --size 1024

# 查看已有镜像:
[email protected]:~# rbd ls
bar
foo
test_image
foo2
foo3

# 将创建的镜像map到系统:
[email protected]:~# rbd map test_image

# 显示已经map的镜像:
[email protected]:~# rbd showmapped
id pool image snap device
0 rbd bar - /dev/rbd0
1 rbd test_image - /dev/rbd1

# 对map上的镜像格式化文件系统:
[email protected]:~# mkfs.ext4 -m0 /dev/rbd1
mke2fs 1.42.9 (4-Feb-2014)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1024 blocks, Stripe width=1024 blocks
65536 inodes, 262144 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

# 创建一个目录用来挂载新文件系统:
[email protected]:~# mkdir /data/test_ceph_dir

# 挂载文件系统:
[email protected]:~# mount /dev/rbd1 /data/test_ceph_dir/

# 展示已挂载的文件系统:
[email protected]:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 15G 2.6G 11G 19% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 233M 4.0K 233M 1% /dev
tmpfs 49M 804K 48M 2% /run
none 5.0M 0 5.0M 0% /run/lock
none 243M 0 243M 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/rbd0 10G 162M 9.9G 2% /mnt/ceph-block-device
/dev/rbd1 976M 1.3M 959M 1% /data/test_ceph_dir

进入/data/test_ceph_dir这个目录,就可以对新的块设备进行读写操作了。

在操作过程中,及时留意ceph集群的状态:

$ ceph -s
cluster 963a6787-0043-48e2-8677-a70f1564be17
health HEALTH_OK
monmap e1: 1 mons at {ceph2=172.17.6.176:6789/0}, election epoch 2, quorum 0 ceph2
osdmap e45: 3 osds: 3 up, 3 in
pgmap v44827: 384 pgs, 3 pools, 4865 MB data, 1585 objects
120 GB used, 102 GB / 235 GB avail
384 active+clean

上述所有384个pg都是active+clean状态即为正常。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。