Ceph是一个广泛使用的开源存储平台。 它提供高性能,可靠性和可扩展性。 Ceph免费分布式存储系统提供对象,块和文件级存储的接口。 Ceph是构建提供分布式存储系统而没有单点故障。
在本教程中,我将指导您在CentOS 7上安装和构建Ceph群集。Ceph群集需要这些Ceph组件:
- Ceph OSD(ceph-osd) - 处理数据存储,数据复制和恢复。 Ceph集群至少需要两个Ceph OSD服务器。 我将在这里使用三台CentOS 7 OSD服务器。
- Ceph监视器(ceph-mon) - 监视集群状态,OSD映射和CRUSH映射。 我将使用一个服务器。
- Ceph Meta数据服务器(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节点 。 管理节点用于配置监控节点和osd节点。 登录到ceph -admin节点并成为' cephuser '。
ssh root@ceph-admin
su - cephuser
管理节点用于安装和配置所有集群节点,因此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来保护系统。 在这一步中,我们将在所有节点上启用firewald,然后打开ceph-admon,ceph-mon和ceph-osd所需的端口。
登录到ceph-admin节点并启动firewalld。
ssh root@ceph-admin
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
Firewalld配置完成。
第4步 - 配置Ceph OSD节点
在本教程中,我们有3个OSD节点,每个节点有两个分区。
- / dev / sda为根分区。
- / dev / sdb是一个空分区 - 在我的情况下是30GB。
我们将使用/ dev / sdb作为Ceph磁盘。 从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 root@ceph-admin
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
在[全局]块下,粘贴以下配置。
# 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上创建数据和日志分区。
检查所有OSD节点上的/ dev / sdb分区是否可用。
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已准备好进行OSD使用结果,则部署成功。
使用以下命令激活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 Journal
或者您可以使用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 Cluster已创建。
第6步 - 测试Ceph设置
在第4步中,我们安装并创建了我们新的Ceph集群,然后我们将OSDS节点添加到集群。 现在我们可以测试集群,并确保集群设置中没有错误。
从ceph-admin节点登录到ceph监视服务器' mon1 '。
ssh mon1
运行以下命令以检查群集运行状况。
sudo ceph health
现在检查集群状态。
sudo ceph -s
你应该看到下面的结果:
确保Ceph健康状况正常 ,并且有一个监视器节点' mon1 ',IP地址为“ 10.0.15.11 ”。 应该有3个OSD服务器,所有应该都可以运行,并且应该有一个可用的大约75GB - 3x25GB Ceph数据分区的磁盘。
祝贺你成功建立了一个新的Ceph集群。
在Ceph教程的下一部分中,我将向您展示如何使用Ceph作为块设备或将其作为FileSystem安装 。