在CentOS下安装和配置分布式系统Ceph的教程

时间:2022-05-04 14:19:47

开发一个分布式文件系统需要多方努力,但是如果能准确地解决问题,它就是无价的。Ceph 的目标简单地定义为:可轻松扩展到数 PB 容量,对多种工作负载的高性能(每秒输入/输出操作[IOPS]和带宽)。
不幸的是,这些目标之间会互相竞争(例如,可扩展性会降低或者抑制性能或者影响可靠性)。Ceph 开发了一些非常有趣的概念(例如,动态元数据分区,数据分布和复制),这些概念在本文中只进行简短地探讨。Ceph 的设计还包括保护单一点故障的容错功能,它假设大规模(PB 级存储)存储故障是常见现象而不是例外情况。最后,它的设计并没有假设某种特殊工作负载,但是包括适应变化的工作负载,提供最佳性能的能力。它利用 POSIX 的兼容性完成所有这些任务,允许它对当前依赖 POSIX 语义(通过以 Ceph 为目标的改进)的应用进行透明的部署。最后,Ceph 是开源分布式存储,也是主线 Linux 内核(2.6.34)的一部分。
现在,让我们探讨一下 Ceph 的架构以及高端的核心要素。然后我会拓展到另一层次,说明 Ceph 中一些关键的方面,提供更详细的探讨。
Ceph 生态系统可以大致划分为四部分(见图 1):客户端(数据用户),元数据服务器(缓存和同步分布式元数据),一个对象存储集群(将数据和元数据作为对象存储,执行其他关键职能),以及最后的集群监视器(执行监视功能)。
在CentOS下安装和配置分布式系统Ceph的教程

如图所示,客户使用元数据服务器,执行元数据操作(来确定数据位置)。元数据服务器管理数据位置,以及在何处存储新数据。值得注意的是,元数据存储在一个存储集群(标为 “元数据 I/O”)。实际的文件 I/O 发生在客户和对象存储集群之间。这样一来,更高层次的 POSIX 功能(例如,打开、关闭、重命名)就由元数据服务器管理,不过 POSIX 功能(例如读和写)则直接由对象存储集群管理。
另一个架构视图由图 2 提供。一系列服务器通过一个客户界面访问 Ceph 生态系统,这就明白了元数据服务器和对象级存储器之间的关系。分布式存储系统可以在一些层中查看,包括一个存储设备的格式(Extent and B-tree-based Object File System [EBOFS] 或者一个备选),还有一个设计用于管理数据复制,故障检测,恢复,以及随后的数据迁移的覆盖管理层,叫做 Reliable Autonomic Distributed Object Storage(RADOS)。最后,监视器用于识别组件故障,包括随后的通知。
在CentOS下安装和配置分布式系统Ceph的教程

示例系统资源
**CEPH-STORAGE**
OS: CentOS Linux 7 (Core)
RAM:1 GB
CPU:1 CPU
DISK: 20
Network: 45.79.136.163
FQDN: ceph-storage.linoxide.com
**CEPH-NODE**
OS: CentOS Linux 7 (Core)
RAM:1 GB
CPU:1 CPU
DISK: 20
Network: 45.79.171.138
FQDN: ceph-node.linoxide.com
安装前的配置
在安装 Ceph 存储之前,我们要在每个节点上完成一些步骤。第一件事情就是确保每个节点的网络已经配置好并且能相互访问。

配置 Hosts

要在每个节点上配置 hosts 条目,要像下面这样打开默认的 hosts 配置文件(LCTT 译注:或者做相应的 DNS 解析)。
 

复制代码

代码如下:


# vi /etc/hosts
45.79.136.163 ceph-storage ceph-storage.linoxide.com
45.79.171.138 ceph-node ceph-node.linoxide.com


安装 VMware 工具

 

工作环境是 VMWare 虚拟环境时,推荐你安装它的 open VM 工具。你可以使用下面的命令安装。
 

复制代码

代码如下:


# yum install -y open-vm-tools


配置防火墙

 

如果你正在使用启用了防火墙的限制性环境,确保在你的 Ceph 存储管理节点和客户端节点中开放了以下的端口。

你必须在你的 Admin Calamari 节点开放 80、2003、以及4505-4506 端口,并且允许通过 80 号端口访问到 Ceph 或 Calamari 管理节点,以便你网络中的客户端能访问 Calamari web 用户界面。

你可以使用下面的命令在 CentOS 7 中启动并启用防火墙。
 

复制代码

代码如下:


# systemctl start firewalld
# systemctl enable firewalld


运行以下命令使 Admin Calamari 节点开放上面提到的端口。

复制代码

代码如下:


# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=2003/tcp --permanent
# firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent
# firewall-cmd --reload


在 Ceph Monitor 节点,你要在防火墙中允许通过以下端口。

复制代码

代码如下:


# firewall-cmd --zone=public --add-port=6789/tcp --permanent


然后允许以下默认端口列表,以便能和客户端以及监控节点交互,并发送数据到其它 OSD。

复制代码

代码如下:


# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent


如果你工作在非生产环境,建议你停用防火墙以及 SELinux 设置,在我们的测试环境中我们会停用防火墙以及 SELinux。

复制代码

代码如下:


# systemctl stop firewalld
# systemctl disable firewalld


系统升级

 

现在升级你的系统并重启使所需更改生效。
 

复制代码

代码如下:


# yum update
# shutdown -r 0


设置 Ceph 用户
现在我们会新建一个单独的 sudo 用户用于在每个节点安装 ceph-deploy工具,并允许该用户无密码访问每个节点,因为它需要在 Ceph 节点上安装软件和配置文件而不会有输入密码提示。

 

运行下面的命令在 ceph-storage 主机上新建有独立 home 目录的新用户。
 

复制代码

代码如下:


[root@ceph-storage ~]# useradd -d /home/ceph -m ceph
[root@ceph-storage ~]# passwd ceph


节点中新建的每个用户都要有 sudo 权限,你可以使用下面展示的命令赋予 sudo 权限。

复制代码

代码如下:


[root@ceph-storage ~]# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
ceph ALL = (root) NOPASSWD:ALL
[root@ceph-storage ~]# sudo chmod 0440 /etc/sudoers.d/ceph


设置 SSH 密钥
现在我们会在 Ceph 管理节点生成 ssh 密钥并把密钥复制到每个 Ceph 集群节点。

 

在 ceph-node 运行下面的命令复制它的 ssh 密钥到 ceph-storage。
 

复制代码

代码如下:


[root@ceph-node ~]# ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
5b:*:*:*:*:*:*:*:*:*:c9 root@ceph-node
The key's randomart image is:
+--[ RSA 2048]----+

复制代码

代码如下:


[root@ceph-node ~]# ssh-copy-id ceph@ceph-storage


在CentOS下安装和配置分布式系统Ceph的教程

 

配置 PID 数目
要配置 PID 数目的值,我们会使用下面的命令检查默认的内核值。默认情况下,是一个小的最大线程数 32768。

如下图所示通过编辑系统配置文件配置该值为一个更大的数。
在CentOS下安装和配置分布式系统Ceph的教程

配置管理节点服务器
配置并验证了所有网络后,我们现在使用 ceph 用户安装 ceph-deploy。通过打开文件检查 hosts 条目(LCTT 译注:你也可以用 DNS 解析来完成)。
 

复制代码

代码如下:


# vim /etc/hosts


ceph-storage 45.79.136.163
ceph-node 45.79.171.138
运行下面的命令添加它的库。

复制代码

代码如下:


# rpm -Uhv http://ceph.com/rpm-giant/el7/noarch/ceph-release-1-0.el7.noarch.rpm


在CentOS下安装和配置分布式系统Ceph的教程

 

或者创建一个新文件并更新 Ceph 库参数,别忘了替换你当前的 Release 和版本号。
 

复制代码

代码如下:


[root@ceph-storage ~]# vi /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc


之后更新你的系统并安装 ceph-deploy 软件包。

 

安装 ceph-deploy 软件包
我们运行下面的命令以及 ceph-deploy 安装命令来更新系统以及最新的 ceph 库和其它软件包。
 

复制代码

代码如下:


#yum update -y && yum install ceph-deploy -y


配置集群
使用下面的命令在 ceph 管理节点上新建一个目录并进入新目录,用于收集所有输出文件和日志。

复制代码

代码如下:


# mkdir ~/ceph-cluster
# cd ~/ceph-cluster
# ceph-deploy new storage


在CentOS下安装和配置分布式系统Ceph的教程

 

如果成功执行了上面的命令,你会看到它新建了配置文件。

现在配置 Ceph 默认的配置文件,用任意编辑器打开它并在会影响你公共网络的 global 参数下面添加以下两行。
 

复制代码

代码如下:


# vim ceph.conf
osd pool default size = 1
public network = 45.79.0.0/16


安装 Ceph
现在我们准备在和 Ceph 集群关联的每个节点上安装 Ceph。我们使用下面的命令在 ceph-storage 和 ceph-node 上安装 Ceph。

复制代码

代码如下:


# ceph-deploy install ceph-node ceph-storage


在CentOS下安装和配置分布式系统Ceph的教程

 

处理所有所需仓库和安装所需软件包会需要一些时间。

当两个节点上的 ceph 安装过程都完成后,我们下一步会通过在相同节点上运行以下命令创建监视器并收集密钥。
 

复制代码

代码如下:


# ceph-deploy mon create-initial


在CentOS下安装和配置分布式系统Ceph的教程

 

设置 OSD 和 OSD 守护进程
现在我们会设置磁盘存储,首先运行下面的命令列出你所有可用的磁盘。
 

复制代码

代码如下:


# ceph-deploy disk list ceph-storage


结果中会列出你存储节点中使用的磁盘,你会用它们来创建 OSD。让我们运行以下命令,请使用你的磁盘名称。

复制代码

代码如下:


# ceph-deploy disk zap storage:sda
# ceph-deploy disk zap storage:sdb


为了最后完成 OSD 配置,运行下面的命令配置日志磁盘以及数据磁盘。

复制代码

代码如下:


# ceph-deploy osd prepare storage:sdb:/dev/sda
# ceph-deploy osd activate storage:/dev/sdb1:/dev/sda1


你需要在所有节点上运行相同的命令,它会清除你磁盘上的所有东西。之后为了集群能运转起来,我们需要使用以下命令从 ceph 管理节点复制不同的密钥和配置文件到所有相关节点。

复制代码

代码如下:


# ceph-deploy admin ceph-node ceph-storage


测试 Ceph
我们快完成了 Ceph 集群设置,让我们在 ceph 管理节点上运行下面的命令检查正在运行的 ceph 状态。

复制代码

代码如下:


# ceph status
# ceph health


HEALTH_OK
如果你在 ceph status 中没有看到任何错误信息,就意味着你成功地在 CentOS 7 上安装了 ceph 存储集群。