ceph学习及部署使用
ceph介绍
我们常见的存储需求可以简单归纳成3个: 1.对象存储 Object Storage 2.块存储 Block Storage 3.文件系统 FileSystem ceph则是一个满足了3种不同需求的存储开源解决方案,不仅有分布式存储的功能,还有不同的灾备机制,以及灵活的机制以对接到现有的各种虚拟化接口,使用户可以用简单的服务器+磁盘搭建有分布式存储特性的服务,还可以应用到自身的云平台当中。本例子我们会用”块存储“,服务作为搭建使用ceph的实验演示,选择这个作为实验对象是因为块服务可以直接对接到云平台的虚拟机虚拟磁盘,第二篇文章会实验ceph+kvm技术,虚拟化技术使用kvm,虚拟磁盘会使用ceph的块服务。 以下大部分资料来自于ceph官网文档 http://docs.ceph.com/docs/master/部署环境及拓扑图
软件 | 版本 |
---|---|
OS | Ubuntu 14.04 Server 64bit |

我们参考官方然后设计了自己试验环境拓扑图:
Alt text
单元功能 | IP地址 | 描述 |
---|---|---|
ceph-deploy | 192.168.85.100 | ceph部署管理机,通过该服务器可以部署集群 |
mon-node1 | 192.168.85.102 | ceph集群管理机,该机器维护着整个集群的各种状态信息 |
osd0-node2 | 192.168.85.101 | OSD数据服务器,负责存储数据以及数据的相关操作 |
osd1-node3 | 192.168.85.105 | OSD数据服务器,负责存储数据以及数据的相关操作 |
ceph-client | 192.168.85.110 | ceph客户端,测试ceph块服务的节点 |
kvm-server | 192.168.85.145 | kvm服务端,测试ceph块服务的kvm服务器 |
前期准备
所有服务器保证时区与时间的准确性,具体可以参考相关资料文档,这里不详细描述。各服务器配置好相关主机名hostname 编辑/etc/hostname文件,修改好对应的主机名 更新主机名 $ hostname 主机名
配置服务器hosts列表 所有服务器 /etc/hosts 文件增加以下内容
1 2 3 4 5 6 |
192.168.85.100 ceph-deplog 192.168.85.102 mon-node1 192.168.85.101 osd0-node2 192.168.85.105 osd1-node3 192.168.85.110 ceph-client 192.168.85.145 kvm-server |
1 2 3 |
ssh-keygen #一路回车到底 cd ~/.ssh/ cat id_rsa.pub >> authorized_keys |
1 2 3 4 |
#在ceph-deploy主机测试到各ceph服务器的ssh情况 $ ssh root@mon-node1 $ ssh root@osd1-node2 $ ssh root@osd2-node3 |
1 2 3 |
#ceph-deploy主机安装ceph部署包 ceph-deploy $ apt-get update && apt-get install ceph-deploy #安装完毕之后,进入下一个阶段,部署ceph集群 |
部署ceph集群
在osd1-node2主机执行一下命令
1 2 |
#为了简单,在osd主机上面我们通过目录作为数据存储而不是专门提供一个数据磁盘 $ mkdir /var/local/osd0 |
1 2 |
#为了简单,在osd主机上面我们通过目录作为数据存储而不是专门提供一个数据磁盘 $ mkdir /var/local/osd1 |
#创建集群配置目录以存放部署过程中产生的各种配置文件
$ cd ~
$ mkdir my-cluster
$ cd my-cluster
#创建monitor
$ ceph-deploy new mon-node1
#执行完之后会产生一个ceph.conf的配置文件,在ceph.conf
文件[global]里面增加
$ osd pool default size = 2
#把ceph集群设置为active + clean,ceph默认会提供两份数
据备份,因为我们的实验环境只有2台osd所以我们选择该设置。
#安装ceph到各个ceph节点
$ ceph-deploy install ceph-deploy mon-node1 osd0-node2
osd1-node3
#在实战过程中,会发现安装ceph到节点的时候经常会超时报错,
这个时候我们可以单独一台台地安装,把以上命令拆分成,
每执行完一个节点再到下一个节点,如果提示超时了,登录到对
应节点把apt-get进程kill掉才能再次安装,否则会提示apt-get
已经被锁了。
$ ceph-deploy install ceph-deploy mon-node1
$ ceph-deploy install ceph-deploy osd0-node2
$ ceph-deploy install ceph-deploy osd1-node3
#初始化mon
$ ceph-deploy mon create-initial
#执行完毕之后会产生3个配置文件
xxx.client.admin.keyring
xxx.bootstrap-osd.keyring
xxx.bootstrap-mds.keyring
#prepare osd
$ ceph-deploy osd prepare osd0-node2:/var/local/osd0
$ ceph-deploy osd prepare osd1-node3:/var/local/osd1
#activate osd
$ ceph-deploy osd activate osd0-node2:/var/local/osd0
$ ceph-deploy osd activate osd1-node3:/var/local/osd1
#复制ceph相关配置文件和管理key到各个节点
$ ceph-deploy admin ceph-deploy mon-node1 osd0-node2 osd1
-node3
#来到这里,整个ceph集群已经部署完毕,执行ceph health查
看当前是否正常运行
$ ceph health
HEALTH_OK #代表集群已经正常运作
#执行ceph status查看集群详细信息
$ ceph status
cluster f457079a-f09c-4e6a-a978-a5a5e5d42d34
health HEALTH_OK
monmap e1: 1 mons at {mon-node1=192.168.85.
102:6789/0}, election epoch 1, quorum 0 mon-node1
osdmap e18: 2 osds: 2 up, 2 in
pgmap v478: 320 pgs, 4 pools, 1172 MB data,
312 objects
15347 MB used, 728 GB / 783 GB avail
320 active+clean
使用ceph块服务之——ceph-client
使用ceph-client的方式使用ceph块服务
1 2 3 |
#ceph-deploy执行部署ceph-client $ ceph-deploy install ceph-client $ ceph-deploy admin ceph-client |
#在ceph-client执行 #-m mon IP $ rbd create foo --size 1024 -m 192.168.85.102 -k /etc/ceph/ceph.client.admin.keyring $ rbd map foo --name client.admin -m 192.168.85.102 -k /etc/ceph/ceph.client.admin.keyring #执行完毕之后,我们可以看到/dev/rbd/rbd下面多了一个 foo的磁盘设备,接下来我们对齐进行格式化并挂载 $ mkfs.ext4 -m0 /dev/rbd/rbd/foo $ mkdir /mnt/ceph-block-device $ mount /dev/rbd/rbd/foo /mnt/ceph-block-device #完成之后,我们就可以正常使用ceph提供的分布式块存储服务了
使用ceph块服务之——kvm+libvirt+rbd
在kvm中使用ceph块服务作为虚拟器的虚拟磁盘,关于kvm的部署使用等请参考http://blog.eflypro.com/2015/07/27/kvm-iscsi/ 详情就不在这里描述,这里只是介绍通过配置虚拟机的xml文件使用ceph块服务设备。下面是ceph块服务的逻辑栈到目前为止,ceph块服务支持以下接口:
支持项 | 描述 |
---|---|
Commands | 命令行方式 |
Kernel Modules | 内核模块 |
Snapshots | 快照 |
QEMU | qemu虚拟化 |
libvirt | libvirt是虚拟化的常见API接口层,目前支持QEMU/KVM XEN LXC VirtualBox等,我们的kvm方案就使用libvirt作为实验对象 |
Cache Settings | |
OpenStack | 开源虚拟化平台 |
CloudStack | |
Manpage rbd | |
Manpage rbd-fuse | |
Manpage ceph-rbdnamer | |
RBD Replay | |
Manpage rbd-replay-prep | |
Manpage rbd-replay | |
Manpage rbd-replay-many | |
librbd | API |

先为kvm虚拟机创建存储池以及相关权限
#ceph-deploy执行 #先安装qemu工具库 $ apt-get install qemu-utils #创建存储池libvirt-pool $ ceph osd pool create libvirt-pool 128 128 #查看是否创建成功 $ ceph osd lspools 0 data,1 metadata,2 rbd,3 libvirt-pool, #创建及配置ceph用户权限 $ ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool' #检查用户及权限情况 $ ceph auth list installed auth entries: osd.0 key: AQBzdBxWoLH7JRAADjlJL0St0A+1x/cwYEb7BA== caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQB6dBxWILjsMBAAWXdg1YAQWyQNSB69CW8Ttw== caps: [mon] allow profile osd caps: [osd] allow * client.admin key: AQBfcxxW2GEhHRAA382/y9k+UvAV1pqv1xzyKw== caps: [mds] allow caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQBgcxxWGIdFAhAAl7BYUp4HlAI6zwyh5zGMhg== caps: [mon] allow profile bootstrap-mds client.bootstrap-osd key: AQBfcxxWcGmFLRAAhvGkUHPm0Cfx8Ypzcvfx7A== caps: [mon] allow profile bootstrap-osd client.libvirt key: AQAFqxxWkJvZBBAAEpkVKhwys8g+obqKP/h4NQ== caps: [mon] allow r caps: [osd] allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool #在池libvirt-pool里面创建一个给kvm使用的块,大小为2G $ qemu-img create -f rbd rbd:libvirt-pool/new-libvirt-image 2G #查看是否成功创建 $ rbd -p libvirt-pool ls new-libvirt-image #最后,创建ceph用户key文件已给到kvm服务器使用ceph块服务时认证用到 $ ceph auth get-key client.libvirt | tee client.libvirt.key #执行完毕之后会产生一个client.libvirt.key密钥文件,我们把它copy 到kvm-server去,自此ceph-deploy部分命令已经完结,下面到kvm-server
kvm配置使用ceph块设备作为虚拟机虚拟磁盘 #在kvm-server创建secret.xml文件,内容如下
1 2 3 4 5 |
<secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret> |
1 2 3 4 5 6 |
#kvm-server执行以下命令,创建secret uuid $ virsh secret-define --file secret.xml xxxxx bca96153-b84f-45d0-a312-9361fe566458 xxxxx |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<domain type='kvm'> <name>ceph001</name> //虚拟机名称 <memory>524288</memory> //最大内存512MB <currentMemory>524288</currentMemory> //可用内存512MB <vcpu>1</vcpu> //虚拟cpu个数 <os> <type arch='x86_64' machine='pc'>hvm</type> <boot dev='cdrom'/> //光盘启动 </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='localtime'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <!--<emulator>/usr/libexec/qemu-kvm</emulator>--> |
1 2 3 4 5 6 7 |
$ virsh define cephvm.xml $ virsh start ceph001 $ virsh vncdisplay ceph001 #查看ceph001实例的vnc端口 #然后使用vnc工具连接到kvm-server的IP以及ceph001实例的vnc端口即可远程管理了 |