Skip to content
Snippets Groups Projects
Commit eb4fd64d authored by Drunkard Zhang's avatar Drunkard Zhang
Browse files

Merge git://github.com/sptty/ceph-Chinese-doc into community-china

parents a65292a8 8fbc97bb
No related branches found
No related tags found
No related merge requests found
Showing
with 1189 additions and 670 deletions
##Ceph官方文档汉化项目:
####Ceph官方文档汉化组是由Ceph中国社区发起的,志愿者自愿参与的组织团队,目的是为用户和开发者提供支持文档。我们的主要工作就是对Ceph官方文档进行汉化,这是一个长期并且能够提升英语和技术水平的工作,方便更多中文用户能够体验 Ceph 的所有功能。
如果您对开源事业充满兴趣,赶快加入我们吧!我们相信激情和兴趣是推动开源事业蓬勃发展的重要源动力。我们鼓励成员去邀请同样关心开源事业的新成员,形成开源社区建设的良性循环。
参与翻译工作的人员名单将会在README里面体现出来。
###文档地址:http://docs.ceph.org.cn
###项目负责人:sptty
###联系邮箱:sptty@ceph.org.cn‍
##以下为现已加入人员名单:
####高华敏kaye
####homas
####nuzhoulin
####小猴子_LHJ
####sptty
####囧囧男
####半天河
=======
====
# 如果您有兴趣加入我们,随时联系我!!
This diff is collapsed.
This diff is collapsed.
......@@ -6,7 +6,7 @@
.. program:: rbd-nbd
提纲
摘要
====
| **rbd-nbd** [-c conf] [--nbds_max *limit*] [--read-only] [--device *nbd device*] map *image-spec* | *snap-spec*
......@@ -18,8 +18,8 @@
====
**rbd-nbd** 是个 RADOS 块设备( rbd )映像的客户端,与 rbd 内核\
模块类似。它可以把一个 rbd 映像映射为 nbd (网络块设备)设备,这\
样就可以当常规的本地块设备使用了。
模块类似。它可以把一个 rbd 映像映射为 nbd ( Network Block Device,\
网络块设备)设备,这样就可以当常规的本地块设备使用了。
选项
......@@ -28,11 +28,11 @@
.. option:: -c ceph.conf
指定 ceph.conf 配置文件,而不是用默认的 /etc/ceph/ceph.conf 来确\
定启动时需要的监视器
定启动时需要的 monitor 地址
.. option:: --nbds_max *limit*
载入 NBD 内核模块时覆盖其参数,用于限制 nbd 设备数量。
载入 NBD 内核模块时覆盖其参数,用于限制 nbd 设备数量。
映像名和快照名规则
......@@ -41,18 +41,18 @@
| *image-spec* is [*pool-name*]/*image-name*
| *snap-spec* is [*pool-name*]/*image-name*\ @\ *snap-name*
*pool-name* 的默认值是 "rbd" 。如果映像名里包含字符串斜杠( / ),\
*pool-name* 的默认值是 "rbd" 。如果映像名里包含斜线符号( '/' ),\
那就必须指定 *pool-name* 。
使用范围
========
**rbd-nbd** 是 Ceph 的一部分,这是个伸缩力强、开源、分布式的\
存储系统,更多信息参见 http://ceph.com/docs 。
**rbd-nbd** 是 Ceph 的一部分,这是个大规模可伸缩、开源、分布式的\
存储系统,更多信息参见 http://ceph.com/docs 或 http://docs.ceph.org.cn/
参考
====
另请参阅
========
:doc:`rbd <rbd>`\(8)
......@@ -18,7 +18,7 @@
.. toctree::
飞前检查 <preflight-checklist>
预检 <preflight-checklist>
安装 Ceph <ceph-deploy-install>
.. raw:: html
......
==========
飞前检查
预检
==========
.. versionadded:: 0.60
本篇\ **飞前检查**\ 会协助你准备运行 ``ceph-deploy`` 的节点、和服务器节点,以使用\
本篇\ **预检**\ 会协助你准备运行 ``ceph-deploy`` 的节点、和服务器节点,以使用\
无密码 ``ssh`` 和 ``sudo`` 。
通过 ``ceph-deploy`` 部署 Ceph 前,先要在管理节点和运行 Ceph 守护进程的节点上确认\
......@@ -93,6 +93,6 @@
确保你的管理节点网络连接正常、且能连接服务器节点(如确认 ``iptables`` 、 ``ufw`` \
或其它可阻断连接的工具、流量转发等等这些组件配置正常)。
完成飞前检查后,你就可以开始用 ``ceph-deploy`` 部署了。
完成预检后,你就可以开始用 ``ceph-deploy`` 部署了。
.. _操作系统推荐: ../../../start/os-recommendations
......@@ -2,18 +2,18 @@
Ceph 对象网关
===============
:term:`Ceph 对象网关`\ 是个对象存储接口,在 ``librados`` 之上为应用程序构建了一个 \
RESTful 风格的 Ceph 存储集群网关。 :term:`Ceph 对象存储`\ 支持 2 种接口:
:term:`Ceph 对象网关`\ 是一个构建在 ``librados`` 之上的对象存储接口,它为应用程\
序访问Ceph 存储集群提供了一个 RESTful 风格的网关 。 :term:`Ceph 对象存储`\ 支持 2 种接口:
#. **S3-compatible:** 提供了对象存储接口,亚马逊S3 RESTful 风格的接口兼容
#. **兼容S3:** 提供了对象存储接口,兼容 亚马逊S3 RESTful 接口的一个大子集
#. **Swift-compatible:** 提供了对象存储接口, OpenStack Swift 接口兼容
#. **兼容Swift:** 提供了对象存储接口,兼容 Openstack Swift 接口的一个大子集
Ceph 对象存储使用 Ceph 对象网关守护进程( ``radosgw`` ),它是个与 Ceph 存储集群\
交互的 FastCGI 模块。因为它提供了与 OpenStack Swift 和 Amazon S3 兼容的接口, \
RADOS 要有它自己的用户管理。 Ceph 对象网关可与 Ceph FS 客户端或 Ceph 块设备客户端\
共用一个存储集群。 S3 和 Swift API 共用一个通用命名空间,所以你可以用一个 API 写、\
然后用另一个检出
共用一个存储集群。 S3 和 Swift 接口共用一个通用命名空间,所以你可以用一个接口写如\
数据、然后用另一个接口取出数据
.. ditaa:: +------------------------+ +------------------------+
| S3 compatible API | | Swift compatible API |
......@@ -33,14 +33,14 @@ RADOS 要有它自己的用户管理。 Ceph 对象网关可与 Ceph FS 客户
手动安装 <../../install/install-ceph-gateway>
简单配置 <config>
联盟配置 <federated-config>
异地同步配置 <federated-config>
配置参考 <config-ref>
管理指南 <admin>
清除临时数据 <purge-temp>
S3 API <s3>
Swift API <swift>
管理操作 API <adminops>
与 OpenStack Keystone 对接 <keystone>
troubleshooting
与 OpenStack Keystone 集成 <keystone>
故障排除
radosgw 手册页 <../../man/8/radosgw>
radosgw-admin 手册页 <../../man/8/radosgw-admin>
......@@ -10,13 +10,13 @@
实例:创建一映像并写入
======================
要使用 `rbd` ,必须先连接 RADOS 并打开 IO 上下文: ::
要使用 `rbd` ,必须先连接 RADOS 并打开一个 IO 上下文: ::
cluster = rados.Rados(conffile='my_ceph.conf')
cluster.connect()
ioctx = cluster.open_ioctx('mypool')
然后实例化 :class:rbd.RBD 对象,用它来创建映像: ::
然后实例化一个 :class:rbd.RBD 对象,用它来创建映像: ::
rbd_inst = rbd.RBD()
size = 4 * 1024**3 # 4 GiB
......@@ -29,9 +29,9 @@
image.write(data, 0)
上面的代码向映像前面写入了 600 字节的 foo 字符串。注意数据不能是 :type:unicode , \
librbd 不如何处理大于 :c:type:char 的字符
librbd 不知道如何处理大于 :c:type:char 宽度的字符。
最后,关闭映像、 IO 上下文、和到 RADOS 的连接。 ::
最后,应该要关闭映像、 IO 上下文 RADOS 的连接。 ::
image.close()
ioctx.close()
......@@ -58,8 +58,8 @@ librbd 不能如何处理大于 :c:type:char 的字符串。
cluster.shutdown()
这样做有些繁琐,所以 :class:`Rados` 、 :class:`Ioctx` 和 :class:`Image` 类可以当\
上下文管理器来用,它能自动关闭(见 :pep:`343` )。上下文管理器用时,上面的实例可\
以写成: ::
上下文管理器来用,它能自动关闭(见 :pep:`343` )。作为上下文管理器使用时,上面的\
例子可以写成: ::
with rados.Rados(conffile='my_ceph.conf') as cluster:
with cluster.open_ioctx('mypool') as ioctx:
......
......@@ -4,9 +4,9 @@
.. index:: Ceph Block Device; livirt
``libvirt`` 库是管理程序和软件应用间的一个虚拟机抽象层。有了 ``libvirt`` ,开发者\
``libvirt`` 库是管理程序和软件应用间的一个虚拟机抽象层。通过 ``libvirt`` ,开发者\
和系统管理员只需要关注这些管理器的一个通用管理框架、通用 API 、和通用 shell 接口\
(即 ``virsh`` )就可以了,像
(即 ``virsh`` )即可,包括
- QEMU/KVM
- XEN
......@@ -14,8 +14,8 @@
- VirtualBox
- 等等
Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行能与 ``libvirt`` 交互\
的软件。下面的堆栈图解释了 ``libvirt`` 和 QEMU 如何通过 ``librbd`` 使用 Ceph 块设\
Ceph 块设备支持 QEMU/KVM ,所以你可以通过能与 ``libvirt`` 交互的软件来使用 Ceph \
块设备。下面的堆栈图解释了 ``libvirt`` 和 QEMU 如何通过 ``librbd`` 使用 Ceph 块设\
备。
......@@ -34,63 +34,58 @@ Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行
+------------------------+ +------------------------+
``libvirt`` 常见于为云解决方案提供 Ceph 块设备,像 OpenStack 、 ClouldStack 它\
们用 ``libvirt`` 和 QEMU/KVM 交互、 QEMU/KVM 再与 Ceph 块设备通过 ``librbd`` 交\
``libvirt`` 常见于为云解决方案提供 Ceph 块设备,像 OpenStack 、 ClouldStack 它\
们用 ``libvirt`` 和 QEMU/KVM 交互、 QEMU/KVM 再通过 ``librbd`` 与 Ceph 块设备交\
互。详情见\ `块设备与 OpenStack`_ 和\ `块设备与 CloudStack`_ 。关于如何安装见\ \
`安装`_\ 。
你也可以通过 ``libvirt`` 、 ``virsh`` 和 ``libvirt`` API 使用 Ceph 块设备,详\
情见 `libvirt 虚拟化 API`_ 。
要创建使用 Ceph 块设备的虚拟机,请看后面几段。具体应用时,我们用 ``libvirt-pool`` \
作为存储池名、 ``client.libvirt`` 作为用户名、 ``new-libvirt-image`` 作为映像名,\
你可以任意命名,确保在后续过程中用自己的名字替换掉对应名字即可。
要创建使用 Ceph 块设备的虚拟机,请参照下文中的步骤。在示范性实施例中,我们用 \
``libvirt-pool`` 作为存储池名、 ``client.libvirt`` 作为用户名、 \
``new-libvirt-image`` 作为映像名。你可以任意命名,但请确保在后续过程中用自己的名字\
替换掉对应名字。
配置 Ceph
=========
要把 Ceph 用于 ``libvirt`` ,执行下列步骤:
配置 Ceph 用于 ``libvirt`` ,执行下列步骤:
#. `创建一存储池`_\ (或者用默认的)。本例用 ``libvirt-pool`` 作存储池名,配备了 \
128 个归置组。
::
#. `创建——存储池`_\ (或者用默认的)。本例用 ``libvirt-pool`` 作存储池名,设定了 \
128 个归置组。 ::
ceph osd pool create libvirt-pool 128 128
验证存储池是否存在。
::
验证存储池是否存在。 ::
ceph osd lspools
#. `创建一 Ceph 用户`_\ ( 0.9.7 版之前的话用 ``client.admin`` ),本例用 \
``client.libvirt`` 、且权限限制到 ``libvirt-pool`` 。
::
#. `创建—— Ceph 用户`_\ ( 0.9.7 及之前的版本用 ``client.admin`` ),本例用 \
``client.libvirt`` 、且权限限制到 ``libvirt-pool`` 。 ::
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
**注:** ``libvirt`` 访问 Ceph 时将用 ``libvirt`` 作为 ID ,而不是 \
``client.libvirt`` 。关于 ID 和名字不同的详细解释请参考\ `用户管理——用户`_\ \
``client.libvirt`` 。关于 ID 和名字不同之处的详细解释请参考\ `用户管理——用户`_\ \
和\ `用户管理——命令行界面`_\ 。
#. 用 QEMU 在 RBD 存储池中\ `创建一映像`_\ 。本例中映像名为 \
``new-libvirt-image`` 、存储池为 ``libvirt-pool`` 。
::
#. 用 QEMU 在 RBD 存储池中\ `创建映像`_\ 。本例中映像名为 \
``new-libvirt-image`` 、存储池为 ``libvirt-pool`` 。 ::
qemu-img create -f rbd rbd:libvirt-pool/new-libvirt-image 2G
验证映像是否存在。
::
验证映像是否存在。 ::
rbd -p libvirt-pool ls
**注:**\ 你也可以用 `rbd create`_ 创建映像,但我们建议顺便确认下 QEMU 可正常运\
行。
**注:**\ 你也可以用 `rbd create`_ 创建映像,但我们建议使用示例中的命令,来顺便\
确认 QEMU 可正常运行。
准备虚拟机管理器
......@@ -98,15 +93,13 @@ Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行
即使没 VM 管理器你也可以用 ``libvirt`` ,但是用 ``virt-manager`` 创建域更简单。
#. 安装个虚拟机管理器,详情见 `KVM/VirtManager`_ 。
::
#. 安装虚拟机管理器,详情见 `KVM/VirtManager`_ 。 ::
sudo apt-get install virt-manager
#. 下载一 OS 映像。
#. 下载一 OS 映像(如有必要)
#. 启动虚拟机管理器。
::
#. 启动虚拟机管理器。 ::
sudo virt-manager
......@@ -114,88 +107,81 @@ Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行
新建虚拟机
==========
要用 ``virt-manager`` 创建 VM ,按下列步骤:
要用 ``virt-manager`` 创建 VM ,按下列步骤:
#. 点击 **Create New Virtual Machine** 按钮。
#. 为新虚拟机域命名,本例中我们用 ``libvirt-virtual-machine`` ,你可以任意命名,在\
后续命令行和配置实例中替换掉 ``libvirt-virtual-machine`` 即可。
::
#. 命名新虚拟机的域,本例中我们用 ``libvirt-virtual-machine`` 。你可以任意命名,但请在\
后续命令行和配置实例中替换 ``libvirt-virtual-machine`` 为你自己选择的名字。 ::
libvirt-virtual-machine
#. 导入映像。
::
#. 导入映像。 ::
/path/to/image/recent-linux.img
**注:**\ 导入一个近期映像一些较老的映像未必能正确地重扫虚拟设备。
**注:**\ 导入一个较新的映像一些较老的映像未必能正确地重扫虚拟设备。
#. 配置并启动 VM 。
#. 用 ``virsh list`` 验证 VM 域存在。
::
#. 可以用 ``virsh list`` 验证 VM 域是否存在。 ::
sudo virsh list
#. 登入 VM ( root/root )
#. 改配置让它使用 Ceph 前停止 VM 。
#. 在修改配置让它使用 Ceph 前,请先停止 VM 。
配置 VM
=======
配置 VM 使用 Ceph 时,切记尽量用 ``virsh`` 。另外, ``virsh`` 命令通常需要 root \
权限(如 ``sudo`` ),否则不会返回正确结果或提示你需要 root 权限 ``virsh`` 命令\
权限(如 ``sudo`` ),否则不会返回正确结果或提示你需要 root 权限 ``virsh`` 命令\
参考见 `Virsh 命令参考`_\ 。
#. 用 ``virsh edit`` 打开配置文件。
::
#. 用 ``virsh edit`` 打开配置文件。 ::
sudo virsh edit {vm-domain-name}
``<devices>`` 下应该有 ``<disk>`` 条目。
::
``<devices>`` 下应该有 ``<disk>`` 条目。 ::
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/path/to/image/recent-linux.img'/>
<target dev='vda' bus='virtio'/>
<address type='drive' controller='0' bus='0' unit='0'/>
<driver name='qemu' type='raw'/>
<source file='/path/to/image/recent-linux.img'/>
<target dev='vda' bus='virtio'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
用你的 OS 映像路径取代 ``/path/to/image/recent-linux.img`` ,可利用较快的 \
用你的 OS 映像路径替换 ``/path/to/image/recent-linux.img`` 。使用较快的 \
``virtio`` 总线的最低内核版本是 2.6.25 ,参见 `Virtio`_ 。
**重要:**\ 要用 ``sudo virsh edit`` 而非文本编辑器,如果你用文本编辑器编辑了 \
``/etc/libvirt/qemu`` 下的配置文件, ``libvirt`` 未必能感知你做的更改。如果 \
``/etc/libvirt/qemu`` 下的配置文件, ``libvirt`` 未必能识别出这些更改。如果 \
``/etc/libvirt/qemu`` 下的 XML 文件和 ``sudo virsh dumpxml {vm-domain-name}`` \
输出结果内容不同, VM 可能会运行异常。
#. 把你创建的 Ceph RBD 映像创建为 ``<disk>`` 条目。
::
#. 把你创建的 Ceph RBD 映像创建为 ``<disk>`` 条目。 ::
<disk type='network' device='disk'>
<source protocol='rbd' name='libvirt-pool/new-libvirt-image'>
<host name='{monitor-host}' port='6789'/>
<host name='{monitor-host}' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
用你的主机名替换 ``{monitor-host}`` 可能还有存储池、映像名。你可以为 Ceph 监\
视器添加多条 ``<host>`` , ``dev`` 属性是将出现在 VM ``/dev`` 目录下的逻辑\
设备名可选的 ``bus`` 属性是要模拟的磁盘类型。可用和驱动相关,如 ide 、 \
用你的主机名替换 ``{monitor-host}`` 可能还要替换存储池和/或映像名。你可以为 \
Ceph monitor 添加多条 ``<host>`` , ``dev`` 属性是将出现在 VM ``/dev`` 目录下的逻辑\
设备名可选的 ``bus`` 属性是要模拟的磁盘类型,有效的设定值是驱动类型,如 ide 、 \
scsi 、 virtio 、 xen 、 usb 或 sata 。
关于 ``<disk>`` 标签及其子标签和属性,详见\ `硬盘`_\ 。
#. 保存文件。
#. 如果你的 Ceph 存储集群启用了 `Ceph 认证`_\ (默认已启用),那么必须生成一个密钥。
::
#. 如果你的 Ceph 存储集群启用了 `Ceph 认证`_\ (默认已启用),那么必须生成一个 secret。 ::
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
......@@ -205,30 +191,25 @@ Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行
</secret>
EOF
#. 定义密钥。
::
#. 定义 secret。 ::
sudo virsh secret-define --file secret.xml
<uuid of secret is output here>
#. 获取 ``client.libvirt`` 密钥并把字符串保存于文件。
::
#. 获取 ``client.libvirt`` 密钥并把字符串保存于文件。 ::
ceph auth get-key client.libvirt | sudo tee client.libvirt.key
#. 设置密钥的 UUID 。
::
#. 设置 secret 的 UUID 。 ::
sudo virsh secret-set-value --secret {uuid of secret} --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml
还必须手动设置密钥,把下面的 ``<auth>`` 条目添加到前面的 ``<disk>`` 标签内(用\
上一命令的输出结果替换掉 ``uuid`` 值)。
::
还必须手动设置 secret,把下面的 ``<auth>`` 条目添加到前面的 ``<disk>`` 标签内(用\
上一命令的输出结果替换掉 ``uuid`` 值)。 ::
sudo virsh edit {vm-domain-name}
然后,把 ``<auth></auth>`` 标签加进域配置文件:
::
然后,把 ``<auth></auth>`` 标签加进域配置文件: ::
...
</source>
......@@ -237,35 +218,31 @@ Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行
</auth>
<target ...
**注:**\ 示例 ID 是 ``libvirt`` ,不是\ `配置 Ceph`_ 生成的 Ceph 名 \
``client.libvirt`` 确保你用的是 Ceph 名的 ID 部分。如果出于某些原因你需要更\
密钥,必须先执行 ``sudo virsh secret-undefine {uuid}`` 然后再执行 \
**注:**\ 示例 ID 是 ``libvirt`` ,不是第 2 步\ `配置 Ceph`_ 生成的 Ceph 名 \
``client.libvirt`` 确保你用的是 Ceph 名的 ID 部分。如果出于某些原因你需要更\
换 secret,必须先执行 ``sudo virsh secret-undefine {uuid}`` 然后再执行 \
``sudo virsh secret-set-value`` 。
总结
====
完成上面的配置你就可以启动 VM 了为确认 VM 和 Ceph 在通,你可以执行如下过程。
一旦完成上面的配置你就可以启动 VM 了为确认 VM 和 Ceph 在通,你可以执行如下过程。
#. 检查 Ceph 是否在运行:
::
#. 检查 Ceph 是否在运行: ::
ceph health
#. 检查 VM 是否在运行。
::
#. 检查 VM 是否在运行。 ::
sudo virsh list
#. 检查 VM 是否在和 Ceph 通讯,用你的 VM 域名字替换 ``{vm-domain-name}`` :
::
#. 检查 VM 是否在和 Ceph 通信,用你的 VM 域名字替换 ``{vm-domain-name}`` : ::
sudo virsh qemu-monitor-command --hmp {vm-domain-name} 'info block'
#. 检查一下 ``<target dev='hdb' bus='ide'/>`` 定义的设备是否出现在 ``/dev`` 或 \
``/proc/partitions`` 里。
::
``/proc/partitions`` 里。 ::
ls dev
cat proc/partitions
......@@ -277,9 +254,9 @@ Ceph 块设备支持 QEMU/KVM ,所以你可以在 Ceph 块设备之上运行
.. _libvirt 虚拟化 API: http://www.libvirt.org
.. _块设备与 OpenStack: ../rbd-openstack
.. _块设备与 CloudStack: ../rbd-cloudstack
.. _创建存储池: ../../rados/operations/pools#create-a-pool
.. _创建 Ceph 用户: ../../rados/operations/user-management#add-a-user
.. _创建映像: ../qemu-rbd#creating-images-with-qemu
.. _创建——存储池: ../../rados/operations/pools#create-a-pool
.. _创建—— Ceph 用户: ../../rados/operations/user-management#add-a-user
.. _创建映像: ../qemu-rbd#用-qemu-创建映像
.. _Virsh 命令参考: http://www.libvirt.org/virshcmdref.html
.. _KVM/VirtManager: https://help.ubuntu.com/community/KVM/VirtManager
.. _Ceph 认证: ../../rados/configuration/auth-config-ref
......
================
QEMU 与块设备
================
.. index:: Ceph Block Device; QEMU KVM
Ceph 块设备最常见的用法之一是作为虚拟机的块设备映像。例如,用户可创建名为 golden \
的映像,并安装、配置好了操作系统和相关软件,然后此映像拍下快照,最后再克隆此快照\
(通常很多次)。详情参见\ `快照`_\ 能制作快照的写时复制克隆意味着 Ceph 可以快速\
Ceph 块设备最常见的用法之一是作为虚拟机的块设备映像。例如,用户可创建一个安装、配置\
好了操作系统和相关软件的“黄金标准”映像,然后此映像快照,最后再克隆此快照\
(通常很多次)。详情参见\ `快照`_\ 能制作快照的写时复制克隆意味着 Ceph 可以快速\
地为虚拟机提供块设备映像,因为客户端每次启动一个新虚拟机时不必下载整个映像。
......@@ -21,8 +22,8 @@ Ceph 块设备最常见的用法之一是作为虚拟机的块设备映像。例
+------------------------+ +------------------------+
Ceph 块设备可以和 QEMU 虚拟机集成到一起,关于 QEMU `QEMU 开源处理器仿真器`_\ ,\
其文档 `QEMU 手册`_\ 。关于如何安装见\ `安装`_\ 。
Ceph 块设备可以和 QEMU 虚拟机集成到一起,关于 QEMU 可参考 `QEMU 开源处理器仿真器`_\ ,\
其文档可参考 `QEMU 手册`_\ 。关于如何安装见\ `安装`_\ 。
.. important:: 要让 QEMU 使用 Ceph 块设备,你必须有个运行着的 Ceph 集群。
......@@ -30,15 +31,15 @@ Ceph 块设备可以和 QEMU 虚拟机集成到一起,关于 QEMU 见 `QEMU
用法
====
QEMU 命令行要求你指定 pool 名字和映像名,还可以指定快照名。
QEMU 命令行要求你指定 存储池名和映像名,还可以指定快照名。
QEMU 会假设 Ceph 配置文件位于默认位置(如 ``/etc/ceph/$cluster.conf`` )\
并且你以默认的 ``client.admin`` 用户执行命令,除非你另外指定了其它 Ceph \
配置文件路径或者其他用户。指定用户时, QEMU 只需要 ``ID`` 部分,无需完整地\
指定 ``TYPE:ID`` ,详情见\ `用户管理——用户`_\ 。在用户 ``ID`` 前面加客户\
端类型(即 ``client.`` ),否则认证失败。还应该把 ``admin`` 用户、或者你\
用 ``:id={user}`` 选项所指定用户的密钥保存到默认路径(即 ``/etc/ceph`` )\
或本地目录内的密钥环,并修正密钥环文件的所有权和权限。命令格式如下: ::
QEMU 会假设 Ceph 配置文件位于默认位置(如 ``/etc/ceph/$cluster.conf`` )\
并且你以默认的 ``client.admin`` 用户执行命令,除非你另外指定了其它 Ceph \
配置文件路径或用户。指定用户时, QEMU 只需要 ``ID`` 部分,无需完整地\
指定 ``TYPE:ID`` ,详情见\ `用户管理——用户`_\ 。不要在用户 ``ID`` 前面加客户\
端类型(即 ``client.`` ),否则认证失败。还应该把 ``admin`` 用户、或者你\
用 ``:id={user}`` 选项所指定用户的密钥文件保存到默认路径(即 ``/etc/ceph`` )\
或本地目录内,并修正密钥环文件的所有权和权限。命令格式如下: ::
qemu-img {command} [options] rbd:{pool-name}/{image-name}[@snapshot-name][:option1=value1][:option2=value2...]
......@@ -62,18 +63,16 @@ QEMU 会假设 Ceph 配置文件位于默认位置(如 ``/etc/ceph/$cluster.co
qemu-img create -f raw rbd:data/foo 10G
.. important:: The ``raw`` data format is really the only sensible
``format`` option to use with RBD. Technically, you could use other
QEMU-supported formats (such as ``qcow2`` or ``vmdk``), but doing
so would add additional overhead, and would also render the volume
unsafe for virtual machine live migration when caching (see below)
is enabled.
.. important:: ``raw`` 数据格式是使用 RBD 时的唯一可用 ``format`` 选项。\
从技术上讲,你可以使用 QEMU 支持的其他格式(例如 ``qcow2`` 或 ``vmdk``),\
但是这样做可能会带来额外开销,而且在开启缓存(见下)模式下进行虚拟机的\
热迁移时会导致卷的不安全性。
用 QEMU 更改映像尺寸
====================
你可以通过 QEMU 调整块设备尺寸。必须指定 ``rbd`` 、存储池名、要调整的映像名,还有映\
你可以通过 QEMU 调整块设备大小。必须指定 ``rbd`` 、存储池名、要调整的映像名,还有映\
像尺寸。 ::
qemu-img resize rbd:{pool-name}/{image-name} {size}
......@@ -86,7 +85,7 @@ QEMU 会假设 Ceph 配置文件位于默认位置(如 ``/etc/ceph/$cluster.co
用 QEMU 检索映像信息
====================
你可以用 QEMU 检索块设备映像信息。必须指定 ``rbd`` 、存储池名和映像名。 ::
你可以用 QEMU 检索块设备映像信息。必须指定 ``rbd`` 、存储池名和映像名。 ::
qemu-img info rbd:{pool-name}/{image-name}
......@@ -98,31 +97,31 @@ QEMU 会假设 Ceph 配置文件位于默认位置(如 ``/etc/ceph/$cluster.co
通过 RBD 运行 QEMU
==================
QEMU 能把一主机上的块设备传递给访客,但从 QEMU 0.15 起,不需要在主机上把映像映射为\
块设备了。 QEMU 现在能直接用 ``librbd`` 把映像虚拟块设备访问了,这样性能更好,因\
为它避免了额外的上下文切换,而且能利用\ `启用 RBD 缓存`_\ 带来的好处。
QEMU 能把一主机上的块设备传递给客户机,但从 QEMU 0.15 起,不需要在主机上把映像映射为\
块设备了。 QEMU 现在能通过 ``librbd`` 直接把映像作为虚拟块设备访问这样性能更好,因\
为它避免了额外的上下文切换,而且能利用开启 `RBD 缓存`_\ 带来的好处。
你可以用 ``qemu-img`` 把已有的虚拟机映像转换为 Ceph 块设备映像比如你有一个 \
qcow2 映像,可以这样转: ::
你可以用 ``qemu-img`` 把已有的虚拟机映像转换为 Ceph 块设备映像比如你有一个 \
qcow2 映像,可以这样转: ::
qemu-img convert -f qcow2 -O raw debian_squeeze.qcow2 rbd:data/squeeze
要从那个映像引导虚拟机,执行: ::
要从那个映像启动虚拟机,执行: ::
qemu -m 1024 -drive format=raw,file=rbd:data/squeeze
`启用 RBD 缓存`_\ 可显著提升性能。从 QEMU 1.2 起,缓存选项可控制 ``librbd`` 缓存: ::
启用 `RBD 缓存`_\ 可显著提升性能。从 QEMU 1.2 起, QEMU 的缓存选项可控制 ``librbd`` 缓存: ::
qemu -m 1024 -drive format=rbd,file=rbd:data/squeeze,cache=writeback
如果你的 QEMU 版本较老,你可以用 file 参数更改 librbd 缓存配置(就像其它 Ceph 配置\
如果你的 QEMU 版本较老,你可以用 file 参数更改 ``librbd`` 缓存配置(就像其它 Ceph 配置\
选项一样): ::
qemu -m 1024 -drive format=raw,file=rbd:data/squeeze:rbd_cache=true,cache=writeback
.. important:: 如果你设置了 rbd_cache=true ,那就必须设置 cache=writeback 否则有\
可能丢数据。没有 cache=writeback , QEMU 就不会向 librbd 发送回写请求如果 \
QEMU 退出时未清理干净, rbd 之上的文件系统就有可能被篡改
.. important:: 如果你设置了 rbd_cache=true ,那就必须设置 cache=writeback 否则有\
可能丢数据。不设置 cache=writeback , QEMU 就不会向 librbd 发送回写请求如果 \
QEMU 退出时未清理干净, rbd 之上的文件系统就有可能崩溃
.. _启用 RBD 缓存: ../rbd-config-ref/#rbd-cache-config-settings
......@@ -132,19 +131,19 @@ qcow2 映像,可以这样转: ::
启用 Discard/TRIM 功能
======================
从 Ceph 0.46 和 QEMU 1.1 起, Ceph 块设备设备支持 discard 操作这意味着访客可以\
发送 TRIM 请求来让 Ceph 块设备回收未使用的空间。此功能可在访客上挂载 ``ext4`` 或 \
XFS 时用 ``discard`` 选项启用
从 Ceph 0.46 和 QEMU 1.1 起, Ceph 块设备支持 discard 操作这意味着客户机可以\
发送 TRIM 请求来让 Ceph 块设备回收未使用的空间。此功能可在客户机上挂载 ``ext4`` 或 \
``XFS`` 时加上 ``discard`` 选项。
要使此功能对访客可用,必须对块设备显式启用。为此,你必须指定在驱动器上指定 \
客户机要想使用此功能,必须对块设备显式启用。为此,你必须在相关驱动器上指定 \
``discard_granularity`` : ::
qemu -m 1024 -drive format=raw,file=rbd:data/squeeze,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
注意这个使用 IDE 驱动器, virtio 驱动不支持 discard 。
注意此处使用 IDE 驱动器, virtio 驱动不支持 discard 。
如果用的是 libvirt ,用 ``virsh edit`` 编辑配置文件,加上 ``xmlns:qemu`` 值。然\
如果用的是 libvirt ,需要用 ``virsh edit`` 编辑配置文件,加上 ``xmlns:qemu`` 值。然\
后加一个 ``qemu:commandline`` 块作为那个域的子域。下例展示了如何用 ``qemu id=`` \
为两个设备设置不同的 ``discard_granularity`` 值。
......@@ -171,7 +170,7 @@ QEMU 的缓存选项对应下列的 Ceph `RBD 缓存`_\ 选项。
rbd_cache = true
透: ::
: ::
rbd_cache = true
rbd_cache_max_dirty = 0
......@@ -180,9 +179,9 @@ QEMU 的缓存选项对应下列的 Ceph `RBD 缓存`_\ 选项。
rbd_cache = false
QEMU 的缓存选项会覆盖 Ceph 的默认选项(就是那些 Ceph 配置文件里没有的选项)如果\
QEMU 的缓存选项会覆盖 Ceph 的默认选项(就是那些 Ceph 配置文件里没有的选项)如果\
你在 Ceph 配置文件内设置了 `RBD 缓存`_\ 选项,那么它们会覆盖 QEMU 缓存选项。如果你\
在 QEMU 命令行设置缓存选项,它们会覆盖 Ceph 配置文件里的选项。
在 QEMU 命令行设置缓存选项,它们会覆盖 Ceph 配置文件里的选项。
.. _QEMU 开源处理器仿真器: http://wiki.qemu.org/Main_Page
......@@ -190,4 +189,4 @@ QEMU 的缓存选项会覆盖 Ceph 的默认选项(就是那些 Ceph 配置文
.. _RBD 缓存: ../rbd-config-ref/
.. _快照: ../rbd-snapshot/
.. _安装: ../../install
.. _用户管理——用户: ../../rados/operations/user-management#user
.. _用户管理用户: ../../rados/operations/user-management#user
......@@ -15,12 +15,12 @@
==============
要想把块设备加入某节点,你得先在 :term:`Ceph 存储集群`\ 中创建一个\
映像,用下列命令: ::
映像,使用下列命令: ::
rbd create --size {megabytes} {pool-name}/{image-name}
例如,要在 ``swimmingpool`` 这个存储池中创建一个名为 ``bar`` 、大小\
为 1GB 的映像,执行下列命令: ::
为 1GB 的映像,执行: ::
rbd create --size 1024 swimmingpool/bar
......@@ -36,12 +36,12 @@
罗列块设备映像
==============
列 ``rbd`` 存储池中的块设备,用下列命令(即 ``rbd`` 是默认存储\
要列 ``rbd`` 存储池中的块设备,可以用下列命令(即 ``rbd`` 是默认存储\
池名字): ::
rbd ls
用下列命令罗列某个特定存储池中的块设备,用存储池名字替换 \
用下列命令罗列某个特定存储池中的块设备,用存储池名字替换 \
``{poolname}`` : ::
rbd ls {poolname}
......@@ -54,7 +54,7 @@
检索映像信息
============
用下列命令检索某特定映像的信息,用 ``{image-name}`` 替换映像名字: ::
用下列命令检索某特定映像的信息,用映像名字替换 ``{image-name}`` : ::
rbd info {image-name}
......@@ -62,8 +62,8 @@
rbd info foo
用下列命令检索某存储池内映像的信息,用 ``{image-name}`` 替换掉映\
像名字、用 ``{pool-name}`` 替换掉存储池名字: ::
用下列命令检索某存储池内映像的信息,用映像名字替换 \
``{image-name}`` 、用存储池名字替换 ``{pool-name}`` : ::
rbd info {pool-name}/{image-name}
......@@ -72,20 +72,21 @@
rbd info swimmingpool/bar
调整块设备映像尺寸
调整块设备映像大小
==================
:term:`Ceph 块设备`\ 映像是瘦接口设备,只有在你开始写入数据时它们才\
:term:`Ceph 块设备`\ 映像是精简配置,只有在你开始写入数据时它们才\
会占用物理空间。然而,它们都有最大容量,就是你设置的 ``--size`` 选\
项。如果你想增加(或减小) Ceph 块设备映像的最大尺寸,下列命令: ::
项。如果你想增加(或减小) Ceph 块设备映像的最大尺寸,执行下列命令: ::
rbd resize --size 2048 foo
rbd resize --size 2048 foo (to increase)
rbd resize --size 2048 foo --allow-shrink (to decrease)
删除块设备映像
==============
用下列命令删除块设备,用 ``{image-name}`` 替换映像名字: ::
用下列命令删除块设备,用映像名字替换 ``{image-name}`` : ::
rbd rm {image-name}
......@@ -93,8 +94,8 @@
rbd rm foo
用下列命令从某存储池中删除一个块设备,用 ``{image-name}`` 替换要删\
除的映像名、用 ``{pool-name}`` 替换存储池名字: ::
用下列命令从某存储池中删除一个块设备,用要删除的映像名字替换 \
``{image-name}`` 、用存储池名字替换 ``{pool-name}`` : ::
rbd rm {pool-name}/{image-name}
......
......@@ -4,9 +4,9 @@
CloudStack 4.0 及以上版本可以通过 ``libvirt`` 使用 Ceph 块设备, ``libvirt`` 会配\
置 QEMU 与 ``librbd`` 交互。 Ceph 会把块设备映像条带化为对象并分布到整个集群,这意\
味着大个的 Ceph 块设备性能会优于单体服务器
味着大个的 Ceph 块设备性能会优于单体服务器
要让 CloudStack 4.0 及更高版使用 Ceph 块设备,你得先安装 QEMU 、 ``libvirt`` \
要让 CloudStack 4.0 及更高版使用 Ceph 块设备,你得先安装 QEMU 、 ``libvirt`` \
和 CloudStack 。我们建议在另外一台物理服务器上安装 CloudStack ,此软件最低需要 \
4GB 内存和一个双核 CPU ,但是资源越多越好。下图描述了 CloudStack/Ceph 技术栈。
......@@ -31,26 +31,16 @@ CloudStack 4.0 及以上版本可以通过 ``libvirt`` 使用 Ceph 块设备,
.. important:: 要让 CloudStack 使用 Ceph 块设备,你必须有 Ceph 存储集群的访问权限。
CloudStack 集成了 Ceph 的块设备作为它的主要存储( Primary Storage ),下列指令详述\
了 CloudStack 的安装。
CloudStack 集成了 Ceph 的块设备作为它的后端主要存储( Primary Storage ),下列指令\
详述了 CloudStack 主存储的安装。
.. note:: 我们建议您安装 Ubuntu 14.04 或更高版本,这样就不用手动编译 libvirt 了。
.. note:: Make sure the /tmp partition on your hypervisors is at least 25GB.
When deploying from a template from the first time /tmp will be used for
converting the template from QCOW2 to RAW for storage on RBD. This is no
longer valid starting from CloudStack version 4.4.0
安装、配置 QEMU 用于 CloudStack 时不需要任何特殊处理。确保你的 Ceph 存储集群在运行。\
安装并配置好 QEMU ;然后安装 ``libvirt`` v 0.9.13 或更高版本(也许得从源码手动编译)\
并确保它与 Ceph 结合后可正常运行。
.. note:: To use RBD with CloudStack 4.4.0 you require at least librbd version
0.67.7 (Ceph Dumpling). Otherwise template deployments and template backups
will fail. In case you use Ubuntu we recommend at least LTS version 14.04
安装、配置 QEMU 用于 CloudStack 不需要任何特殊处理。确保你的 Ceph 存储集群在运行,\
配置好 QEMU 即可;然后安装 ``libvirt`` 0.9.13 或更高版本(也许得手动编译)并确保它\
与 Ceph 磨合正常。
.. note:: Ubuntu 13.04 版搭载了 ``libvirt`` 0.9.13 或更高版本,而且默认启用了 \
RBD 存储池。
.. note:: Ubuntu 14.04 和 CentOS 7.2 上的 ``libvirt`` 默认支持 RBD 存储池。
.. index:: pools; CloudStack
......@@ -58,63 +48,60 @@ CloudStack 集成了 Ceph 的块设备作为它的主要存储( Primary Storag
创建存储池
==========
默认情况下, Ceph 块设备使用 ``rbd`` 存储池,建议为 CloudStack NFS 主存储新建一\
储池。确保 Ceph 集群在运行,创建存储池: ::
默认情况下, Ceph 块设备使用 ``rbd`` 存储池,建议为 CloudStack NFS 主存储新建一\
储池。确保 Ceph 集群在运行,然后创建存储池: ::
ceph osd pool create cloudstack
参考\ `创建存储池`_\ 为存储池指定归置组数量,参考\ `归置组`_\ 确定应该为存储池分配\
具体可参考\ `创建存储池`_\ 为存储池指定归置组数量,参考\ `归置组`_\ 确定应该为存储池分配\
多少归置组。
创建 Ceph 用户
==============
To access the Ceph cluster we require a Ceph user which has the correct
credentials to access the ``cloudstack`` pool we just created. Although we could
use ``client.admin`` for this, it's recommended to create a user with only
access to the ``cloudstack`` pool. ::
为了使用 Ceph 集群,我们需要一个有正确授权的用户,来访问刚才创建的 ``cloudstack`` 存\
储池。虽然我们可以使用 ``client.admin`` ,但还是推荐创建一个只对 ``cloudstack`` 存储池\
有访问权限的用户。 ::
ceph auth get-or-create client.cloudstack mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=cloudstack'
Use the information returned by the command in the next step when adding the
Primary Storage.
在后面添加主存储的步骤里,会使用到该条命令的返回信息。
详情见 `用户管理`_ 。
更多信息见 `用户管理`_ 。
添加主存储
==========
添加主存储方法 `添加主存储 (4.2.0)`_ ,要添加一个 Ceph 块设备,步骤包括:
添加 Ceph 块设备作为主存储方法可参考 `添加主存储 (4.2.0)`_ ,步骤包括:
#. 登录 CloudStack 界面
#. 点击左侧导航条的 **Infrastructure**
#. 选择要用于主存储的域
#. 点击 **Compute** 标签
#. 选择图表中 `Primary Storage` 节点上的 **View All**
#. 点击 **Add Primary Storage**
#. 登录 CloudStack 界面
#. 点击左侧导航条的 **Infrastructure**
#. 选择要用于主存储的域
#. 点击 **Compute** 标签
#. 选择图表中 `Primary Storage` 节点上的 **View All**
#. 点击 **Add Primary Storage**
#. 依次按提示执行:
- **Protocol** 那里选择 ``RBD`` ;
- 添加集群信息(支持 cephx )。注:不要加用户名的 ``client.`` 部分
- 添加集群信息(支持 cephx )。注:不要加用户名的 ``client.`` 部分
- 把 ``rbd`` 加为标签。
创建存储服务
创建硬盘方案
============
要新建硬盘存储服务,参考\ `创建存储服务 (4.2.0)`_ 创建一存储服务以与 ``rbd`` \
相配这样 ``StoragePoolAllocator`` 查找合适存储池时就会选择 ``rbd`` 存储池;如果\
存储服务没有与 ``rbd`` 标签相配, ``StoragePoolAllocator`` 就会选用你创建的存储池\
``clouldstack`` )。
要新建硬盘方案,参考\ `新建硬盘方案 (4.2.0)`_ 创建一个硬盘方案以与 ``rbd`` 标签\
相配这样 ``StoragePoolAllocator`` 查找合适存储池时就会选择 ``rbd`` 存储池;如果\
硬盘方案没有与 ``rbd`` 标签相配, ``StoragePoolAllocator`` 就会选用你创建的存储池\
比如 ``clouldstack`` )。
局限性
======
- ClouldStack 只能绑定一个监视器(但你可以创建一个轮询域名来滚动多个监视器)
- 在 Ubuntu 下你也许得手动编译 ``libvirt`` 0.9.13 。
- ClouldStack 只能绑定一个 monitor(但你可以在多个 monitors 上创建一个轮询域名服务)。
.. _创建存储池: ../../rados/operations/pools#createpool
......@@ -123,5 +110,5 @@ Primary Storage.
.. _安装和配置 libvirt: ../libvirt
.. _KVM Hypervisor Host Installation: http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Installation_Guide/hypervisor-kvm-install-flow.html
.. _添加主存储 (4.2.0): http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Admin_Guide/primary-storage-add.html
.. _创建存储服务 (4.2.0): http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Admin_Guide/compute-disk-service-offerings.html#creating-disk-offerings
.. _新建硬盘方案 (4.2.0): http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Admin_Guide/compute-disk-service-offerings.html#creating-disk-offerings
.. _用户管理: ../../rados/operations/user-management
......@@ -12,33 +12,34 @@
Ceph 块设备的内核驱动可利用 Linux 页缓存来提升性能。
Ceph 块设备的用户空间实现(即 ``librbd`` )不能利用 Linux 页缓存,所以它自己实现了\
内存缓存,名为“ RBD 缓存”。 RBD 缓存行为就像硬盘缓存一样端正当 OS 发送了 barrier \
或 flush 请求时,所有脏数据都会写入 OSD这意味着只要 VM 会正确地发送回写命令(即\
内存缓存,名为“ RBD 缓存”。 RBD 缓存行为就像硬盘缓存一样端正当 OS 发送了 barrier \
或 flush 请求时,所有脏数据都会写入 OSDs 。这意味着只要 VM 会正确地发送 flush 命令(即\
内核版本大于 2.6.32 ),使用回写缓存和常见物理硬盘一样安全。此缓存用最近最少使用\
( Least Recently Used, LRU )算法,而且在回写模式下它能合并相邻请求以提高吞吐量。
.. versionadded:: 0.46
Ceph 为 RBD 回写缓存要启用此功能,在 ``ceph.conf`` 配置文件的 ``[client]`` \
段下添加 ``rbd cache = true`` 。 ``librbd`` 默认不会进行任何缓存写和读都直接到\
达存储集群,而且所有数据都完成复制后写作才会返回启用缓存后,写动作会立即返回,除\
非未写的字节数大于 ``rbd cache max dirty`` 这种情况下,写动作会触发回写机制并\
一直阻塞,直到回写完了足够多的字节数。
Ceph 支持为 RBD 提供回写缓存要启用此功能,在 ``ceph.conf`` 配置文件的 ``[client]`` \
段下添加 ``rbd cache = true`` 。 ``librbd`` 默认不会进行任何缓存写和读都直接到\
达存储集群,而且只有当数据的所有副本都写入磁盘后写作才会返回启用缓存后,写操作\
会立即返回,除非未写的字节数大于 ``rbd cache max dirty`` 这种情况下,写动作会触发\
回写机制并一直阻塞,直到足够多的字节数被刷写
.. versionadded:: 0.47
Ceph 支持为 RBD 写透做缓存。你可以设置缓存尺寸、还能设置从写回缓存切换到写透缓存的\
目标和临界点。要启用写透模式,把 ``rbd cache max dirty`` 设为 ``0`` ,这意味着数据\
的所有复制都完成时写才会返回,但是读可以来自缓存。在客户端,缓存位于内存中,且个 \
RBD 映像有自己的缓存。对客户端来说正因为缓存位于本地,所以对映像的访问没有相干性。\
打开缓存时,在 RBD 之上不能运行 GFS 或 OCFS 。
Ceph 支持为 RBD 提供透写缓存。你可以设置缓存的大小,以及从回写缓存切换到透写缓存的\
目标和临界值。要启用透写模式,把 ``rbd cache max dirty`` 置为 0。这意味着只有当数据\
的所有副本都写入磁盘后写操作才会返回,但可能会直接从缓存中读取数据。缓存信息保存\
在客户端的内存中,每个 RBD 映像有其自己的缓存。对客户端来说缓存位于本地,所以如果\
有其他用户访问某个映像,不会存在缓存一致性的问题。打开缓存时,在 RBD 之上不能运行 \
GFS 或 OCFS 。
RBD 选项应该位于 ``ceph.conf`` 配置文件的 ``[client]`` 段下,可用选项有:
``rbd cache``
:描述: 允许为 RADOS 块设备提供缓存。
:描述: 允许为 RADOS 块设备( RBD )提供缓存。
:类型: Boolean
:是否必需: No
:默认值: ``true``
......@@ -46,7 +47,7 @@ RBD 选项应该位于 ``ceph.conf`` 配置文件的 ``[client]`` 段下,可
``rbd cache size``
:描述: RBD 缓存尺寸,字节。
:描述: RBD 缓存大小,单位是字节。
:类型: 64-bit Integer
:是否必需: No
:默认值: ``32 MiB``
......@@ -54,7 +55,7 @@ RBD 选项应该位于 ``ceph.conf`` 配置文件的 ``[client]`` 段下,可
``rbd cache max dirty``
:描述: 使缓存触发回的 ``dirty`` 临界点,若为 ``0`` ,直接使用透缓存。
:描述: 使缓存触发回的 ``dirty`` 临界值,单位是字节。若为 ``0`` ,直接使用透缓存。
:类型: 64-bit Integer
:是否必需: No
:约束条件: 必须小于 ``rbd cache size`` 。
......@@ -63,7 +64,7 @@ RBD 选项应该位于 ``ceph.conf`` 配置文件的 ``[client]`` 段下,可
``rbd cache target dirty``
:描述: 缓存开始写回数据的目的地 ``dirty target`` 不会阻塞到缓存的写动作。
:描述: 缓存开始向数据存储写回数据前的 ``dirty target`` 不会阻塞到缓存的写动作。
:类型: 64-bit Integer
:是否必需: No
:约束条件: 必须小于 ``rbd cache max dirty``.
......@@ -81,10 +82,10 @@ RBD 选项应该位于 ``ceph.conf`` 配置文件的 ``[client]`` 段下,可
``rbd cache writethrough until flush``
:描述: 开始进入透模式,并且在首个 flush 请求收到后切回写模式。启用保\
守但安全,以防 rbd 之上的虚拟机内核太老不能发送 flush , 2.6.32 \
:描述: 开始进入透模式,并且在收到首个 flush 请求后切换到回写模式。启用该项保\
守但安全,以防 rbd 之上的虚拟机内核太老不能发送 flush ,例如 Linux 2.6.32 \
之前的 virtio 驱动。
:类型: Boolean
:是否必需: No
:默认值: ``true``
......@@ -98,8 +99,8 @@ RBD 选项应该位于 ``ceph.conf`` 配置文件的 ``[client]`` 段下,可
.. versionadded:: 0.86
RBD 支持预读或预取功能,以此优化小块的顺序读。此功能通常应该由访客操作系统\
虚拟机)处理,但是引导加载程序还不能进行高效的读。如果缓存功能停用,预读\
也会自动被禁用。
虚拟机的情况下)处理,但是引导加载程序可能不会发出高效的读请求。\
如果停用缓存功能,预读也会自动被禁用。
``rbd readahead trigger requests``
......@@ -112,7 +113,7 @@ RBD 支持预读或预取功能,以此优化小块的顺序读。此功能通
``rbd readahead max bytes``
:描述: 预读请求最大尺寸,零为禁用预读。
:描述: 预读请求最大尺寸。如果是零,禁用预读。
:类型: 64-bit Integer
:是否必需: No
:默认值: ``512 KiB``
......@@ -121,8 +122,8 @@ RBD 支持预读或预取功能,以此优化小块的顺序读。此功能通
``rbd readahead disable after bytes``
:描述: 从 RBD 映像读取这么多字节后,预读功能将被禁用,直到关闭。这样访客操作\
系统启动后就可以接管预读了设为 0 时仍开启预读。
系统一旦启动后就可以接管预读了设为 0 时仍开启预读。
:类型: 64-bit Integer
:是否必需: No
:默认值: ``50 MiB``
......@@ -4,13 +4,13 @@
.. index:: Ceph Block Device; kernel module
.. important:: 要用内核模块操作,必须有一个运行的 Ceph 集群。
.. important:: 要用内核模块操作,必须有一个运行的 Ceph 集群。
获取映像列表
============
要挂载映像设备,先罗列映像。 ::
要挂载块设备映像,先罗列出所有的映像。 ::
rbd list
......
=========
RBD 镜像
=========
.. index:: Ceph Block Device; mirroring
可以在两个 Ceph 集群中异步备份 RBD images。该能力利用了 RBD image 的日志特性,\
以确保集群间的副本崩溃一致性。镜像功能需要在同伴集群( peer clusters )中的每一\
个对应的 pool 上进行配置,可设定自动备份某个存储池内的所有 images 或仅备份 \
images 的一个特定子集。用 ``rbd`` 命令来配置镜像功能。 ``rbd-mirror`` 守护进程\
负责从远端集群拉取 image 的更新,并写入本地集群的对应 image 中。
.. note:: RBD 镜像功能需要 Ceph Jewel 或更新的发行版本。
.. important:: 要使用 RBD 镜像功能,你必须有 2 个 Ceph 集群, 每个集群都要运行 \
``rbd-mirror`` 守护进程。
存储池配置
==========
下面的程序说明了如何执行一些基本的管理工作,来用 ``rbd`` 命令配置镜像功能。\
镜像功能是在 Ceph 集群内的存储池级别上配置的。
配置存储池的步骤需要在 2 个同伴集群内都执行一遍。为清楚起见,下面的步骤假定\
这两个集群分别叫做“本地(local)”和“远端(remote)”,而且单主机对这 2 个集群\
都拥有访问权。
如何连接不同的 Ceph 集群,详情可参考 \ `rbd`_\ 手册页。
.. note:: 在下面的例子中,集群名称和 Ceph 配置文件的名称相同(比如 /etc/ceph\
/remote.conf)。可参考 \ `ceph-conf`_\ 文档来配置多集群环境。
启用镜像功能
------------
使用 ``rbd`` 启用某个存储池的镜像功能,需要指定 ``mirror pool enable`` \
命令,存储池名和镜像模式: ::
rbd mirror pool enable {pool-name} {mode}
镜像模式可以是 ``pool`` 或 ``image``:
* **pool**:当设定为 ``pool`` 模式,存储池中所有开启了日志特性的 images 都会被备份。
* **image**:当设定为 ``image`` 模式,需要对每个 image \ `显式启用`_\ 镜像功能。
例如: ::
rbd --cluster local mirror pool enable image-pool pool
rbd --cluster remote mirror pool enable image-pool pool
禁用镜像功能
------------
使用 ``rbd`` 禁用某个存储池的镜像功能,需要指定 ``mirror pool disable`` 命令\
和存储池名: ::
rbd mirror pool disable {pool-name}
当采用这种方式禁用某个存储池的镜像功能时,存储池内的任一个 image 的镜像功能也\
会被禁用,即使曾显式启用过。
例如: ::
rbd --cluster local mirror pool disable image-pool
rbd --cluster remote mirror pool disable image-pool
添加同伴集群
------------
为了使 ``rbd-mirror`` 守护进程发现它的同伴集群,需要向存储池注册。使用 ``rbd`` \
添加同伴 Ceph 集群,需要指定 ``mirror pool peer add`` 命令、存储池名和集群说明: ::
rbd mirror pool peer add {pool-name} {client-name}@{cluster-name}
例如: ::
rbd --cluster local mirror pool peer add image-pool client.remote@remote
rbd --cluster remote mirror pool peer add image-pool client.local@local
移除同伴集群
------------
使用 ``rbd`` 移除同伴 Ceph 集群,指定 ``mirror pool peer remove`` 命令、存储池名\
和同伴的 UUID(可通过 ``rbd mirror pool info`` 命令获取): ::
rbd mirror pool peer remove {pool-name} {peer-uuid}
例如: ::
rbd --cluster local mirror pool peer remove image-pool 55672766-c02b-4729-8567-f13a66893445
rbd --cluster remote mirror pool peer remove image-pool 60c0e299-b38f-4234-91f6-eed0a367be08
Image 配置
==========
不同于存储池配置,image 配置只需针对单个 Ceph 集群操作。
镜像 RBD image 被指定为主镜像或者副镜像。这是 image 而非存储池的特性。被指定为副\
镜像的 image 不能被修改。
当一个 image 首次启用镜像功能时(存储池的镜像模式设为 **pool** 且启用了该 image \
的日志特性,或者通过 ``rbd`` 命令\ `显式启用`_\ ),它会自动晋升为主镜像。
启用 Image 的日志支持
---------------------
RBD 镜像功能使用了 RBD 日志特性,来保证 image 副本间的崩溃一致性。在备份 image 到\
另一个同伴集群前,必须启用日志特性。该特性可在使用 ``rbd`` 命令创建 image 时通过\
指定 ``--image-feature exclusive-lock,journaling`` 选项来启用。
或者,可以动态启用已有 image 的日志特性。使用 ``rbd`` 开启日志特性,需要指定 \
``feature enable`` 命令,存储池名,image 名和特性名: ::
rbd feature enable {pool-name}/{image-name} {feature-name}
例如: ::
rbd --cluster local feature enable image-pool/image-1 journaling
.. note:: 日志特性依赖于独占锁(exclusive-lock)特性。如果没有启用独占锁,则必须\
在启用日志特性之前先启用独占锁。
.. tip:: 你可以通过在 Ceph 配置文件中增加 ``rbd default features = 125`` ,使得所\
有新建 image 默认启用日志特性。
启用 Image 镜像功能
-------------------
如果把某个存储池的镜像功能配置为 ``image`` 模式,还需要对存储池中的每一个 image ,\
明确启用镜像功能。通过 ``rbd`` 启用某个特定 image 的镜像功能,要指定 \
``mirror image enable`` 命令、存储池名和 image 名: ::
rbd mirror image enable {pool-name}/{image-name}
例如: ::
rbd --cluster local mirror image enable image-pool/image-1
禁用 Image 镜像功能
-------------------
通过 ``rbd`` 禁用某个特定 image 的镜像功能,要指定 ``mirror image disable`` 命令、\
存储池名和 image 名: ::
rbd mirror image disable {pool-name}/{image-name}
例如: ::
rbd --cluster local mirror image disable image-pool/image-1
Image 的升级与降级
------------------
在需要把主名称转移到同伴 Ceph 集群这样一个故障切换场景中,应该停止所有对主 image \
的访问(比如关闭 VM 的电源或移除 VM 的相关驱动),当前的主 image 降级为副,\
原副 image 升级为主,然后在备份集群上恢复对该 image 访问。
.. note:: RBD 仅提供了一些必要的工具来帮助 image 有序的故障切换。还需要一种外部机制来\
协调整个故障切换流程(比如在降级之前关闭 image)。
通过 ``rbd`` 降级主 image,需要指定 ``mirror image demote`` 命令、存储池名和 image \
名: ::
rbd mirror image demote {pool-name}/{image-name}
例如: ::
rbd --cluster local mirror image demote image-pool/image-1
通过 ``rbd`` 升级副 image,需要指定 ``mirror image promote`` 命令、存储池名和 image \
名: ::
rbd mirror image promote {pool-name}/{image-name}
例如: ::
rbd --cluster remote mirror image promote image-pool/image-1
.. tip:: 由于主 / 副状态是对于每个 image 而言的,故可以让两个集群拆分 IO 负载来进行\
故障切换 / 故障自动恢复。
.. note:: 可以使用 ``--force`` 选项来强制升级。当降级要求不能被正确传播到同伴 Ceph \
集群的时候(比如 Ceph 集群故障,通信中断),就需要强制升级。这会导致两个集群间的\
脑裂,而且在调用\ `强制重新同步命令`_\ 之前,image 将不会自动同步。
强制 Image 重新同步
-------------------
如果 ``rbd-daemon`` 探测到了脑裂事件,它在此情况得到纠正之前,是不会尝试去备份受到影\
响的 image。为了恢复对 image 的镜像备份,首先判定\ `降级 image`_\ 已经过时,然后向主 \
image 请求重新同步。 通过 ``rbd`` 重新同步 image,需要指定 ``mirror image resync`` 命\
令、存储池名和 image 名: ::
rbd mirror image resync {pool-name}/{image-name}
例如: ::
rbd mirror image resync image-pool/image-1
.. note:: 此条 ``rbd`` 命令仅标记了某 image 需要重新同步。本地集群的 ``rbd-mirror`` \
守护进程会异步实施真正的重新同步过程。
rbd-mirror 守护进程
===================
有两个 ``rbd-mirror`` 守护进程负责监控远端同伴集群的 image 日志,并针对本地集群进行\
日志重放。RBD image 日志特性会按发生的顺序记录下对该 image 的所有修改。这保证了远端 \
image 的崩溃一致性镜像在本地是可用的。
通过安装可选发行包 ``rbd-mirror`` 来获取 ``rbd-mirror`` 守护进程。
.. important:: 每一个 ``rbd-mirror`` 守护进程需要同时连接本地和远程集群。
.. warning:: 每个 Ceph 集群只能运行一个 ``rbd-mirror`` 守护进程。将来的 Ceph 发行版\
将会支持对 ``rbd-mirror`` 守护进程进行水平扩展。
.. _rbd: ../../man/8/rbd
.. _ceph-conf: ../../rados/configuration/ceph-conf/#running-multiple-clusters
.. _显式启用: #启用-image-镜像功能
.. _强制重新同步命令: #强制-image-重新同步
.. _降级 image: #image-的升级与降级
......@@ -5,7 +5,7 @@
.. index:: Ceph Block Device; RBD Replay
RBD 重放是个用于捕捉和重放 Rados 块设备( RBD )载荷的工具集。要捕捉 RBD 载\
荷,必须在客户端安装 ``lttng-tools`` ,且客户端上的 ``librbd`` 必须在 Giant \
荷,必须在客户端安装 ``lttng-tools`` ,且客户端上的 ``librbd`` 必须在 v0.87(Giant\
版以上。
捕捉、重放需三步:
......
......@@ -4,15 +4,19 @@
.. index:: Ceph Block Device; snapshots
一份快照是映像在个特定时间点的一份只读副本。 Ceph 块设备的一个高级功能就是你可\
以为映像创建快照来保留其历史 Ceph 还支持分层快照,让你快速、容易地克隆映像(如 \
快照是映像在个特定时间点的一份只读副本。 Ceph 块设备的一个高级特性就是你可\
以为映像创建快照来保留其历史 Ceph 还支持分层快照,让你快速、简便地克隆映像(如 \
VM 映像)。 Ceph 的快照功能支持 ``rbd`` 命令和多种高级接口,包括 `QEMU`_ 、 \
`libvirt`_ 、 `OpenStack`_ 和 `CloudStack`_ 。
.. important:: 要使用 RBD 快照功能,你必须有个运行着的集群。
.. important:: 要使用 RBD 快照功能,你必须有一个在运行的 Ceph 集群。
.. note:: **先停止 I/O 操作**\ 再拍映像的快照,如果映像内包含文件系统,拍快照\ \
**前**\ 确保文件系统是一致的。
.. note:: 如果在做快照时映像仍在进行 `I/O` 操作,快照可能就获取不到该映像准确的\
或最新的数据,并且该快照可能不得不被克隆到一个新的可挂载的映像中。所以,我\
们建议在做快照前先停止 `I/O` 操作。如果映像内包含文件系统,在做快照前请确保\
文件系统处于一致的状态。要停止 `I/O` 操作可以使用 `fsfreeze` 命令。详情可参\
考 `fsfreeze(8)` 手册页。对于虚拟机,`qemu-guest-agent` 被用来在做快照时自动\
冻结文件系统。
.. ditaa:: +------------+ +-------------+
| {s} | | {s} c999 |
......@@ -25,7 +29,7 @@ VM 映像)。 Ceph 的快照功能支持 ``rbd`` 命令和多种高级接口
Cephx 注意事项
==============
启用了 `cephx`_ 时(默认的),你必须指定用户名或 ID 、及其密钥文件,详情见\ \
启用了 `cephx`_ 时(默认的),你必须指定用户名或 ID 、及其对应的密钥文件,详情见\ \
`用户管理`_\ 。你也可以用 ``CEPH_ARGS`` 环境变量来避免重复输入下列参数。 ::
rbd --id {user-ID} --keyring=/path/to/secret [commands]
......@@ -36,7 +40,7 @@ Cephx 注意事项
rbd --id admin --keyring=/etc/ceph/ceph.keyring [commands]
rbd --name client.admin --keyring=/etc/ceph/ceph.keyring [commands]
.. tip:: 把用户名和密钥写入 ``CEPH_ARGS`` 环境变量,省得每次手动输入。
.. tip:: 把用户名和密钥写入 ``CEPH_ARGS`` 环境变量,这样就无需每次手动输入。
快照基础
......@@ -48,8 +52,8 @@ Cephx 注意事项
创建快照
--------
用 ``rbd`` 命令创建快照,要指定 ``snap create`` 子命令、外加存储池\
映像名。 ::
用 ``rbd`` 命令创建快照,要指定 ``snap create`` 选项、存储池\
映像名。 ::
rbd snap create {pool-name}/{image-name}@{snap-name}
......@@ -61,7 +65,7 @@ Cephx 注意事项
罗列快照
--------
列出映像的快照,指定存储池名和映像名。 ::
列出某个映像的快照,需要指定存储池名和映像名。 ::
rbd snap ls {pool-name}/{image-name}
......@@ -73,7 +77,7 @@ Cephx 注意事项
回滚快照
--------
用 ``rbd`` 命令回滚到某一快照,指定 ``snap rollback`` 选项、存储\
用 ``rbd`` 命令回滚到某一快照,指定 ``snap rollback`` 选项、存储\
池名、映像名和快照名。 ::
rbd snap rollback {pool-name}/{image-name}@{snap-name}
......@@ -82,8 +86,8 @@ Cephx 注意事项
rbd snap rollback rbd/foo@snapname
.. note:: 把映像回滚到一快照的意思是,用快照中的数据覆盖映像的当前\
版本,此过程花费的时间随映像尺寸增长。从快照\ **克隆要快于回滚**\
.. note:: 把映像回滚到一快照的意思是,用快照中的数据覆盖映像的当前\
版本,映像越大,此过程花费的时间就越长。从快照\ **克隆要快于回滚**\
\ 到某快照,这也是回到先前状态的首选方法。
......@@ -99,15 +103,15 @@ Cephx 注意事项
rbd snap rm rbd/foo@snapname
.. note:: Ceph OSD 异步地删除数据,所以删除快照后不会立即释放\
.. note:: Ceph OSDs 异步地删除数据,所以删除快照后不会立即释放\
磁盘空间。
清除快照
--------
要用 ``rbd`` 删除映像的所有快照,指定 ``snap purge`` 选项和映像\
名。 ::
要用 ``rbd`` 删除某个映像的所有快照,指定 ``snap purge`` 选项、存储池名\
和映像名。 ::
rbd snap purge {pool-name}/{image-name}
......@@ -121,10 +125,10 @@ Cephx 注意事项
分层
====
Ceph 支持创建某一设备快照很多写时复制( COW )克隆。分层快照使得 \
Ceph 块设备客户端可以很快地创建映像。例如,你可以创建一个块设备映\
像,其中有 Linux VM ;然后快照、保护快照,再创建任意多写时复制克\
隆。快照是只读的,所以简化了克隆快照的语义——使得克隆很迅速。
Ceph 支持某一设备快照创建很多写时复制( COW )克隆。分层快照使得 \
Ceph 块设备客户端可以很快地创建映像。例如,你可以创建一个包含有 Linux \
VM 的块设备映像;然后快照、保护快照,再创建任意多写时复制克\
隆。快照是只读的,所以简化了克隆快照的语义 —— 使得克隆很迅速。
.. ditaa:: +-------------+ +-------------+
......@@ -137,17 +141,17 @@ Ceph 块设备客户端可以很快地创建映像。例如,你可以创建一
Parent Child
.. note:: 这里的术语“父”和“子”意思是一个 Ceph 块设备快照(父),和从此快照克隆出来\
.. note:: 这里的术语“父”和“子”指的是一个 Ceph 块设备快照(父),和从此快照克隆出来\
的对应映像(子)。这些术语对下列的命令行用法来说很重要。
各个克隆出来的映像(子)都存储着对父映像的引用,这使得克隆出来的映像可以打开父映像并\
读取它。
一个快照的 COW 克隆和其它任何 Ceph 块设备映像的行为完全一样。克隆出的映像没有特别的\
限制,你可以读出、写入、克隆、调整大小然而快照的写时复制克隆引用了快照,所以你克\
前\ **必须**\ 保护它。下图描述了此过程。
限制,你可以读出、写入、克隆、调整克隆映像的大小然而快照的写时复制克隆引用了快照,\
所以你克隆快照前\ **必须**\ 保护它。下图描述了此过程。
.. note:: Ceph 仅支持克隆格式为 2 的映像(即用 \
.. note:: Ceph 仅支持克隆 format 2 的映像(即用 \
``rbd create --image-format 2`` 创建的)。内核客户端从 3.10 \
版开始支持克隆的映像。
......@@ -155,10 +159,9 @@ Ceph 块设备客户端可以很快地创建映像。例如,你可以创建一
分层入门
--------
Ceph 块设备的分层是个简单的过程。你必须有个映像、必须为它创建快照、必须保护快照,执\
Ceph 块设备的分层是个简单的过程。你必须有个映像、必须为它创建快照、并且必须保护快照,执\
行过这些步骤后,你才能克隆快照。
.. ditaa:: +----------------------------+ +-----------------------------+
| | | |
| Create Block Device Image |------->| Create a Snapshot |
......@@ -175,31 +178,31 @@ Ceph 块设备的分层是个简单的过程。你必须有个映像、必须为
+----------------------------+ +-----------------------------+
克隆出的映像包含父快照的引用也包含存储池 ID 、映像 ID 和快照 ID 。包含存储池 \
ID 意味着你可以把一存储池内的快照克隆到别的存储池。
克隆出的映像包含父快照的引用也包含存储池 ID 、映像 ID 和快照 ID 。包含存储池 \
ID 意味着你可以把一存储池内的快照克隆到其他存储池。
#. **映像模板:** 块设备分层的一个常见用法是创建一个主映像及其快照,并作为模板以供\
克隆。例如,用户创建一 Linux 发行版(如 Ubuntu 12.04 )的映像、并为其拍快照\
克隆。例如,用户可以创建一 Linux 发行版(如 Ubuntu 12.04 )的映像、并对其做快照\
此用户可能会周期性地更新映像、并创建新的快照(如在 ``rbd snap create`` 之后执\
行 ``sudo apt-get update`` 、 ``sudo apt-get upgrade`` 、 \
``sudo apt-get dist-upgrade`` )当映像成熟时,用户可以克隆任意快照。
``sudo apt-get dist-upgrade`` )当映像成熟时,用户可以克隆任意快照。
#. **扩展模板:** 更高级的用法包括扩展映像模板,让它包含比基础映像更多的信息。例\
如,用户可以克隆一个映像(如 VM 模板)、然后安装其它软件(如数据库、内容管理系\
统、分析系统等等)然后为此扩展映像快照,拍下的快照可以像基础映像一样更新。
#. **扩展模板:** 更高级的用法包括扩展映像模板,来提供比基础映像更多的信息。例\
如,用户可以克隆一个映像(如 VM 模板)、安装其它软件(如数据库、内容管理系\
统、分析系统等等)然后为此扩展映像快照,做好的快照可以像基础映像一样进行更新。
#. **模板存储池:** 块设备分层的一种用法是创建一存储池,其中包含作为模板的主映像\
#. **模板存储池:** 块设备分层的一种用法是创建一存储池,存放作为模板的主映像\
和那些模板的快照。然后把只读权限分给用户,这样他们就可以克隆快照了,而无需分配此\
存储池的写和执行权限。
存储池的写和执行权限。
#. **映像迁移/恢复:** 块设备分层的一种用法是把一存储池内的数据迁移或恢复到另一存储池。
#. **映像迁移/恢复:** 块设备分层的一种用法是把一存储池内的数据迁移或恢复到另一存储池。
保护快照
--------
克隆要访问父快照。如果哪个用户不小心删除了父快照,所有克隆都会\
损坏。为防止数据丢失,\ **必须**\ 先保护、然后再克隆快照。 ::
克隆映像要访问父快照。如果用户不小心删除了父快照,所有克隆映像都会\
损坏。为防止数据丢失,在克隆前\ **必须**\ 先保护快照。 ::
rbd snap protect {pool-name}/{image-name}@{snapshot-name}
......@@ -213,8 +216,8 @@ ID 意味着你可以把一存储池内的快照克隆到别的存储池。
克隆快照
--------
要克隆快照,你得指定父存储池、映像和快照,还有子存储池和映像名。\
克隆前必须先保护。 ::
要克隆快照,你得指定父存储池、映像和快照,还有子存储池和映像名。\
克隆前必须先保护快照。 ::
rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
......@@ -222,16 +225,16 @@ ID 意味着你可以把一存储池内的快照克隆到别的存储池。
rbd clone rbd/my-image@my-snapshot rbd/new-image
.. note:: 你可以把存储池中映像的快照克隆到另一存储池。例如,你可\
以把一存储池中的只读映像及其快照模板维护、却把可写克隆置于另一\
.. note:: 你可以把某个存储池中映像的快照克隆到另一存储池。例如,你可\
以把一存储池中的只读映像及其快照作为模板维护把可写克隆置于另一\
存储池。
取消快照保护
------------
删除快照前,必须先取消保护。另外,你\ *不*\ 删除被克隆引用的快\
照,所以删除快照前必须先拍平此快照的各个克隆。 ::
删除快照前,必须先取消保护。另外,你\ *不可以*\ 删除被克隆映像引用的快\
照,所以在你删除快照前必须先拍平( flatten )此快照的各个克隆。 ::
rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
......@@ -240,10 +243,10 @@ ID 意味着你可以把一存储池内的快照克隆到别的存储池。
rbd snap unprotect rbd/my-image@my-snapshot
罗列快照的子孙
----------------
罗列快照的子孙
--------------
用下列命令罗列快照的子孙: ::
用下列命令罗列某个快照的子孙: ::
rbd children {pool-name}/{image-name}@{snapshot-name}
......@@ -252,12 +255,12 @@ ID 意味着你可以把一存储池内的快照克隆到别的存储池。
rbd children rbd/my-image@my-snapshot
拍平克隆映像
--------------
拍平克隆映像
------------
克隆来的映像仍保留了父快照的引用。要从子克隆删除这些到父快照的引用,\
你可以把快照的信息复制给子克隆,也就是“拍平”它。拍平克隆的时间\
快照尺寸而不同。要删除快照,必须先拍平子映像。 ::
克隆来的映像仍保留了父快照的引用。要从子克隆删除这些到父快照的引用,\
你可以把快照的信息复制给子克隆,也就是“拍平”它。拍平克隆映像的时间\
快照尺寸增大而增加。要删除快照,必须先拍平子映像。 ::
rbd flatten {pool-name}/{image-name}
......@@ -266,7 +269,7 @@ ID 意味着你可以把一存储池内的快照克隆到别的存储池。
rbd flatten rbd/my-image
.. note:: 因为拍平的映像包含了快照的所有信息,所以拍平的映像占用的存储空间会比分层\
克隆大。
克隆大。
.. _cephx: ../../rados/configuration/auth-config-ref/
......
......@@ -4,17 +4,17 @@
.. index:: Ceph Block Device; introduction
块是一个字节序列(例如,一个 512 字节的一块数据),基于块的存储\
接口是最常见的存储数据方法,它们基于旋转媒体,像硬盘、 CD 、软\
块是一个字节序列(例如,一个 512 字节的数据块)。基于块的存储\
接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、 CD 、软\
盘、甚至传统的 9 磁道磁带。无处不在的块设备接口使虚拟块设备成为\
与 Ceph 这样的海量存储系统交互的理想之选。
Ceph 块设备是瘦接口、大小可调且数据条带化到集群内的多个 OSD 。 \
Ceph 块设备均衡多个 \
:abbr:`RADOS (Reliable Autonomic Distributed Object Store)` \
力,如快照、复制和一致性 Ceph 的 \
Ceph 块设备是精简配置的、大小可调且数据条带化存储到集群内的多\
个 OSD 。 Ceph 块设备利用 \
:abbr:`RADOS (Reliable Autonomic Distributed Object Store)` 的多\
种能力,如快照、复制和一致性 Ceph 的 \
:abbr:`RADOS (Reliable Autonomic Distributed Object Store)` 块\
设备( RBD )用内核模块或 librbd 库与 OSD 交互。
设备( RBD )使用内核模块或 librbd 库与 OSD 交互。
.. ditaa:: +------------------------+ +------------------------+
| Kernel Module | | librbd |
......@@ -28,8 +28,8 @@ Ceph 块设备均衡多个 \
程序, Ceph 可提供 `RBD 缓存`_\ 。
Ceph 块设备靠无限伸缩性提供了高性能,如向\ `内核模块`_\ 、或向 \
abbr:`KVM (kernel virtual machines)` (如 `Qemu`_ 、依赖 libvirt \
和 Qemu 的 `OpenStack`_ 和 `CloudStack`_ 云计算系统可与 Ceph \
abbr:`KVM (kernel virtual machines)` (如 `Qemu`_ 、 `OpenStack`_ \
和 `CloudStack`_ 云计算系统通过 libvirt 和 Qemu 可与 Ceph \
块设备集成)。你可以用同一个集群同时运行 `Ceph RADOS 网关`_\ 、 \
`Ceph FS 文件系统`_\ 、和 Ceph 块设备。
......@@ -41,6 +41,7 @@ abbr:`KVM (kernel virtual machines)` (如 `Qemu`_ 、依赖 libvirt \
命令 <rados-rbd-cmds>
内核模块 <rbd-ko>
快照 <rbd-snapshot>
RBD 镜像 <rbd-mirroring>
QEMU <qemu-rbd>
libvirt <libvirt>
缓存选项 <rbd-config-ref/>
......@@ -54,7 +55,7 @@ abbr:`KVM (kernel virtual machines)` (如 `Qemu`_ 、依赖 libvirt \
rbd-replay-prep 手册页 <../../man/8/rbd-replay-prep>
rbd-replay 手册页 <../../man/8/rbd-replay>
rbd-replay-many 手册页 <../../man/8/rbd-replay-many>
librbdPython 接口 <librbdpy>
librbdPython 接口 <librbdpy>
.. _RBD 缓存: ../rbd-config-ref/
......
This diff is collapsed.
......@@ -5,38 +5,37 @@
.. raw:: html
<style type="text/css">div.body h3{margin:5px 0px 0px 0px;}</style>
<table cellpadding="10"><colgroup><col width="33%"><col width="33%"><col width="33%"></colgroup><tbody valign="top"><tr><td><h3>步骤一:飞前</h3>
<table cellpadding="10"><colgroup><col width="33%"><col width="33%"><col width="33%"></colgroup><tbody valign="top"><tr><td><h3>步骤一:预检</h3>
:term:`Ceph 客户端`\ 和 :term:`Ceph 节点`\ 需要些基本预配置才能部署 Ceph 存储集\
群,你也可以加入 Ceph 社区以寻求帮助。
在部署 Ceph 存储集群之前,需要对 :term:`Ceph 客户端`\ 和 :term:`Ceph 节点`\ 进行一些基本的配置,你也可以加入 Ceph 社区以寻求帮助。
.. toctree::
飞前 <quick-start-preflight>
预检 <quick-start-preflight>
.. raw:: html
</td><td><h3>步骤二:存储集群</h3>
完成飞前检查表之后,应该可以开始部署 Ceph 存储集群了。
完成预检之后,你就可以开始部署 Ceph 存储集群了。
.. toctree::
存储集群入门 <quick-ceph-deploy>
存储集群快速入门 <quick-ceph-deploy>
.. raw:: html
</td><td><h3>步骤三: Ceph 客户端</h3>
大多数 Ceph 用户不会直接往 Ceph 存储集群里存储对象,他们通常会用 Ceph 块设备、 \
Ceph 文件系统、或 Ceph 对象存储三个功能之一或多个。
大多数 Ceph 用户不会直接往 Ceph 存储集群里存储对象,他们通常会使用 Ceph 块设备、 \
Ceph 文件系统、或 Ceph 对象存储这三大功能中的一个或多个。
.. toctree::
块设备入门 <quick-rbd>
文件系统入门 <quick-cephfs>
对象存储入门 <quick-rgw>
块设备快速入门 <quick-rbd>
文件系统快速入门 <quick-cephfs>
对象存储快速入门 <quick-rgw>
.. raw:: html
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment