飞前检查

ceph-deploy 工具在一台管理节点上的一个目录下完成所有操作。任何一台有网络、较新的 python 环境、和 ssh (如 Linux )的主机都可以。

在下面的描述中节点代表一台机器。

ceph-deploy 的安装

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

Debian/Ubuntu

在 Debian 和 Ubuntu 发行版上,可以执行下列步骤:

  1. 添加发布密钥:

    wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
    
  2. 添加 Ceph 软件包源,用稳定版 Ceph (如 luminous )替换掉 {ceph-stable-release} ,然后运行命令。例如:

    echo deb https://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
    
  3. 更新你的仓库,而后安装 ceph-deploy

    sudo apt-get update
    sudo apt-get install ceph-deploy
    

Note

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

RHEL/CentOS

对于 CentOS 7 ,可执行下列步骤:

  1. 在 Red Hat Enterprise Linux 7 上,用 subscription-manager 注册主机,核对你的订阅,然后启用 Extras 软件库,以解决软件包依赖。例如:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  2. 安装并启用企业 Linux (EPEL) 附加软件包:

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

    背景信息请参考 EPEL 百科

  3. 用下列命令,把 Ceph 软件库写入你的 yum 配置文件 /etc/yum.repos.d/ceph.repo 。用一个 Ceph 稳定版(例如 luminous )替换掉 {ceph-stable-release} 。例如:

    cat << EOM > /etc/yum.repos.d/ceph.repo
    [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
    EOM
    
  4. 更新软件库并安装 ceph-deploy

    sudo yum update && sudo yum install ceph-deploy
    

Note

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

openSUSE

Ceph 项目现在不给 openSUSE 发布 RPM 了,但是默认的更新库里自带 Ceph 稳定版,所以安装很简单:

sudo zypper install ceph
sudo zypper install ceph-deploy

如果你的发行版过时了,可以向 https://bugzilla.opensuse.org/index.cgi 反映,另外也可以试试下面的库:

  1. Hammer:

    https://software.opensuse.org/download.html?project=filesystems%3Aceph%3Ahammer&package=ceph
    
  2. Jewel:

    https://software.opensuse.org/download.html?project=filesystems%3Aceph%3Ajewel&package=ceph
    

Ceph 节点安装

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

安装 NTP

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

在 CentOS / RHEL 上可执行:

sudo yum install ntp ntpdate ntp-doc

在 Debian / Ubuntu 上可执行:

sudo apt install ntp

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

安装 SSH 服务器

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

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

    sudo apt install openssh-server
    

    或者

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

创建部署 Ceph 的用户

ceph-deploy 工具必须以普通用户登录,且此用户拥有无密码使用 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 会尝试给初始监视器们生成 SSH 密钥对。

  1. 生成 SSH 密钥对,但不要用 sudoroot 用户。口令为空:

    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 进程通过网络互联并向监视器集群报告,如果网络默认为 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 监视器之间默认用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。详情见网络配置参考。 Ceph OSD 能利用多个网络连接与客户端、监视器、其他副本 OSD 、其它心跳 OSD 分别进行通信。

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

对于 RHEL 7 上的 firewalld ,可把服务加入公共域,监视器节点上应该加 ceph-mon 服务、 OSD 和 MDS 上加 ceph 服务,并且要配置为永久规则,这样重启后规则仍有效。

例如,在监视器上:

sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent

在 OSD 和 MDS 主机上:

sudo firewall-cmd --zone=public --add-service=ceph --permanent

--permanent 选项配置完 firewalld 后,无需重启就可以让它立即生效:

sudo firewall-cmd --reload

若用 iptables 命令,要放通 Ceph 监视器所用的 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

总结

快速入门的飞前部分到此结束,请继续存储集群快速入门