Ceph基础知识

      不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

  • Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
  • Monitors: Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
  • MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 lsfind 等基本命令。

 

硬件推荐

Ceph 为普通硬件设计,这可使构建、维护 PB 级数据集群的费用相对低廉。规划集群硬件时,需要均衡几方面的因素,包括区域失效和潜在的性能问题。硬件规划要包含把使用 Ceph 集群的 Ceph 守护进程和其他进程恰当分布。通常,我们推荐在一台机器上只运行一种类型的守护进程。我们推荐把使用数据集群的进程(如 OpenStack 、 CloudStack 等)安装在别的机器上

 

Ceph 可以运行在廉价的普通硬件上,小型生产集群和开发集群可以在一般的硬件上。

image

 

推荐操作系统

 

下面的表格展示了 Ceph 需求和各种 Linux 发行版的对应关系。一般来说, Ceph 对内核和系统初始化阶段的依赖很少(如 sysvinit 、 upstart 、 systemd )。

image 

安装(快速)

步骤一:预检

在部署 Ceph 存储集群之前,需要对 Ceph 客户端Ceph 节点进行一些基本的配置,你也可以加入 Ceph 社区以寻求帮助。

步骤二:存储集群

完成预检之后,你就可以开始部署 Ceph 存储集群了。

步骤三: CEPH 客户端

大多数 Ceph 用户不会直接往 Ceph 存储集群里存储对象,他们通常会使用 Ceph 块设备、 Ceph 文件系统、或 Ceph 对象存储这三大功能中的一个或多个。

 

预检

New in version 0.60.

谢谢您尝试 Ceph !我们建议安装一个 ceph-deploy 管理节点和一个三节点的Ceph 存储集群来研究 Ceph 的基本特性。这篇预检会帮你准备一个 ceph-deploy 管理节点、以及三个Ceph 节点(或虚拟机),以此构成 Ceph 存储集群。在进行下一步之前,请参见操作系统推荐以确认你安装了合适的 Linux 发行版。如果你在整个生产集群中只部署了单一 Linux 发行版的同一版本,那么在排查生产环境中遇到的问题时就会容易一点。

在下面的描述中节点代表一台机器。ditaa-cffd08dd3e192a5f1d724ad7930cb04200b9b425.png

安装 CEPH 部署工具

把 Ceph 仓库添加到 ceph-deploy 管理节点,然后安装 ceph-deploy

  1. 在 CentOS 上,可以执行下列命令:

    sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
  2. 把软件包源加入软件仓库。用文本编辑器创建一个 YUM (Yellowdog Updater, Modified) 库文件,其路径为 /etc/yum.repos.d/ceph.repo 。例如:

    sudo vim /etc/yum.repos.d/ceph.repo

    把如下内容粘帖进去,用 Ceph 的最新主稳定版名字替换 {ceph-stable-release} (如 firefly ),用你的Linux发行版名字替换 {distro} (如 el6 为 CentOS 6 、 el7 为 CentOS 7 、 rhel6 为 Red Hat 6.5 、 rhel7 为 Red Hat 7 、 fc19 是 Fedora 19 、 fc20 是 Fedora 20 )。最后保存到 /etc/yum.repos.d/ceph.repo 文件中。

    [ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
  3. 更新软件库并安装 ceph-deploy

    sudo yum update && sudo yum install ceph-deploy

Note

你也可以从欧洲镜像 eu.ceph.com 下载软件包,只需把 http://ceph.com/ 替换成 http://eu.ceph.com/ 即可

CEPH 节点安装

你的管理节点必须能够通过 SSH 无密码地访问各 Ceph 节点。如果 ceph-deploy 以某个普通用户登录,那么这个用户必须有无密码使用 sudo 的权限。

安装 NTP

我们建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障,详情见时钟

在 CentOS / RHEL 上,执行:

sudo yum install ntp ntpdate ntp-doc

在 Debian / Ubuntu 上,执行:

sudo apt-get install ntp

确保在各 Ceph 节点上启动了 NTP 服务,并且要使用同一个 NTP 服务器,详情见 NTP

安装 SSH 服务器

所有 Ceph 节点上执行如下步骤:

  1. 在各 Ceph 节点安装 SSH 服务器(如果还没有):

    sudo apt-get install openssh-server

    或者

    sudo yum install openssh-server
  2. 确保所有 Ceph 节点上的 SSH 服务器都在运行。

创建部署 CEPH 的用户

ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。

较新版的 ceph-deploy 支持用 --username 选项提供可无密码使用 sudo 的用户名(包括 root ,虽然不建议这样做)。使用 ceph-deploy --username {username} 命令时,指定的用户必须能够通过无密码 SSH 连接到 Ceph 节点,因为 ceph-deploy 中途不会提示输入密码。

我们建议在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。全集群统一的用户名可简化操作(非必需),然而你应该避免使用知名用户名,因为黑客们会用它做暴力破解(如 rootadmin{productname} )。后续步骤描述了如何创建无 sudo 密码的用户,你要用自己取的名字替换 {username}

Note

Infernalis 版起,用户名 “ceph” 保留给了 Ceph 守护进程。如果 Ceph 节点上已经有了 “ceph” 用户,升级前必须先删掉这个用户。

  1. 在各 Ceph 节点创建新用户。

    ssh user@ceph-server
    sudo useradd -d /home/{username} -m {username}
    sudo passwd {username}
  2. 确保各 Ceph 节点上新创建的用户都有 sudo 权限。

    echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
    sudo chmod 0440 /etc/sudoers.d/{username}
允许无密码 SSH 登录

正因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。

  1. 生成 SSH 密钥对,但不要用 sudoroot 用户。提示 “Enter passphrase” 时,直接回车,口令即为空:

    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.
  2. 把公钥拷贝到各 Ceph 节点,把下列命令中的 {username} 替换成前面创建部署 Ceph 的用户里的用户名。

    ssh-copy-id {username}@node1
    ssh-copy-id {username}@node2
    ssh-copy-id {username}@node3
  3. (推荐做法)修改 ceph-deploy 管理节点上的 ~/.ssh/config 文件,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了,而无需每次执行 ceph-deploy 都要指定 --username {username} 。这样做同时也简化了 sshscp 的用法。把 {username} 替换成你创建的用户名。

    Host node1
       Hostname node1
       User {username}
    Host node2
       Hostname node2
       User {username}
    Host node3
       Hostname node3
       User {username}
引导时联网

Ceph 的各 OSD 进程通过网络互联并向 Monitors 上报自己的状态。如果网络默认为 off ,那么 Ceph 集群在启动时就不能上线,直到你打开网络。

某些发行版(如 CentOS )默认关闭网络接口。所以需要确保网卡在系统启动时都能启动,这样 Ceph 守护进程才能通过网络通信。例如,在 Red Hat 和 CentOS 上,需进入 /etc/sysconfig/network-scripts 目录并确保 ifcfg-{iface} 文件中的 ONBOOT 设置成了 yes

确保联通性

ping 短主机名( hostname -s )的方式确认网络联通性。解决掉可能存在的主机名解析问题。

Note

主机名应该解析为网络 IP 地址,而非回环接口 IP 地址(即主机名应该解析成非 127.0.0.1 的IP地址)。如果你的管理节点同时也是一个 Ceph 节点,也要确认它能正确解析自己的主机名和 IP 地址(即非回环 IP 地址)。

开放所需端口

Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。详情见网络配置参考。 Ceph OSD 能利用多个网络连接进行与客户端、monitors、其他 OSD 间的复制和心跳的通信。

某些发行版(如 RHEL )的默认防火墙配置非常严格,你可能需要调整防火墙,允许相应的入站请求,这样客户端才能与 Ceph 节点上的守护进程通信。

对于 RHEL 7 上的 firewalld ,要对公共域开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范围,并且要配置为永久规则,这样重启后规则仍有效。例如:

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

若使用 iptables ,要开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范围,命令如下:

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

在每个节点上配置好 iptables 之后要一定要保存,这样重启之后才依然有效。例如:

/sbin/service iptables save
终端( TTY )

在 CentOS 和 RHEL 上执行 ceph-deploy 命令时可能会报错。如果你的 Ceph 节点默认设置了 requiretty ,执行 sudo visudo 禁用它,并找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty 或者直接注释掉,这样 ceph-deploy 就可以用之前创建的用户(创建部署 Ceph 的用户 )连接了。

Note

编辑配置文件 /etc/sudoers 时,必须用 sudo visudo 而不是文本编辑器。

SELINUX

在 CentOS 和 RHEL 上, SELinux 默认为 Enforcing 开启状态。为简化安装,我们建议把 SELinux 设置为 Permissive 或者完全禁用,也就是在加固系统配置前先确保集群的安装、配置没问题。用下列命令把 SELinux 设置为 Permissive

sudo setenforce 0

要使 SELinux 配置永久生效(如果它的确是问题根源),需修改其配置文件 /etc/selinux/config

优先级/首选项

确保你的包管理器安装了优先级/首选项包且已启用。在 CentOS 上你也许得安装 EPEL ,在 RHEL 上你也许得启用可选软件库。

sudo yum install yum-plugin-priorities

比如在 RHEL 7 服务器上,可用下列命令安装 yum-plugin-priorities并启用 rhel-7-server-optional-rpms 软件库:

sudo yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms

存储集群快速入门

 

如果你还没完成预检,请先做完。本篇快速入门ceph-deploy 从管理节点建立一个 Ceph 存储集群,该集群包含三个节点,以此探索 Ceph 的功能。

ditaa-cffd08dd3e192a5f1d724ad7930cb04200b9b425.png

 

第一次练习时,我们创建一个 Ceph 存储集群,它有一个 Monitor 和两个 OSD 守护进程。一旦集群达到 active + clean 状态,再扩展它:增加第三个 OSD 、增加元数据服务器和两个 Ceph Monitors。为获得最佳体验,先在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。

mkdir my-cluster
cd my-cluster

ceph-deploy 会把文件输出到当前目录,所以请确保在此目录下执行 ceph-deploy

Important

如果你是用另一普通用户登录的,不要用 sudo 或在 root 身份运行 ceph-deploy ,因为它不会在远程主机上调用所需的 sudo 命令。

禁用 requiretty

在某些发行版(如 CentOS )上,执行 ceph-deploy 命令时,如果你的 Ceph 节点默认设置了 requiretty 那就会遇到报错。可以这样禁用此功能:执行 sudo visudo ,找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty ,这样 ceph-deploy 就能用 ceph 用户登录并使用 sudo 了。

创建集群

如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:

ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys

用下列命令可以连 Ceph 安装包一起清除:

ceph-deploy purge {ceph-node} [{ceph-node}]

如果执行了 purge ,你必须重新安装 Ceph 。

在管理节点上,进入刚创建的放置配置文件的目录,用 ceph-deploy 执行如下步骤。

  1. 创建集群。

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

    例如:

    ceph-deploy new node1

    在当前目录下用 lscat 检查 ceph-deploy 的输出,应该有一个 Ceph 配置文件、一个 monitor 密钥环和一个日志文件。详情见 ceph-deploy new -h

  2. 把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把下面这行加入 [global] 段:

    osd pool default size = 2
  3. 如果你有多个网卡,可以把 public network 写入 Ceph 配置文件的 [global] 段下。详情见网络配置参考

    public network = {ip-address}/{netmask}
  4. 安装 Ceph 。

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

    例如:

    ceph-deploy install admin-node node1 node2 node3

    ceph-deploy 将在各节点安装 Ceph 。 注:如果你执行过 ceph-deploy purge ,你必须重新执行这一步来安装 Ceph 。

  5. 配置初始 monitor(s)、并收集所有密钥:

    ceph-deploy mon create-initial

    完成上述操作后,当前目录里应该会出现这些密钥环:

    • {cluster-name}.client.admin.keyring
    • {cluster-name}.bootstrap-osd.keyring
    • {cluster-name}.bootstrap-mds.keyring
    • {cluster-name}.bootstrap-rgw.keyring

Note

只有在安装 Hammer 或更高版时才会创建 bootstrap-rgw 密钥环。

Note

如果此步失败并输出类似于如下信息 “Unable to find /etc/ceph/ceph.client.admin.keyring”,请确认 ceph.conf 中为 monitor 指定的 IP 是 Public IP,而不是 Private IP。

  1. 添加两个 OSD 。为了快速地安装,这篇快速入门把目录而非整个硬盘用于 OSD 守护进程。如何为 OSD 及其日志使用独立硬盘或分区,请参考 ceph-deploy osd 。登录到 Ceph 节点、并给 OSD 守护进程创建一个目录。

    ssh node2
    sudo mkdir /var/local/osd0
    exit
    
    ssh node3
    sudo mkdir /var/local/osd1
    exit

    然后,从管理节点执行 ceph-deploy 来准备 OSD 。

    ceph-deploy osd prepare {ceph-node}:/path/to/directory

    例如:

    ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1

    最后,激活 OSD 。

    ceph-deploy osd activate {ceph-node}:/path/to/directory

    例如:

    ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
  2. ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。

    ceph-deploy admin {admin-node} {ceph-node}

    例如:

    ceph-deploy admin admin-node node1 node2 node3

    ceph-deploy 和本地管理主机( admin-node )通信时,必须通过主机名可达。必要时可修改 /etc/hosts ,加入管理主机的名字。

  3. 确保你对 ceph.client.admin.keyring 有正确的操作权限。

    sudo chmod +r /etc/ceph/ceph.client.admin.keyring
  4. 检查集群的健康状况。

    ceph health

    等 peering 完成后,集群应该达到 active + clean 状态。

操作集群

ceph-deploy 部署完成后它会自动启动集群。要在 Debian/Ubuntu 发行版下操作集群守护进程,参见用 Upstart 运行 Ceph ;要在 CentOS 、 Red Hat 、 Fedora 和 SLES 下操作集群守护进程,参见用 sysvinit 运行 Ceph

关于 peering 和集群健康状况请参见监控集群;关于 OSD 守护进程和归置组( placement group )健康状况参见监控 OSD 和归置组;关于用户管理请参见用户管理

Ceph 集群部署完成后,你可以尝试一下管理功能、 rados 对象存储命令,之后可以继续快速入门手册,了解 Ceph 块设备、 Ceph 文件系统和 Ceph 对象网关。

扩展集群(扩容)

一个基本的集群启动并开始运行后,下一步就是扩展集群。在 node1 上添加一个 OSD 守护进程和一个元数据服务器。然后分别在 node2node3 上添加 Ceph Monitor ,以形成 Monitors 的法定人数。

ditaa-c5495708ed5fc570308611ac28339196614c050a.png

添加 OSD

你运行的这个三节点集群只是用于演示的,把 OSD 添加到 monitor 节点就行。

ssh node1
sudo mkdir /var/local/osd2
exit

然后,从 ceph-deploy 节点准备 OSD 。

ceph-deploy osd prepare {ceph-node}:/path/to/directory

例如:

ceph-deploy osd prepare node1:/var/local/osd2

最后,激活 OSD 。

ceph-deploy osd activate {ceph-node}:/path/to/directory

例如:

ceph-deploy osd activate node1:/var/local/osd2

一旦你新加了 OSD , Ceph 集群就开始重均衡,把归置组迁移到新 OSD 。可以用下面的 ceph 命令观察此过程:

ceph -w

你应该能看到归置组状态从 active + clean 变为 active ,还有一些降级的对象;迁移完成后又会回到 active + clean 状态( Control-C 退出)。

添加元数据服务器

至少需要一个元数据服务器才能使用 CephFS ,执行下列命令创建元数据服务器:

ceph-deploy mds create {ceph-node}

例如:

ceph-deploy mds create node1

Note

当前生产环境下的 Ceph 只能运行一个元数据服务器。你可以配置多个,但现在我们还不会为多个元数据服务器的集群提供商业支持。

添加 RGW 例程

要使用 Ceph 的 Ceph 对象网关组件,必须部署 RGW 例程。用下列方法创建新 RGW 例程:

ceph-deploy rgw create {gateway-node}

例如:

ceph-deploy rgw create node1

Note

这个功能是从 Hammer 版和 ceph-deploy v1.5.23 才开始有的。

RGW 例程默认会监听 7480 端口,可以更改该节点 ceph.conf 内与 RGW 相关的配置,如下:

[client]
rgw frontends = civetweb port=80

用的是 IPv6 地址的话:

[client]
rgw frontends = civetweb port=[::]:80
添加 MONITORS

Ceph 存储集群需要至少一个 Monitor 才能运行。为达到高可用,典型的 Ceph 存储集群会运行多个 Monitors,这样在单个 Monitor 失败时不会影响 Ceph 存储集群的可用性。Ceph 使用 PASOX 算法,此算法要求有多半 monitors(即 1 、 2:3 、 3:4 、 3:5 、 4:6 等 )形成法定人数。

新增两个监视器到 Ceph 集群。

ceph-deploy mon add {ceph-node}

例如:

ceph-deploy mon add node2 node3

新增 Monitor 后,Ceph 会自动开始同步并形成法定人数。你可以用下面的命令检查法定人数状态:

ceph quorum_status --format json-pretty

Tip

当你的 Ceph 集群运行着多个 monitor 时,各 monitor 主机上都应该配置 NTP ,而且要确保这些 monitor 位于 NTP 服务的同一级。

存入/检出对象数据

要把对象存入 Ceph 存储集群,客户端必须做到:

  1. 指定对象名
  2. 指定存储池

Ceph 客户端检出最新集群运行图,用 CRUSH 算法计算出如何把对象映射到归置组,然后动态地计算如何把归置组分配到 OSD 。要定位对象,只需要对象名和存储池名字即可,例如:

ceph osd map {poolname} {object-name}

练习:定位某个对象

作为练习,我们先创建一个对象,用 rados put 命令加上对象名、一个有数据的测试文件路径、并指定存储池。例如:

echo {Test-data} > testfile.txt
rados put {object-name} {file-path} --pool=data
rados put test-object-1 testfile.txt --pool=data

为确认 Ceph 存储集群存储了此对象,可执行:

rados -p data ls

现在,定位对象:

ceph osd map {pool-name} {object-name}
ceph osd map data test-object-1

Ceph 应该会输出对象的位置,例如:

osdmap e537 pool 'data' (0) object 'test-object-1' -> pg 0.d1743484 (0.4) -> up [1,0] acting [1,0]

用``rados rm`` 命令可删除此测试对象,例如:

rados rm test-object-1 --pool=data

随着集群的运行,对象位置可能会动态改变。 Ceph 有动态均衡机制,无需手动干预即可完成。

 

块设备快速入门

要实践本手册,你必须先完成存储集群快速入门 ,并确保 Ceph 存储集群处于 active + clean 状态,这样才能使用 Ceph 块设备

Note

Ceph 块设备也叫 RBDRADOS 块设备。

ditaa-b589d75957ebeea41fbc4c3af8afcf527d0ed169.png

你可以在虚拟机上运行 ceph-client 节点,但是不能在与 Ceph 存储集群(除非它们也用 VM )相同的物理节点上执行下列步骤。详情见 FAQ

安装 CEPH
  1. 确认你使用了合适的内核版本,详情见操作系统推荐

    lsb_release -a
    uname -r
    
  2. 在管理节点上,通过 ceph-deploy 把 Ceph 安装到 ceph-client 节点。

    ceph-deploy install ceph-client
  3. 在管理节点上,用 ceph-deploy 把 Ceph 配置文件和 ceph.client.admin.keyring 拷贝到 ceph-client

    ceph-deploy admin ceph-client

    ceph-deploy 工具会把密钥环复制到 /etc/ceph 目录,要确保此密钥环文件有读权限(如 sudo chmod +r /etc/ceph/ceph.client.admin.keyring )。

配置块设备
  1. ceph-client 节点上创建一个块设备 image 。

    rbd create foo --size 4096 [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
  2. ceph-client 节点上,把 image 映射为块设备。

    sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
  3. ceph-client 节点上,创建文件系统后就可以使用块设备了。

    sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo

    此命令可能耗时较长。

  4. ceph-client 节点上挂载此文件系统。

    sudo mkdir /mnt/ceph-block-device
    sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
    cd /mnt/ceph-block-device

 

 

CEPH 文件系统快速入门

开始实践 Ceph 文件系统入门手册前,必须先完成存储集群快速入门。在管理节点上完成此入门。

准备工作
  1. 确认你使用了合适的内核版本,详情见操作系统推荐

    lsb_release -a
    uname -r
    
  2. 在管理节点上,通过 ceph-deploy 把 Ceph 安装到 ceph-client 节点上。

    ceph-deploy install ceph-client
  3. 确保 Ceph 存储集群在运行,且处于 active + clean 状态。同时,确保至少有一个 Ceph 元数据服务器在运行。

    ceph -s [-m {monitor-ip-address}] [-k {path/to/ceph.client.admin.keyring}]
创建文件系统

虽然已创建了元数据服务器(存储集群快速入门),但如果你没有创建存储池和文件系统,它是不会变为活动状态的。参见 创建 Ceph 文件系统

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
创建密钥文件

Ceph 存储集群默认启用认证,你应该有个包含密钥的配置文件(但不是密钥环本身)。用下述方法获取某一用户的密钥:

  1. 在密钥环文件中找到与某用户对应的密钥,例如:

    cat ceph.client.admin.keyring
  2. 找到用于挂载 Ceph 文件系统的用户,复制其密钥。大概看起来如下所示:

    [client.admin]
       key = AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
  3. 打开文本编辑器。

  4. 把密钥粘帖进去,大概像这样:

    AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
  5. 保存文件,并把其用户名 name 作为一个属性(如 admin.secret )。

  6. 确保此文件对用户有合适的权限,但对其他用户不可见。

内核驱动

把 Ceph FS 挂载为内核驱动。

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

Ceph 存储集群默认需要认证,所以挂载时需要指定用户名 name创建密钥文件一节中创建的密钥文件 secretfile ,例如:

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

Note

从管理节点而非服务器节点挂载 Ceph FS 文件系统,详情见 FAQ

用户空间文件系统( FUSE )

把 Ceph FS 挂载为用户空间文件系统( FUSE )。

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

Ceph 存储集群默认要求认证,需指定相应的密钥环文件,除非它在默认位置(即 /etc/ceph ):

sudo ceph-fuse -k ./ceph.client.admin.keyring -m 192.168.0.1:6789 ~/mycephfs

 

CEPH 对象存储快速入门

从 firefly(v0.80)起,Ceph 存储集群显著地简化了 Ceph 对象网关的安装和配置。网关守护进程内嵌了 Civetweb,无需额外安装 web 服务器或配置 FastCGI。此外,可以直接 使用 ceph-deploy 来安装网关软件包、生成密钥、配置数据目录以及创建一个网关实例。

Tip

Civetweb 默认使用 7480 端口。要么直接打开 7480 端口,要么在你的 Ceph 配置文件中设置首选端口(例如 80 端口)。

要使用 Ceph 对象网关,请执行下列步骤:

安装 CEPH 对象网关
  1. client-node 上执行预安装步骤。如果你打算使用 Civetweb 的默认端口 7480 ,必须通过 firewall-cmdiptables 来打开它。详情见预检

  2. 从管理节点的工作目录,在 client-node 上安装 Ceph 对象网关软件包。例如:

    ceph-deploy install --rgw <client-node> [<client-node> ...]
新建 CEPH 对象网关实例

从管理节点的工作目录,在 client-node 上新建一个 Ceph 对象网关实例。例如:

ceph-deploy rgw create

一旦网关开始运行,你就可以通过 7480 端口来访问它(比如 http://client-node:7480 )。

配置 CEPH 对象网关实例
  1. 通过修改 Ceph 配置文件可以更改默认端口(比如改成 80 )。增加名为 [client.rgw.<client-node>] 的小节,把 <client-node> 替换成你自己 Ceph 客户端节点的短名称(即 hostname -s 的输出)。例如,你的节点名就是 client-node ,在 [global] 节后增加一个类似于下面的小节:

    [client.rgw.client-node]
    rgw_frontends = "civetweb port=80"
    

    Note

    确保在 rgw_frontends 键值对的 port=<port-number> 中没有空格。

    Important

    如果你打算使用 80 端口,确保 Apache 服务器没有在使用该端口,否则会和 Civetweb 冲突。出现这种情况时我们建议移除 Apache 服务。

  2. 为了使新端口的设置生效,需要重启 Ceph 对象网关。在 RHEL 7 和 Fedora 上 ,执行:

    sudo systemctl restart ceph-radosgw.service

    在 RHEL 6 和 Ubuntu 上,执行:

    sudo service radosgw restart id=rgw.<short-hostname>
  3. 最后,检查节点的防火墙,确保你所选用的端口(例如 80 端口)处于开放状态。如果没有,把该端口加入放行规则并重载防火墙的配置。例如:

    sudo firewall-cmd --list-all sudo firewall-cmd --zone=public --add-port
    80/tcp --permanent
    sudo firewall-cmd --reload

    关于使用 firewall-cmdiptables 配置防火墙的详细信息,请参阅预检

    你应该可以生成一个未授权的请求,并收到应答。例如,一个如下不带参数的请求:

    http://<client-node>:80

    应该收到这样的应答:

    <?xml version="1.0" encoding="UTF-8"?>
    <ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      <Owner>
        <ID>anonymous</ID>
        <DisplayName></DisplayName>
      </Owner>
      <Buckets>
      </Buckets>
    </ListAllMyBucketsResult>

转载于:https://www.cnblogs.com/zywu-king/p/9064032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值