ceph-deploy – 以最少的基础设施部署 Ceph

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

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

这不是什么工具

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

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

安装

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

Python 包索引

如果您熟悉 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 安装相同的版本。

引导

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

./bootstrap

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

SSH 和远程连接

当主机名与当前主机的主机名不匹配时,ceph-deploy 将尝试通过 SSH 连接到主机。例如,如果您要连接到主机 node1,只要当前主机的主机名*不是* 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 自动将 admin 密钥环添加到所有 mon 节点,使它们成为 admin 节点。有关 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 跟踪器中打开功能请求:http://tracker.ceph.com/projects/ceph-deploy/issues

命令给了我一个错误,发生了什么?

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

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

监视器问题

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

较新版本的 ceph-deploy 应该在结果不同时警告您,但这可能会阻止监视器达到法定人数。