如何在Ubuntu 16.04上创建Ceph存储群集

时间:2020-03-05 15:31:55  来源:igfitidea点击:

Ceph是近年来最令人兴奋的开源存储技术之一。
本文将提供有关如何创建基本CEPH STROAGE集群的分步教程。
这已经在Ubuntu 16.04上进行了测试。
请注意,除非另有说明,否则所有命令都以root身份执行。
另请注意,当此文档提到"所有Ceph节点"时,这也包括管理节点。

一般设置

在我们的示例中,我们将创建一个基本的三个节点Ceph集群,每个Ceph集群都有两个OSD。
我们将使用主机名约定"Storage-X",其中"x"是1到3的数字,用于引用特定节点。
我们将使用外部计算机(可以是我们自己的计算机或者笔记本电脑)作为Ceph admin节点。

网络设置

每个节点将位于相同的专用网络上,通过该网关可以访问Internet。
管理节点也应该在同一网络上,但不需要一直在网络上使用。
因此,工作计算机可以是管理节点,并且可以使用VPN连接到Ceph节点的网络。

CEPH使用TCP端口6789用于Ceph监视节点和11800-7100的Ceph OSD到公共区域。
例如,在iptables上:

sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT

准备节点

每个存储节点都需要同步,因此我们将在它们上安装NTP,并确保我们可以通过网络通过SSH访问它们。

sudo apt install ntp ssh

确保每个Ceph节点的主机名都可以从所有Ceph节点解析。
在每个Ceph节点上,编辑/etc/hosts文件并添加以下内容:

[Admin Node IP Address] admin-node
[Storage-1 IP Address] Storage-1
[Storage-2 IP Address] Storage-2
[Storage-3 IP Address] Storage-3

相应地替换每个节点的IP地址。
要测试解决方案是否有效,请执行以下操作:

ping admin-node
ping Storage-1
ping Storage-2
ping Storage-3

确保管理员节点主机名解析为管理节点的外部网络IP地址,而不是环回IP地址(127.0.0.1)。

在每个Ceph节点(意味着管理节点和所有存储节点)上,我们将添加Ceph Ubuntu包存储库,然后使用新的存储库的内容更新本地缓存:

wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add 
echo deb http://download.ceph.com/debian-{ceph-stable-release}/$(lsb_release -sc) main | tee /etc/apt/sources.list.d/ceph.list
apt-get update

在所有Ceph节点上创建一个Cephadmin用户。
此用户将用于在整个节点群集上安装和管理Ceph,因此请务必将凭据的安全性最大限度地提高到此用户。

ssh-keygen -t rsa
useradd cephadmin

设置密码少SSH

来自管理节点的Ceph安装脚本和工具需要能够无密码访问群集的所有成员。
在管理节点上,切换到Cephadmin用户并创建一个SSH密钥:

将生成的SSH键复制到三个存储节点:

ssh-copy-id Storage-1
ssh-copy-id Storage-2
ssh-copy-id Storage-3

作为管理节点上的Cephadmin用户,测试如果无密码SSH现在正常工作:

ssh Storage-1
ssh Storage-2
ssh Storage-3

设置密码的sudo

现在,通过SSH设置密码访问,在所有Ceph节点上为Cephadmin用户配置无密码sudo:

visudo

我们应该看到以下内容:

## This file MUST be edited with the 'visudo' command as root.
## Please consider adding local content in /etc/sudoers.d/instead of
# directly modifying this file.
## See the man page for details on how to write a sudoers file.
#Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group Jan gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

在底部添加以下行:

cephadmin ALL=(ALL) NOPASSWD: ALL

这现在应该允许所有Ceph节点上的Cephadmin用户的无密码sudo。

安装ceph-deploy

Ceph-Deploy是由Ceph开发人员创建的工具,以便通过脚本部署节点所需的单个步骤来促进Ceph集群的快速部署。
我们将通过在管理节点上安装工具来利用此功能。

apt install ceph-deploy

在管理节点上,切换到教程第1部分中创建的Cephadmin用户,切换到主目录,并创建一个子目录,该子目录将用于包含部署和管理我们的Ceph集群所需的所有文件:

su cephadmin
cd
mkdir my-first-ceph-cluster
cd my-first-ceph-cluster

此时,要执行的所有部署命令只能从/Home/Cephadmin/My-First-Ceph-Cluster完成。
管理命令也将从同一目录中完成。

ceph配置

将所有存储节点分配为监视节点:

ceph-deploy new Storage-1 Storage-2 Storage-3

在工作目录中,我们现在应该看到文件已通过Ceph-Deploy生成,包括键控文件和Ceph配置文件。

将以下行添加到Ceph.conf文件:

osd pool default size = 2

由于我们集群中只有两个存储节点只有两个OSD,因此它将允许Ceph对我们存储的每个数据的单一另外副本满意。
将以下行添加到Ceph.conf:

public network = {ip-address}/{netmask}

我们将其中替换具有实际值的网络部件。
例如,如果存储节点在192.168.1.0/24网络上,则应为值。
在提到"公共网络"时不要困惑;它只指的是Ceph集群外部的网络。
本教程未涵盖内部复制网络。

部署Ceph.

现在将安装软件和配置文件并将其复制到Ceph节点。

ceph-deploy install admin-node Storage-1 Storage-2 Storage-3

这将为节点安装所有基本CEPH包。

安装和配置Ceph Monitor软件到存储节点:

ceph-deploy mon create-initial

Ceph OSDS.

虽然可以使用目录作为OSDS,但不建议在生产设置中。
假设要在每个存储节点上使用的Ceph OSDS为/dev/sda和/dev/sdb,我们有ceph准备磁盘使用。

警告:以下命令将在指定的OSD上销毁现有数据,因此应注意执行命令中没有错误。

ceph-deploy osd prepare Storage-1:/dev/sda
ceph-deploy osd prepare Storage-1:/dev/sdb
ceph-deploy osd prepare Storage-2:/dev/sda
ceph-deploy osd prepare Storage-2:/dev/sdb
ceph-deploy osd prepare Storage-3:/dev/sda
ceph-deploy osd prepare Storage-3:/dev/sdb

如果前面的命令运行而没有任何错误,则OSD已准备就绪,我们现在可以将它们激活为群集中的运行资源:

ceph-deploy osd activate Storage-1:/dev/sda
ceph-deploy osd activate Storage-1:/dev/sdb
ceph-deploy osd activate Storage-2:/dev/sda
ceph-deploy osd activate Storage-2:/dev/sdb
ceph-deploy osd activate Storage-3:/dev/sda
ceph-deploy osd activate Storage-3:/dev/sdb

最后确定

将管理员键库复制到每个Ceph节点,以便在每个节点上进行Ceph管理:

ceph-deploy admin admin-node Storage-1 Storage-2 Storage-3

检查所有存储节点上所有OSD的状态:

ceph osd tree

检查Ceph集群的整体状态:

ceph health

如果你得到一个

HEALTH_OK

这意味着群集正在正常工作。

如果要查看更多群集统计信息,则以下命令应执行以下操作:

ceph status