ceph-deploy – 使用最少基础设施部署 Ceph

ceph-deploy 是一种仅依赖对服务器的 SSH 访问、sudo 和一些 Python 代码来部署 Ceph 的方式。它完全在您的工作站上运行,不需要服务器、数据库或任何类似的东西。

如果您经常设置和拆除 Ceph 集群,并且希望将额外的繁琐工作降到最低,那么它适合您。

此工具不适用于什么

它不是一个通用的部署系统,它只用于 Ceph,专为希望在没有安装 Chef、Puppet 或 Juju 的开销的情况下,快速使用合理的初始设置运行 Ceph 的用户而设计。

它不处理除推送 Ceph 配置文件之外的客户端配置,需要对安全设置、分区或目录位置进行精细控制的用户应使用 Chef 或 Puppet 等工具。

安装

根据您使用 ceph-deploy 的类型,您可能需要了解不同的安装方式。对于自动化,您可能希望直接 bootstrapceph-deploy 的常规用户可能会从操作系统软件包或 Python Package Index 安装。

Python Package Index

如果您熟悉 Python 安装工具(如 pipeasy_install),您可以轻松安装 ceph-deploy,如下所示:

pip install ceph-deploy

它应该会为您获取所有依赖项并安装到当前用户的环境中。

我们强烈建议使用 virtualenv 并以受限方式安装依赖项。

DEB

ceph-deploy 的所有新版本都会被推送到所有 ceph DEB 发行版仓库中。

DEB 发行版仓库位于

http://ceph.com/debian-{release}
http://ceph.com/debian-testing

这意味着,例如,从 https://ceph.net.cn/debian-giant 安装 ceph-deploy 将安装与从 https://ceph.net.cn/debian-fireflyhttps://ceph.net.cn/debian-testing 安装相同的版本。

RPM

ceph-deploy 的所有新版本都会被推送到所有 ceph RPM 发行版仓库中。

RPM 发行版仓库位于

http://ceph.com/rpm-{release}
http://ceph.com/rpm-testing

确保您为您的发行版添加正确的仓库(即 el7 vs rhel7)。

这意味着,例如,从 https://ceph.net.cn/rpm-giant 安装 ceph-deploy 将安装与从 https://ceph.net.cn/rpm-fireflyhttps://ceph.net.cn/rpm-testing 安装相同的版本。

bootstrapping(引导)

要使源代码树准备好使用,请运行一次此命令:

./bootstrap

您可以将此处的 ceph-deploy 脚本符号链接到某个方便的位置(例如 ~/bin),或者将当前目录添加到 PATH,或者始终键入 ceph-deploy 的完整路径。

SSH 和远程连接

当主机名与当前主机的hostname不匹配时,ceph-deploy 将尝试通过 SSH 连接到主机。例如,如果您要连接到主机 node1,只要当前主机的 hostname 不是 node1,它就会尝试 SSH 连接。

ceph-deploy 最低要求是运行脚本的机器可以免密码以 root 身份 ssh 连接到每个 Ceph 节点。

要启用此功能,请为 root 用户生成一个没有密码的新 ssh 密钥对,并将公钥(id_rsa.pubid_dsa.pub)放置在

/root/.ssh/authorized_keys

并确保 sshd 配置中有以下行:

PermitRootLogin yes
PermitEmptyPasswords yes

运行 ceph-deploy 的机器不需要安装 Ceph 软件包,除非它需要使用 ceph 命令行工具直接管理集群。

用户名

未指定时,将使用执行 ceph-deploy 的用户名进行连接。如果所有节点都共享相同的用户名,这很有用,但如果不是这种情况,可能会很麻烦。

避免这种情况的一种方法是在 SSH 配置中定义正确的用户名进行连接,但您也可以使用 --username 标志:

ceph-deploy --username ceph install node1

然后 ceph-deploy 将使用 ceph@node1 连接到该主机。

对于任何需要连接到远程主机的操作,预期都是如此。

管理现有集群

您可以使用 ceph-deploy 为现有集群预配节点。要获取集群配置文件的副本(通常是 ceph.conf),请运行:

ceph-deploy config pull HOST

您通常还需要收集用于该集群的加密密钥:

ceph-deploy gatherkeys MONHOST

此时,您可以跳过下面创建新集群的步骤(您已经有一个集群),并根据您要完成的任务,选择性地跳过安装和/或监视器创建。

安装软件包

有关详细的安装说明,请参阅 install 部分。

代理或防火墙安装

如果尝试在防火墙后面或通过代理安装,您可以使用 --no-adjust-repos,它会告诉 ceph-deploy 跳过对发行版仓库的任何更改以安装软件包,并将直接进入软件包安装。

这将允许没有互联网访问的环境指向 *自己的仓库*。这意味着在尝试安装之前,需要正确设置这些仓库(并镜像所有必要的依赖项)。

另一种替代方法是设置 wget 环境变量以指向正确的主机,例如:

http_proxy=http://host:port
ftp_proxy=http://host:port
https_proxy=http://host:port

创建新配置

要创建新的配置文件和密钥,请确定哪些主机将运行 ceph-mon,然后运行

ceph-deploy new MON [MON..]

有关新说明的详细信息,请参阅 new 部分。

有关 new 子命令的详细信息,请参阅 mon 部分。

部署监视器

要实际将 ceph-mon 部署到您选择的主机,请运行:

ceph-deploy mon create HOST [HOST..]

如果没有列出明确的主机,则会部署配置文件中 mon_initial_members 中的主机。也就是说,您传递给 ceph-deploy new 的主机是此处的默认值。

有关 mon 子命令的详细信息,请参阅 mon 部分。

收集密钥

要将身份验证密钥(用于管理集群和引导新节点)收集到本地目录,请运行:

ceph-deploy gatherkeys HOST [HOST...]

其中 HOST 是其中一个监视器主机。

一旦这些密钥位于本地目录中,您就可以预配新的 OSD 等。

有关 gatherkeys 子命令的详细信息,请参阅 gatherkeys 部分。

管理员主机

要使用 ceph.confceph.client.admin.keyring 密钥环准备主机以便它可以管理集群,请运行:

ceph-deploy admin HOST [HOST ...]

旧版本的 ceph-deploy 会自动将管理员密钥环添加到所有 mon 节点,使它们成为管理员节点。有关 admin 命令的详细信息,请参阅 admin 部分。

有关 admin 子命令的详细信息,请参阅 admin 部分。

部署 OSD

要在远程节点上创建 OSD,请运行:

ceph-deploy osd create HOST --data /path/to/device

或者,--data 可以接受格式为 vg/lv 的逻辑卷:

之后,主机将为给定的数据磁盘或逻辑卷运行 OSD。对于其他 OSD 设备,例如日志(使用 --filestore 时)或 block.dbblock.wal,这些设备需要是逻辑卷或 GPT 分区。

注意

此工具不会创建分区,必须事先创建分区。

忘记密钥

newgatherkeys 会将一些 Ceph 身份验证密钥放入本地目录中的密钥环中。如果您担心它们出于安全原因而存在,请运行:

ceph-deploy forgetkeys

它们将被删除。如果您稍后需要它们来部署其他节点,只需重新运行:

ceph-deploy gatherkeys HOST [HOST...]

它们将从现有监视器节点中检索。

多个集群

所有上述命令都接受 --cluster=NAME 选项,允许您方便地从一个工作站管理多个集群。例如:

ceph-deploy --cluster=us-west new
vi us-west.conf
ceph-deploy --cluster=us-west mon

常见问题解答

在开始之前

确保您拥有最新版本的 ceph-deploy。它正在积极开发中,平均每周发布一次。最新版本的 ceph-deploy 将有一个 --version 标志可供您使用,否则请使用您的包管理器进行检查,如果有新版本,请更新。

为什么功能 X 没有实现?

通常,当某人想要开始使用 ceph 并且该功能在该上下文中合理时,才会添加功能。如果您认为情况确实如此,并且您已阅读“此工具不适用于什么”并且仍然认为功能 X 应该存在于 ceph-deploy 中,请在 ceph tracker 中提交功能请求:http://tracker.ceph.com/projects/ceph-deploy/issues

命令给我一个错误,这是怎么回事?

ceph-deploy 的大多数命令都旨在远程运行在您在创建初始配置时配置的主机上。如果某个命令未按预期工作,请尝试在远程主机上运行失败的命令并断言那里的行为。

如果远程主机上的行为相同,那么这可能不是 ceph-deploy 本身的问题。确保捕获 ceph-deploy 输出和远程主机上命令输出。

监视器问题

如果您的监视器没有启动,请确保您在运行 ceph-deploy mon create {hostname} 时使用的 {hostname} 与远程主机中的实际 hostname -s 匹配。

较新版本的 ceph-deploy 应该会警告您结果是否不同,但这可能会阻止监视器达到仲裁。