ceph-deploy – 使用最少基础设施部署 Ceph¶
ceph-deploy 是一种仅依赖对服务器的 SSH 访问、sudo 和一些 Python 代码来部署 Ceph 的方式。它完全在您的工作站上运行,不需要服务器、数据库或任何类似的东西。
如果您经常设置和拆除 Ceph 集群,并且希望将额外的繁琐工作降到最低,那么它适合您。
此工具不适用于什么¶
它不是一个通用的部署系统,它只用于 Ceph,专为希望在没有安装 Chef、Puppet 或 Juju 的开销的情况下,快速使用合理的初始设置运行 Ceph 的用户而设计。
它不处理除推送 Ceph 配置文件之外的客户端配置,需要对安全设置、分区或目录位置进行精细控制的用户应使用 Chef 或 Puppet 等工具。
安装¶
根据您使用 ceph-deploy 的类型,您可能需要了解不同的安装方式。对于自动化,您可能希望直接 bootstrap。 ceph-deploy 的常规用户可能会从操作系统软件包或 Python Package Index 安装。
Python Package Index¶
如果您熟悉 Python 安装工具(如 pip 和 easy_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-firefly 或 https://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-firefly 或 https://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.pub 或 id_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
此时,您可以跳过下面创建新集群的步骤(您已经有一个集群),并根据您要完成的任务,选择性地跳过安装和/或监视器创建。
代理或防火墙安装¶
如果尝试在防火墙后面或通过代理安装,您可以使用 --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.conf 和 ceph.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.db 和 block.wal,这些设备需要是逻辑卷或 GPT 分区。
注意
此工具不会创建分区,必须事先创建分区。
忘记密钥¶
new 和 gatherkeys 会将一些 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 应该会警告您结果是否不同,但这可能会阻止监视器达到仲裁。