本文的目标是在三台虚拟机上搭建Ceph集群,其中一台作为整个集群的服务器,另外两台只安装ceph-client作为客户端,可以挂载CephFS。

虚拟机系统:CentOS 7.6  Ceph版本:Mimic

准备阶段

1.将Ceph存储库添加到ceph-deploy管理节点。然后,安装 ceph-deploy

安装并启用Extra Packages for Enterprise Linux(EPEL)存储库:

sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

将Ceph存储库写入/etc/yum.repos.d/ceph.repo中。替换 {ceph-stable-release}为稳定的Ceph版本(例如,mimic。)

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-{ceph-stable-release}/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

如果后面发现速度过慢,可换国内源:

[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-{ceph-stable-release}/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-{ceph-stable-release}/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-{ceph-stable-release}/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

更新您的存储库并安装ceph-deploy

sudo yum update
sudo yum install ceph-deploy

如果搭建的是单节点Ceph集群,可以直接跳到5。

2.(推荐)安装NTP

sudo yum install ntp ntpdate ntp-doc

3.创建ceph-deploy用户

ceph-deploy实用程序必须以具有无密码sudo权限的用户身份登录到Ceph节点,因为它需要在不提示输入密码的情况下安装软件和配置文件。

在Ceph集群的所有节点上为ceph-deploy创建一个用户,并且不要使用“ceph”作为用户名。在集群使用统一的用户名可以提高易用性(不要求),但你应该避免使用明显的用户名,因为黑客通常使用暴力尝试它们(例如root, admin{productname})。以下过程(替换 {username}您定义的用户名)描述了如何使用无密码创建用户sudo

注意:从Infernalis版本开始,“ceph”用户名是为Ceph守护进程保留的。如果Ceph节点上已存在“ceph”用户,则必须在尝试升级之前删除该用户。

在每个Ceph节点上创建一个新用户。

ssh user@ceph-server
sudo useradd -d /home/{username} -m {username}
sudo passwd {username}

对于添加到每个Ceph节点的新用户,请确保该用户具有 sudo权限。

echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
sudo chmod 0440 /etc/sudoers.d/{username}

4.启用无密码SSH

由于ceph-deploy不会提示输入密码,因此必须在admin节点上生成SSH密钥,并将公钥分发给每个Ceph节点。ceph-deploy将尝试为初始监视器生成SSH密钥。

生成SSH密钥,但不要使用sudo或 root用户。将密码保留为空:

ssh-keygen

Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.

将密钥复制到每个Ceph节点,替换{username}为您上一步中创建的用户名。

ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3

(推荐)修改管理节点的~/.ssh/config文件,以便ceph-deploy能够以您创建的用户身份登录Ceph节点,而无需在每次执行时指定。替换{username}为您上一步中创建的用户名。

Host node1
   Hostname node1
   User {username}
Host node2
   Hostname node2
   User {username}
Host node3
   Hostname node3
   User {username}

5.确保网络连接

确保能ping通短主机名(hostname -s),做好主机名的解析(写入/etc/hosts)。

注意:必须被解析到网络ip,不能是环回地址(127.0.0.1)。

6.打开相关端口

这里我为了省事直接关闭了防火墙。

systemctl stop firewalld
systemctl disable firewalld

7.SELinux

在CentOS上,SELinux默认是Enforcing状态,为了简化安装,我们建议将它设置为Permissive或彻底关闭。

执行以下命令以将其设置为Permissive:

sudo setenforce 0

8.安装EPEL

sudo yum install yum-plugin-priorities

存储集群搭建阶段

在管理节点上创建一个目录,以维护为集群生成的配置文件和密钥。

mkdir my-cluster
cd my-cluster

ceph-deploy将把输出文件存放在当前目录,所以确保在这个文件夹中执行ceph-deploy

重要:不要使用root或sudo运行ceph-deploy。

0.从头再来。

如果您遇到麻烦并且想要重新开始,请执行以下操作以清除Ceph软件包,并清除其所有数据和配置:

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm -rf *

如果执行purge,则必须重新安装Ceph。最后一个rm 命令删除在先前安装期间由本地ceph-deploy写出的所有文件。

1.创建一个集群

ceph-deploy new {initial-monitor-node(s)}

将node(s)替换成主机名,例如:

ceph-deploy new node1

使用 lscat检查ceph-deploy在当前目录中的输出。您应该看到Ceph配置文件(ceph.conf),监视器密钥环(ceph.mon.keyring)和新集群的日志文件。

为了省事,确保只有一个网络接口,(所有安装完成后)关闭ipv6。如有需要请参考官方文档

2.安装Ceph

ceph-deploy install {ceph-node} [...]

例如:

ceph-deploy install node1

ceph-deploy将在列出的每个节点上安装Ceph。

不出意外,在这一步将发生报错。如果发生,请执行:

sudo yum remove ceph-release.noarch

之后在/etc/yum.repo.d/中将ceph.repo.rpmnew重命名为ceph.repo。

重新尝试安装可能会因为网速过慢而导致超时,所以我们提前手动安装。

sudo yum install ceph

然后再尝试安装应该就可以成功了。

3.部署初始mon并收集密钥

ceph-deploy mon create-initial

使用ceph-deploy将配置文件和管理密钥复制到您的管理节点和Ceph节点。

ceph-deploy admin {ceph-node(s)}

例如:

ceph-deploy admin node1

4.添加mgr

ceph-deploy mgr create node1  *Required only for luminous+ builds, i.e >= 12.x builds*

仅适用于luminous以上版本。

5.添加三个OSD

我们假设您在每个节点中都有一个未使用的磁盘/dev/vdb 确保设备当前未使用且不包含任何重要数据。

ceph-deploy osd create --data {device} {ceph-node}

本例中:

ceph-deploy osd create --data /dev/sdb node1
ceph-deploy osd create --data /dev/sdc node1
ceph-deploy osd create --data /dev/sdd node1

6.检查群集的运行状况

sudo ceph health

您的集群应该报告HEALTH_OK。您可以使用以下命令查看更完整的集群状态:

sudo ceph -s

7.添加MDS

要使用CephFS,您至少需要一个元数据服务器。执行以下操作以创建元数据服务器:

ceph-deploy mds create {ceph-node}

例如:

ceph-deploy mds create node1

因为我们是单节点Ceph集群,所以不需要更多mon,也没有mgr备份。

8.添加RGW

要使用Ceph对象网关组件,必须部署RGW实例。执行以下命令以创建RGW的新实例:

ceph-deploy rgw create {gateway-node}

例如:

ceph-deploy rgw create node1

文件系统搭建阶段

确保存储集群运行在 active+clean 状态且至少有一个运行中的MDS。

1.在ceph-client节点上安装Ceph

使用ceph-deploy:

ceph-deploy install ceph-client

2.创建文件系统

上一步中,您已经创建了MDS,但在创建pool和文件系统之前它不会变为活动状态。

ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
ceph fs new <fs_name> cephfs_metadata cephfs_data

例如:

sudo ceph osd pool create cephfs_data 8
sudo ceph osd pool create cephfs_metadata 8
sudo ceph fs new cephfs cephfs_metadata cephfs_data

这时候会发现100% pgs not active并且mds一直处于creating状态,执行以下命令:

cd /etc/ceph/
sudo ceph osd getcrushmap -o /etc/ceph/crushmap
sudo crushtool -d /etc/ceph/crushmap -o /etc/ceph/crushmap.txt
sudo sed -i 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' /etc/ceph/crushmap.txt
sudo grep 'step chooseleaf' /etc/ceph/crushmap.txt
/*出现step chooseleaf firstn 0 type osd*/
sudo crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap-new
sudo ceph osd setcrushmap -i /etc/ceph/crushmap-new

这时候再查看集群状态会发现HEALTH_OK,mds已经处于active状态,100% pgs active+clean

到这一步,基本可以宣告Ceph集群和CephFS搭建完毕。

要增加pool的pg_num,可使用ceph osd pool set {pool-name} pg_num {x}命令。(只能增加不能减少)

如果要减少pg_num,只能删除cephfs和pool重新再来,在ceph.conf里添加mon_allow_pool_delete = true,并重启。

然后执行以下命令删除cephfs和pool:(数据会销毁且不可撤销)

systemctl stop ceph-mds@node1
sudo ceph fs rm cephfs --yes-i-really-mean-it
sudo ceph osd pool rm cephfs_data cephfs_data --yes-i-really-really-mean-it
sudo ceph osd pool rm cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
systemctl start ceph-mds@node1

3.身份验证

Ceph存储集群在默认情况下启用身份验证的情况下运行。为了省事,可以把my-cluster和/etc/ceph/中的ceph.conf中的cephx改成none来禁用它。

禁用后需要重启,否则可能会连不上集群。

如果需要启用身份验证,请参考官方文档

文件系统挂载阶段

作为内核驱动器挂载

sudo mkdir /mnt/mycephfs
sudo mount -t ceph {ip-address-of-monitor}:6789:/ /mnt/mycephfs

如果您没有禁用身份验证,保持默认开启,需要提供用户名和秘密文件,例如:

sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret

将CephFS挂载为用户空间(FUSE)中的文件系统

sudo mkdir ~/mycephfs
sudo ceph-fuse -m {ip-address-of-monitor}:6789 ~/mycephfs

如果您没有禁用身份验证,保持默认开启,且密钥环不在默认位置(/etc/ceph),需要手动指定

sudo ceph-fuse -k ./ceph.client.admin.keyring -m 192.168.0.1:6789 ~/mycephfs
Latest posts by 青鸟千秋 (see all)

Ceph客户端缓存一致性分析

引子 在分布式系统中,保证客户端的缓存一致性非常重要。 假设有两个客户端Client A和Client B。集群的文件系统中有这么一个目录:/a/b/c/d/。 Client A创建...

阅读全文

CephFS:什么是CAPS?

在Ceph中,他们建立了一套独特的系统来管理客户端对Inode的操作权限,称为capabilities,简称CAPS。与其他网络文件系统(例如NFS或SMB)的主要区别之一是授予...

阅读全文

Win10 17074麦克风没声音bug解决方案

今天笔记本麦克风突然没声音重装声卡驱动也不好使 百度“win10麦克风没声音”无果,突发奇想:是不是微软这家伙的锅? 改成“win10 17074麦克风没声音”——竟然...

阅读全文

欢迎留言