第 1 章 在容器中部署 Red Hat Ceph Storage
本章论述了如何将 Ansible 应用与 ceph-ansible
playbook 搭配使用,以在容器中部署 Red Hat Ceph Storage 3。
- 要安装 Red Hat Ceph Storage,请参阅 第 1.2 节 “在容器中安装 Red Hat Ceph Storage 集群”。
- 要安装 Ceph 对象网关,请参阅 第 1.4 节 “在容器中安装 Ceph 对象网关”。
- 要安装元数据服务器,请参阅 第 1.5 节 “安装元数据服务器”。
-
要了解 Ansible 的
--limit
选项,请参阅 第 1.8 节 “了解limit
选项”。
1.1. 先决条件
- 获取有效的客户订阅.
准备集群节点。在每个节点上:
1.1.1. 将 Red Hat Ceph Storage 节点注册到 CDN 和附加订阅
将每个 Red Hat Ceph Storage(RHCS)节点注册到 Content Delivery Network(CDN),并附加适当的订阅,以便节点可以访问软件存储库。每个 RHCS 节点都必须能访问完整的 Red Hat Enterprise Linux 7 基本内容和额外存储库内容。
先决条件
- 有效的红帽订阅
- RHCS 节点必须能够连接到互联网。
对于在安装过程中无法访问互联网的 RHCS 节点,您必须首先在有互联网访问的系统中按照以下步骤操作:
启动本地 Docker registry:
# docker run -d -p 5000:5000 --restart=always --name registry registry:2
从红帽客户门户网站拉取 Red Hat Ceph Storage 3.x 镜像:
# docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
标记镜像:
# docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg
将
<local-host-fqdn>
替换为本地主机 FQDN。将镜像推送到您启动的本地 Docker registry:
# docker push <local-host-fqdn>:5000/cephimageinlocalreg
将
<local-host-fqdn>
替换为本地主机 FQDN。
步骤
以 root
用户身份在存储集群中的所有节点上执行以下步骤。
注册该节点。在提示时,输入您的红帽客户门户网站凭证:
# subscription-manager register
从 CDN 拉取最新的订阅数据:
# subscription-manager refresh
列出 Red Hat Ceph Storage 的所有可用订阅:
# subscription-manager list --available --all --matches="*Ceph*"
确定适当的订阅并检索其池 ID。
附加订阅:
# subscription-manager attach --pool=$POOL_ID
- 替换
-
$POOL_ID
,其池 ID 在上一步中标识。
-
禁用默认软件存储库。然后,启用 Red Hat Enterprise Linux 7 Server、Red Hat Enterprise Linux 7 Server Extras 和 RHCS 软件仓库:
# subscription-manager repos --disable=* # subscription-manager repos --enable=rhel-7-server-rpms # subscription-manager repos --enable=rhel-7-server-extras-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-els-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
更新系统以接收最新的软件包:
# yum update
其它资源
- 请参阅《Red Hat Enterprise Linux 7 系统管理员指南》中的 注册系统和管理订阅章节。
1.1.2. 创建具有 sudo
访问权限的 Ansible 用户
Ansible 必须能够以具有 root
权限的用户身份登录所有 Red Hat Ceph Storage 节点,以便在不提示输入密码的情况下安装软件和创建配置文件。在使用 Ansible 部署和配置 Red Hat Ceph Storage 集群时,您必须在存储集群的所有节点上创建一个没有密码的 root
用户。
前提条件
-
对存储集群中的所有节点具有
root
或sudo
访问权限。
步骤
以
root
用户身份登录 Ceph 节点:ssh root@$HOST_NAME
- 替换
-
$HOST_NAME
,主机名为 Ceph 节点。
-
示例
# ssh root@mon01
出现提示时,输入
root
密码。创建一个新的 Ansible 用户:
adduser $USER_NAME
- 替换
-
$USER_NAME
,以及 Ansible 用户的新用户名。
-
示例
# adduser admin
重要不要使用
ceph
作为用户名。ceph
用户名保留用于 Ceph 守护进程。整个集群中的统一用户名可以提高易用性,但避免使用明显的用户名,因为入侵者通常使用它们进行暴力攻击。为这个用户设置一个新密码:
# passwd $USER_NAME
- 替换
-
$USER_NAME
,以及 Ansible 用户的新用户名。
-
示例
# passwd admin
出现提示时,输入新密码两次。
为新创建的用户配置
sudo
访问权限:cat << EOF >/etc/sudoers.d/$USER_NAME $USER_NAME ALL = (root) NOPASSWD:ALL EOF
- 替换
-
$USER_NAME
,以及 Ansible 用户的新用户名。
-
示例
# cat << EOF >/etc/sudoers.d/admin admin ALL = (root) NOPASSWD:ALL EOF
为新文件分配正确的文件权限:
chmod 0440 /etc/sudoers.d/$USER_NAME
- 替换
-
$USER_NAME
,以及 Ansible 用户的新用户名。
-
示例
# chmod 0440 /etc/sudoers.d/admin
其它资源
- Red Hat Enterprise Linux 7 系统管理员指南 中的 Adding a New User 部分。
1.1.3. 为 Ansible 启用无密码 SSH
在 Ansible 管理节点上生成 SSH 密钥对,并将公钥分发到存储集群中的每个节点,以便 Ansible 可以在不提示输入密码的情况下访问节点。
先决条件
步骤
从 Ansible 管理节点以及 Ansible 用户执行以下步骤。
生成 SSH 密钥对,接受默认文件名并将密语留空:
[user@admin ~]$ ssh-keygen
将公钥复制到存储集群中的所有节点:
ssh-copy-id $USER_NAME@$HOST_NAME
- 替换
-
$USER_NAME
,以及 Ansible 用户的新用户名。 -
$HOST_NAME
,主机名为 Ceph 节点。
-
示例
[user@admin ~]$ ssh-copy-id admin@ceph-mon01
创建并编辑
~/.ssh/config
文件。重要通过创建和编辑
~/.ssh/config
文件,您不必在每次执行ansible-playbook
命令时指定-u $USER_NAME
选项。创建 SSH
配置文件
:[user@admin ~]$ touch ~/.ssh/config
打开
配置文件
进行编辑。为存储集群中的每个节点设置Hostname
和User
选项:Host node1 Hostname $HOST_NAME User $USER_NAME Host node2 Hostname $HOST_NAME User $USER_NAME ...
- 替换
-
$HOST_NAME
,主机名为 Ceph 节点。 -
$USER_NAME
,以及 Ansible 用户的新用户名。
-
示例
Host node1 Hostname monitor User admin Host node2 Hostname osd User admin Host node3 Hostname gateway User admin
为
~/.ssh/config
文件设置正确的文件权限:[admin@admin ~]$ chmod 600 ~/.ssh/config
其它资源
-
ssh_config(5)
手册页 - Red Hat Enterprise Linux 7 系统管理员指南中的 OpenSSH 章节
1.1.4. 为 Red Hat Ceph Storage 配置防火墙
Red Hat Ceph Storage(RHCS)使用 firewalld
服务。
Monitor 守护进程使用端口 6789
用于在 Ceph 存储群集内进行通信。
在每个 Ceph OSD 节点上,OSD 守护进程使用 6800-7300
范围内的多个端口:
- 一个用于通过公共网络与客户端通信和监控器
- 一个用于通过集群网络发送数据到其他 OSD(如果可用);否则,通过公共网络发送数据
- 一个用于通过集群网络(如果有)交换心跳数据包;否则,通过公共网络交换。
Ceph 管理器 (ceph-mgr
) 守护进程使用范围为 6800-7300
的端口。考虑将 ceph-mgr
守护进程与 Ceph monitor 在同一节点上并置。
Ceph 元数据服务器节点(ceph-mds
)使用范围 680 0-7300 中的端口
。
Ceph 对象网关节点由 Ansible 配置为使用默认端口 8080
。但是,您可以更改默认端口,例如端口 80
。
要使用 SSL/TLS 服务,请打开端口 443
。
前提条件
- 网络硬件已连接。
步骤
以 root
用户身份运行以下命令。
在所有 RHCS 节点上,启动
firewalld
服务。启用它在引导时运行,并确保它正在运行:# systemctl enable firewalld # systemctl start firewalld # systemctl status firewalld
在所有监控节点上,打开
公共网络
上的端口 6789:[root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent
根据源地址限制访问:
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="6789" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="6789" accept" --permanent
- 替换
-
带有 monitor 节点的网络地址的 ip
_address
。 -
带有 CIDR 表示法子网掩码的
netmask_prefix
。
-
带有 monitor 节点的网络地址的 ip
示例
[root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.11/24" port protocol="tcp" \ port="6789" accept"
[root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.11/24" port protocol="tcp" \ port="6789" accept" --permanent
在所有 OSD 节点上,打开公共网络上的端口
6800-7300
:[root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
如果您有单独的集群网络,请对适当的区重复这些命令。
在所有 Ceph Manager(
ceph-mgr
)节点上(通常是与监控器节点相同),在公共网络上打开端口6800-7300
:[root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
如果您有单独的集群网络,请对适当的区重复这些命令。
在所有 Ceph 元数据服务器(
ceph-mds
)节点上,打开公共网络上的端口6800
:[root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp --permanent
如果您有单独的集群网络,请对适当的区重复这些命令。
在所有 Ceph 对象网关节点上,打开公共网络上的相关端口或端口。
打开默认 Ansible 配置的端口
8080
:[root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp [root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
根据源地址限制访问:
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="8080" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="8080" accept" --permanent
- 替换
-
ip_address
带有对象网关节点的网络地址。 -
带有 CIDR 表示法子网掩码的
netmask_prefix
。
-
示例
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="8080" accept"
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="8080" accept" --permanent
可选。如果使用 Ansible 安装 Ceph 对象网关,并且更改 Ansible 将 Ceph 对象网关配置为从
8080
使用的默认端口,例如,使用端口80
,打开此端口:[root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp [root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
要根据源地址限制访问,请运行以下命令:
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="80" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="80" accept" --permanent
- 替换
-
ip_address
带有对象网关节点的网络地址。 -
带有 CIDR 表示法子网掩码的
netmask_prefix
。
-
示例
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="80" accept"
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="80" accept" --permanent
可选。要使用 SSL/TLS,请打开端口
443
:[root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp [root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
要根据源地址限制访问,请运行以下命令:
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="443" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="443" accept" --permanent
- 替换
-
ip_address
带有对象网关节点的网络地址。 -
带有 CIDR 表示法子网掩码的
netmask_prefix
。
-
示例
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="443" accept" [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="443" accept" --permanent
其它资源
- 如需有关公共和集群网络的更多信息,请参阅验证 Red Hat Ceph Storage 的网络配置。
-
有关
firewalld
的详情,请查看 Red Hat Enterprise Linux 7 安全指南中的使用 防火墙 章节。
1.1.5. 使用 HTTP 代理
如果 Ceph 节点位于 HTTP/HTTPS 代理后面,则需要配置 docker 以访问 registry 中的镜像。执行以下步骤使用 HTTP/HTTPS 代理配置 docker 的访问。
先决条件
- 正在运行的 HTTP/HTTPS 代理
步骤
作为
root
用户,为 docker 服务创建一个 systemd 目录:# mkdir /etc/systemd/system/docker.service.d/
以
root
身份,创建 HTTP/HTTPS 配置文件。对于 HTTP,创建
/etc/systemd/system/docker.service.d/http-proxy.conf
文件,并将以下几行添加到文件中:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"
对于 HTTPS,请创建
/etc/systemd/system/docker.service.d/https-proxy.conf
文件,并将以下几行添加到文件中:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443/"
-
以
root
用户身份,在运行ceph-ansible
playbook 之前,将 HTTP/HTTPS 配置文件复制到存储集群中的所有节点。