怎么在码头工人里运行Ceph

介绍

本篇内容介绍了“怎么在码头工人里运行Ceph”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Ceph是一个完全开源的分布式存储方案,网络块设备以及文件系统,具有高稳定性,高性能,高扩展性等特点,可应对tb到exabyte级别的数据量。

通过使用创新性的调度算法(粉碎),主动存储节点,以及对等的八卦协议,Ceph规避了传统集中控制和查找表中的扩展性和可靠性问题。

Ceph目前在整个开源社区中极受推崇,已被广泛应用与虚拟化平台(Proxmox),云计算平台(OpenStack、CloudStack OpenNebula),容器技术(码头工人),以及大数据分析系统(Hadoop,作为HDFS的加服务器)中。

我尝试将Ceph运行在码头工人中已经快两年了。直到今天我依然在做这些工作。最近我更是在码头工人中部署Ceph方面投入了不小的精力。

在展开技术细节前,我要特别感谢肖恩·C麦考德对此工作的大力支持,当年的开源ceph-docker项目也的确是基于肖恩的早期工作。

现在让我们具体看看如何将Ceph运行在码头工人里!

原理

将Ceph运行在码头工人中是一个比较有争议的话题,不少人质疑这样操作的意义。虽然将检测模块,元数据服务器,以及雷达手表网关容器化都没有太大问题,但对于OSD(对象存储守护进程),事情会变得很棘手.Ceph的OSD专门针对物理机器进行优化,与底层硬件有很多关联。如果物理硬盘失效,OSD也无法运作,这给容器化的场景带来了问题。

坦白地讲,在过去某个时刻我也在想:

“我不知道自己为什么做这个,我只知道有人需要这个功能(当然,他们可能也不知道为什么想要)。我只是觉得想进行技术尝试,那就试试看!”

当然上述想法听起来并不乐观,但这确实是我当时真实的想法。我的观点随后有了一些变化,我来解释下为什么是值得的。希望这个解释也能改变你的看法(我的解释不仅仅是“码头工人很酷,所以我们要把所有东西都跑在码头工人里!”)。

不少开发者已经花了很多时间将他们的软件容器化。在这个过程中,他们也用过多种不同的工具来构建和管理他们的环境。如果我看到有人用 Kubernetes 来作为管理工具也一点都不会吃惊。

有的人就喜欢将最新潮的技术应用到生产当中,否则他们会觉得工作很无聊。所以当他们看到自己最喜欢的开源存储方案也正在被容器化时,他们会因为这个顺应了“一切容器化”的方式而感到高兴。

与传统的 yum 或 apt-get不同,容器使得软件的升级和回卷变得容易:我们可以通过 docker stop或者docker run来发布新的daemons版本。我们甚至可以在一台物理机器上运行多个相互隔离的集群。这些都为开发过程提供了极大的便利。

项目

如上所述,所有的工作都基于Sean C McCord的早期贡献,我们后来都在围绕他的工作做完善。现在如果你用ceph-docker,你可以将每个单一的Ceph daemon运行在Ubuntu或CentOS上。

我们在Docker Hub里有很多的镜像,我们使用Ceph的命名空间,因此我们的镜像前缀都是ceph/。我们使用了自动构建,因此每次我们整合一个新的补丁就会触发新的构建,从而生成一个新的容器镜像。

由于我们现在在从事代码重构,你会看到有很多的镜像版本。一直以来我们对每一个daemon构建一个单独的镜像(我们整合这些补丁的时候都会这样做)。所以监测、OSD、mds和radosgw各自都有独立的镜像。这个并不是最理想的方案,因此我们在尝试将所有组件都整合到一个叫做 daemon的镜像中。

这个镜像包含了所有的模块,你可以在运行docker run的时候通过命令行选择性地激活不同模块。如果你想试用我们的镜像,我们推荐使用ceph/daemon镜像。下面我就举例说明如何运行。

容器化Ceph

监测

由于监测模块不能在NAT过的网络中进行通信,我们必须使用 --net=host来将主机的网络层开放给容器:

$ sudo docker run -d --net=host \

-v/etc/ceph:/etc/ceph \

-v/var/lib/ceph/:/var/lib/ceph \

-e MON_IP=192.168.0.20 \

-e CEPH_PUBLIC_NETWORK=192.168.0.0/24 \

ceph/daemon mon

你可以配置如下选项:

MON_IP是运行Docker的主机IP

MON_NAME是你监测模块的名称(默认为$(hostname))

CEPH_PUBLIC_NETWORK是运行Docker的主机的CIDR。它和MON_IP必须是同一个网络。

CEPH_CLUSTER_NETWORK是运行Docker的主机的备用网口的CIDR,为OSD的备份流量使用。

怎么在码头工人里运行Ceph