上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“Openstack私有云”,如有兴趣,请关注。
继上篇《Ceph 之 使用ceph-deploy部署ceph集群》,ceph集群搭建完成之后,接下来就是使用了,ceph集群可以提供给块设备、文件系统、对象存储 进行使用,其中块设备的应用最成熟和广泛,可以用在生产系统;对象存储也很成熟,可以用在生产系统;文件系统据官网说还不是特别稳定,不建议在生产系统中使用。再重复一下环境:
环境:
系统centos7.4
ceph版本 ceph version 10.2.10
测试服务器为kvm虚拟机(openstack虚拟机)
服务器分配如下:
节点 | 服务 | cluster network |
---|---|---|
ceph-1(admin-node) | osd.{1,2,},mon.ceph-1 | eth0:192.168.1.161/24 |
ceph-2 | osd.{3,4},mon.ceph-2 | eth0:192.168.1.162/24 |
ceph-3 | osd.{5,6},mon.ceph-3 | eth0:192.168.1.163/24 |
节点 | 服务 | cluster network |
---|---|---|
control03(client) | ceph client | eth0:192.168.1.132/24 |
ceph每个节点在原来系统盘的基础上增加2块osd盘/dev/vdb 、/dev/vdc,集群共有6个osd
进程,3个monitor
进程。管理节点用作执行ceph-deploy
命令,使用ceph-1节点充当。
节点control03上面与ceph集群独立作为ceph集群的使用者(client),同一个局域网,是另一个openstack的一个控制节点,这里仅作测试用,与openstack没有联系。大家应该大概猜测到了后续我的思路是什么,openstack可以使用外部ceph集群,只需要在部署的时候进行相应的配置修改,就能够实现,这种架构我认为是一个不错的选择。
一、块设备的使用
我是参照官网进行的操作,其中块设备的操作网址:
http://docs.ceph.com/docs/master/start/quick-rbd/
逻辑还是很简单,首先是将客户端纳入到ceph集群中,这里有一个概念,就是客户端和ceph集群可以分开的,也可以是合在一起的,一般较小规模的是合在一起,比如我的环境下面,3个node节点的ceph集群,直接3个节点就可以使用ceph集群,不需要重新ceph-deploy install和ceph-deploy admin 。具体步骤如下:
1、客户端安装。在客户端节点上进行ceph-deploy install <client节点名>和ceph-deploy admin <client节点名>操作,如果在集群节点本身使用,可以跳过这一步;注意,在执行之前,双方的/etc/hosts文件添加主机纪录能够解析双方主机名称,然后ssh密钥拷贝,使ceph admin节点可以直接免密ssh登陆客户端。
ssh-copy-id <client节点名> ceph-deploy install <client节点名> ceph-deploy admin <client节点名>
2、创建pool池。在admin节点上(随便哪一个,只要执行过ceph-deploy admin命令的节点即可)执行下面的命令:
ceph osd pool create rbd 64 //其中rbd是pool的名称 注:官网上的命令是: rbd pool init <pool-name> , 在我的环境中rbd命令没有pool子命令,应该是版本原因。
3、配置块设备。在客户端侧创建image镜像,映射镜像到块设备,格式化块设备,mount块设备,其中后面两步和其他块设备的使用一样的。
a.创建image镜像
命令格式: #rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] rbd create foo --size 4096 --image-feature layering //创建一个名字为foo的镜像,如果没有制定pool名称,那么默认是rbd
b.映射镜像到块设备
命令格式:#rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] rbd map foo //将foo镜像映射到块设备
c.格式化块设备
命令格式:mkfs.ext4 -m0 /dev/rbd/rbd/foo //-m0 表示不保留空间为0 mkfs.ext4 /dev/rbd/rbd/foo
d.mount块设备
mkdir /mnt/foo mount /dev/rbd/rbd/foo /mnt/foo cd /mnt/foo
二. 对象存储的使用
和块存储一样,首先是安装客户端,创建网关实例,在需要的情况下更改相关配置。
1.安装客户端。在admin端执行:
命令格式:#ceph-deploy install --rgw <client-node> [<client-node> ...] ceph-deploy install --rgw control03
2.创建网关实例。在admin端执行:
ceph-deploy rgw create <client-node> ceph-deploy rgw create control03 注意,实例rgw默认的端口是7480 ,如果需要更改端口,可以通过修改配置文件ceph.conf实现,具体详见官网:http://docs.ceph.com/docs/master/start/quick-rgw/
3.使用对象存储网关。
ceph对象存储网关为应用提供 RESTful 类型的对象存储接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 两种类型。其中swift场景,比如可以在openstack中直接使用ceph对象存储网关作为swift的存储。这里不做详细记录。
三.文件系统的使用
Ceph FS是一个支持POSIX接口的文件系统。文件系统对于客户端来说可以方便的挂载到本地使用。Ceph FS构建在RADOS之上,继承RADOS的容错性和扩展性,支持冗余副本和数据高可靠性。
MDS
MDS(Metadata Server)即元数据Server主要负责Ceph FS集群中文件和目录的管理。 元数据主要记录数据的属性,如文件存储位置、大小、存储时间等,同时负责文件查找、文件记录、存储位置记录、访问授权等。
MDS与ceph-mon和ceph-osd类似也是一个Daemon进程,可以像MON和OSD一样在多节点部署实现冗余。MDS进程可以被配置为活跃或者被动状态,活跃的MDS为主MDS,其他的MDS处于备用状态,当主MDS节点故障时,备用MDS节点会接管其工作并被提升为主节点。
MDS部署
在admin节点(ceph-1)运行ceph-deploy命令部署mds到control03上:
命令格式:#ceph-deploy mds create {host-name}[:{daemon-name}] [{host-name}[:{daemon-name}] ...] ceph-deploy mds create control03
创建CephFS
CephFS需要使用两个Pool来分别存储数据和元数据,下面我们分别创建fs_data和fs_metadata两个Pool。设置pg_num为128:
ceph osd pool create fs_data 128 ceph osd pool create fs_metadata 128 ceph osd lspools 以上命令可以在随便一个有admin权限的节点运行,即可以在ceph-1上也可以在contro03上执行,因为这2个节点都执行过ceph-deploy admin命令。
接下来创建一个CephFS:
ceph fs new cephfs fs_metadata fs_data
使用下面的命令可以查看创建的CephFS:
ceph fs ls name: cephfs, metadata pool: fs_metadata, data pools: [fs_data ]
挂载CephFS
客户端访问Ceph FS有两种方式:
Kernel内核驱动:Linux内核从2.6.34版本开始加入对CephFS的原声支持
Ceph FS FUSE: FUSE即Filesystem in Userspace
因为我们的系统内核版本满足要求,所以我们以Kernel驱动方式挂载前面创建的那个CephFS:
mkdir /mnt/mycephfs mount -t ceph 192.168.1.161:6789,192.168.1.162:6789,192.168.1.163:6789:/ /mnt/mycephfs -o name=admin,secret=AQDVMQZbVNKEHhAAn0bzjYQpAgP5W1gKwtnthw== 注:上面的secret是ceph admin的密钥,在文件/etc/ceph/ceph.client.admin.keyring中;如果集群中有多个文件系统,可以通过参数 -o mds_namespace=myfs 专门指定。 df -h Filesystem Size Used Avail Use% Mounted on 192.168.1.161:6789,192.168.1.162:6789,192.168.1.163:6789:/ 210G 496M 210G 1% /mnt/mycephfs
卸载Ceph文件系统:
umount /mnt/mycephfs
总结:
集群服务器和客户端服务器可以分开也可以复用,总的来说使用ceph-deploy部署工具可以非常方便的部署块设备/对象存储/文件系统客户端程序及相关配置,概念上也比较清晰。
进一步的,可以通过部署独立的ceph集群给openstack使用,这样openstack本身部署的时候不要启用ceph,在使用块设备/对象存储的相关组建上配置使用外部ceph集群,可以有更灵活的架构选择,比如块设备使用一个快速固态硬盘存储池,对象存储使用慢速硬盘存储池,这样对隔离故障域也很有好处。