如何在CentOS 7上搭建Ceph分布式存储集群
在此页
- 第 1 步 - 配置所有节点
- 创建 Ceph 用户
- 安装和配置 NTP
- 安装 Open-vm-tools
- 禁用 SELinux
- 配置主机文件
- 在 ceph-admin 节点上安装 ceph-deploy
- 创建新的集群配置
- 在所有节点上安装 Ceph
- 将 OSDS 添加到集群
Ceph 是一个广泛使用的开源存储平台。它提供高性能、可靠性和可扩展性。 Ceph 免费分布式存储系统为对象、块和文件级存储提供接口。 Ceph 旨在提供一个没有单点故障的分布式存储系统。
在本教程中,我将指导您在 CentOS 7 上安装和构建 Ceph 集群。Ceph 集群需要以下 Ceph 组件:
- Ceph OSDs (ceph-osd) - 处理数据存储、数据复制和恢复。一个 Ceph 集群至少需要两台 Ceph OSD 服务器。我将在这里使用三个 CentOS 7 OSD 服务器。
- Ceph Monitor (ceph-mon) - 监控集群状态、OSD 图和 CRUSH 图。我将使用一台服务器。
- Ceph 元数据服务器 (ceph-mds) - 这是将 Ceph 用作文件系统所必需的。
先决条件
- 6 个服务器节点,全部安装了 CentOS 7。
- 所有节点的根权限。
本教程中的服务器将使用以下主机名和 IP 地址。
主机名ip地址
ceph-admin 10.0.15.10
mon1 10.0.15.11
osd1 10.0.15.21
osd2 10.0.15.22
osd3 10.0.15.23
客户端10.0.15.15所有OSD节点都需要两个分区,一个根(/)分区和一个空分区,后面用作Ceph数据存储。
第 1 步 - 配置所有节点
在此步骤中,我们将配置所有 6 个节点,为安装 Ceph 集群做好准备。您必须在所有节点上执行并运行以下所有命令。并确保所有节点上都安装了 ssh-server。
创建 Ceph 用户
在所有节点上创建一个名为 cephuser 的新用户。
useradd -d /home/cephuser -m cephuser
passwd cephuser创建新用户后,我们需要为 cephuser 配置 sudo。他必须能够以 root 身份运行命令,并且无需密码即可获得 root 权限。
运行以下命令为用户创建一个 sudoers 文件并使用 sed 编辑 /etc/sudoers 文件。
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers安装和配置 NTP
安装 NTP 以同步所有节点上的日期和时间。运行 ntpdate 命令通过 NTP 协议设置日期和时间,我们将使用 us pool NTP 服务器。然后启动并启用 NTP 服务器以在引导时运行。
yum install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org
hwclock --systohc
systemctl enable ntpd.service
systemctl start ntpd.service安装 Open-vm-tools
如果您在 VMware 中运行所有节点,则需要安装此虚拟化实用程序。否则跳过此步骤。
yum install -y open-vm-tools
禁用 SELinux
通过使用 sed 流编辑器编辑 SELinux 配置文件,在所有节点上禁用 SELinux。
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
配置主机文件
使用 vim 编辑器编辑所有节点上的 /etc/hosts 文件,并添加包含所有集群节点的 IP 地址和主机名的行。
vim /etc/hosts
粘贴下面的配置:
10.0.15.10 ceph-admin
10.0.15.11 mon1
10.0.15.21 osd1
10.0.15.22 osd2
10.0.15.23 osd3
10.0.15.15 client保存文件并退出 vim。
现在您可以尝试使用主机名在服务器之间 ping 以测试网络连接。例子:
ping -c 5 mon1
第 2 步 - 配置 SSH 服务器
在这一步中,我将配置 ceph-admin 节点。 admin节点用于配置monitor节点和osd节点。登录到 ceph-admin 节点并成为 cephuser。
ssh
su - cephuseradmin 节点用于安装和配置所有集群节点,因此 ceph-admin 节点上的用户必须具有无需密码即可连接到所有节点的权限。我们必须为 ceph-admin 节点上的 cephuser 配置无密码 SSH 访问。
为 cephuser 生成 ssh 密钥。
ssh-keygen
将密码短语留空/留空。
接下来,为 ssh 配置创建配置文件。
vim ~/.ssh/config
下面粘贴配置:
Host ceph-admin
Hostname ceph-admin
User cephuser
Host mon1
Hostname mon1
User cephuser
Host osd1
Hostname osd1
User cephuser
Host osd2
Hostname osd2
User cephuser
Host osd3
Hostname osd3
User cephuser
Host client
Hostname client
User cephuser保存文件。
更改配置文件的权限。
chmod 644 ~/.ssh/config
现在使用 ssh-copy-id 命令将 SSH 密钥添加到所有节点。
ssh-keyscan osd1 osd2 osd3 mon1 client >> ~/.ssh/known_hosts
ssh-copy-id osd1
ssh-copy-id osd2
ssh-copy-id osd3
ssh-copy-id mon1
ssh-copy-id client在请求时输入您的 cephuser 密码。
完成后,尝试从 ceph-admin 节点访问 osd1 服务器。
ssh osd1
第 3 步 - 配置 Firewalld
我们将使用 Firewalld 来保护系统。在这一步中,我们将在所有节点上启用防火墙,然后打开 ceph-admon、ceph-mon 和 ceph-osd 所需的端口。
登录到 ceph-admin 节点并启动 firewalld。
ssh
systemctl start firewalld
systemctl enable firewalld打开80、2003和4505-4506端口,然后重新加载防火墙。
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2003/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent
sudo firewall-cmd --reload从 ceph-admin 节点,登录到监控节点 mon1 并启动 firewalld。
ssh mon1
sudo systemctl start firewalld
sudo systemctl enable firewalld在 Ceph 监控节点上打开新端口并重新加载防火墙。
sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
sudo firewall-cmd --reload最后,在每个 osd 节点(osd1、osd2 和 os3)上打开端口 6800-7300。
从 ceph-admin 节点登录到每个 osd 节点。
ssh osd1
sudo systemctl start firewalld
sudo systemctl enable firewalld打开端口并重新加载防火墙。
sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
sudo firewall-cmd --reload防火墙配置完成。
第 4 步 - 配置 Ceph OSD 节点
在本教程中,我们有 3 个 OSD 节点,每个节点有两个分区。
- /dev/sda 为根分区。
- /dev/sdb 是一个空分区——在我的例子中是 30GB。
我们将为 Ceph 磁盘使用 /dev/sdb。从 ceph-admin 节点,登录到所有 OSD 节点并使用 XFS 格式化 /dev/sdb 分区。
ssh osd1
ssh osd2
ssh osd3使用 fdisk 命令检查分区。
sudo fdisk -l /dev/sdb
使用 parted 命令使用 XFS 文件系统和 GPT 分区表格式化 /dev/sdb 分区。
sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
sudo mkfs.xfs /dev/sdb -f现在检查分区,你会得到 xfs /dev/sdb 分区。
sudo blkid -o value -s TYPE /dev/sdb
第 5 步 - 构建 Ceph 集群
在此步骤中,我们将从 ceph-admin 节点在所有节点上安装 Ceph。
登录到 ceph-admin 节点。
ssh
su - cephuser在 ceph-admin 节点上安装 ceph-deploy
添加 Ceph 仓库,使用 yum 命令安装 Ceph 部署工具 ceph-deploy。
sudo rpm -Uhv http://download.ceph.com/rpm-jewel/el7/noarch/ceph-release-1-1.el7.noarch.rpm
sudo yum update -y && sudo yum install ceph-deploy -y确保所有节点都已更新。
安装 ceph-deploy 工具后,为 ceph 集群配置创建一个新目录。
创建新的集群配置
创建新的集群目录。
mkdir cluster
cd cluster/接下来,使用 ceph-deploy 命令创建一个新的集群配置,定义监控节点为 mon1。
ceph-deploy new mon1
该命令会在集群目录下生成 Ceph 集群配置文件 ceph.conf。
使用 vim 编辑 ceph.conf 文件。
vim ceph.conf
在 [global] 块下,粘贴下面的配置。
# Your network address
public network = 10.0.15.0/24
osd pool default size = 2保存文件并退出 vim。
在所有节点上安装 Ceph
现在从 ceph-admin 节点在所有其他节点上安装 Ceph。这可以通过单个命令完成。
ceph-deploy install ceph-admin mon1 osd1 osd2 osd3
该命令会自动在所有节点上安装 Ceph:mon1、osd1-3 和 ceph-admin - 安装需要一些时间。
现在在 mon1 节点上部署 ceph-mon。
ceph-deploy mon create-initial
该命令将创建监视器密钥,使用 ceph 命令检查和获取密钥。
ceph-deploy gatherkeys mon1
添加OSDS到集群
当所有节点上都安装了 Ceph 后,我们就可以将 OSD 守护进程添加到集群中。 OSD 守护进程将在磁盘 /dev/sdb 上创建它们的数据和日志分区。
检查 /dev/sdb 分区是否在所有 OSD 节点上可用。
ceph-deploy disk list osd1 osd2 osd3
您将看到 XFS 格式的 /dev/sdb 磁盘。
接下来,使用 zap 选项删除所有节点上的 /dev/sdb 分区表。
ceph-deploy disk zap osd1:/dev/sdb osd2:/dev/sdb osd3:/dev/sdb
该命令将删除 Ceph OSD 节点上 /dev/sdb 上的所有数据。
现在准备所有 OSDS 节点。确保结果中没有错误。
ceph-deploy osd prepare osd1:/dev/sdb osd2:/dev/sdb osd3:/dev/sdb
如果您看到 osd1-3 is ready for OSD use 结果,则部署成功。
使用以下命令激活 OSD:
ceph-deploy osd activate osd1:/dev/sdb1 osd2:/dev/sdb1 osd3:/dev/sdb1
在继续之前检查输出是否有错误。现在您可以使用 list 命令查看 OSD 节点上的 sdb 磁盘。
ceph-deploy disk list osd1 osd2 osd3
结果是 /dev/sdb 现在有两个分区:
- /dev/sdb1 - Ceph 数据
- /dev/sdb2 - Ceph 日志
或者您可以使用 fdisk 直接在 OSD 节点上检查。
ssh osd1
sudo fdisk -l /dev/sdb接下来,将管理密钥部署到所有关联节点。
ceph-deploy admin ceph-admin mon1 osd1 osd2 osd3
通过在所有节点上运行以下命令来更改密钥文件的权限。
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
CentOS 7 上的 Ceph 集群已创建。
第 6 步 - 测试 Ceph 设置
在第 4 步中,我们安装并创建了新的 Ceph 集群,然后我们将 OSDS 节点添加到集群中。现在我们可以测试集群并确保集群设置没有错误。
从 ceph-admin 节点,登录到 ceph 监控服务器 mon1。
ssh mon1
运行以下命令以检查集群运行状况。
sudo ceph health
现在检查集群状态。
sudo ceph -s
你应该看到下面的结果:
确保 Ceph 健康状况良好,并且有一个 IP 地址为 10.0.15.11 的监控节点 mon1。应该有 3 个 OSD 服务器并且都应该启动并运行,并且应该有一个大约 75GB - 3x25GB Ceph 数据分区的可用磁盘。
恭喜,你已经成功构建了一个新的 Ceph 集群。
在 Ceph 教程的下一部分中,我将向您展示如何将 Ceph 用作块设备或将其挂载为文件系统。
参考
- <李>
- https://access.redhat.com/documentation/en/red-hat-ceph-storage/