Ceph 类似 Hadoop 计算

loic

计算可以与 Ceph 对象位于同一台机器上,并从本地磁盘访问它,而不是通过网络。Noah Watkins 详细解释了 它,并且可以使用 Hello World 示例进行实验,该示例调用 hello 插件,该插件包含在 Emperor 版本中。

从源代码编译 Ceph 后,使用以下命令在源代码目录中运行测试集群:

$ cd src $ rm -fr dev out ; mkdir -p dev $ LC_ALL=C MON=1 OSD=3 bash -x ./vstart.sh -d -n -X -l mon osd

检查它是否正常工作

$ ./ceph -s *** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH *** cluster 091a6854-924b-405c-ac6e-7fe05baaeb63 health HEALTH_WARN too few pgs per osd (8 < min 10) monmap e1: 1 mons at {a=127.0.0.1:6789/0}, election epoch 2, quorum 0 a osdmap e9: 3 osds: 3 up, 3 in pgmap v49: 24 pgs, 3 pools, 0 bytes data, 0 objects 463 GB used, 85400 MB / 547 GB avail 24 active+clean

然后转到示例目录,并将 makefile 修改为指向刚刚编译的源代码,而不是依赖于已安装的版本

$ cd ../examples/librados/ $ cat > Makefile all: hello_world.cc g++ -I../../src/include -g -c hello_world.cc -o hello_world.o libtool --mode=link g++ -L../../src -g hello_world.o -lrados -o librados_hello_world $ make

并使用以下命令运行它:

$ cd ../../src $ ../examples/librados/librados_hello_world --conf ceph.conf 我们设置了一个 rados 集群对象,我们解析了我们的配置选项,我们连接到 rados 集群,我们创建了一个名为 hello_world_pool 的新池,我们为我们的池创建了一个 ioctx,我们写入了一个名为 hello_object 的新对象,内容为 hello world!我们读取了我们的对象 hello_object,并获得了 0 字节的内容 hello world!我们在我们的对象上设置了 xattr 'version'!我们用内容 hello world!v2 覆盖了我们的对象,我们因为 xattr 不如指定而失败了写入,我们遵循 xattr 测试用内容 hello world!v3 覆盖了我们的对象

然后可以将 hello world 示例进行调整并在本地进行测试。准备好后,可以将插件安装到实际 Ceph 集群的每个 OSD 上,地址为:

/usr/lib/rados-classes/libcls_hello.so /usr/lib/rados-classes/libcls_myownplugin.so

下次重新启动 OSD 时,它将被加载并准备好本地处理数据。