centos 7 使用 ceph-deploy 快速部署 ceph 集群

2020/09/09 posted in  ceph 存储

一、安装 CEPH 部署工具

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

1、配置yum源

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*

echo '[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc' > /etc/yum.repos.d/ceph.repo

echo '[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-infernalis/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-infernalis/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-infernalis/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1' > /etc/yum.repos.d/ceph.repo

yum clean all
yum makecache

2、安装ceph-deploy

 yum install -y ceph-deploy
 ```
 
## 二、CEPH 节点环境预检及配置

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

#### 1、安装 NTP

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

#### 2、安装 SSH 服务器

``` shell
yum install -y openssh-server

确保所有 Ceph 节点上的 SSH 服务器都在运行。

3、创建部署 CEPH 的用户

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

在各 Ceph 节点创建新用户。确保各 Ceph 节点上新创建的用户都有 sudo 权限。

username=ceph-deploy
sudo useradd -d /home/${username} -m ${username}
sudo passwd ${username}
echo "${username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${username}
chmod 0440 /etc/sudoers.d/${username}

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

生成 SSH 密钥对,但不要用 sudo 或 root 用户。提示 “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.

把公钥拷贝到各 Ceph 节点,把下列命令中的 {username} 替换成前面创建部署 Ceph 的用户里的用户名。

配置hosts, 配置之前修改每台机器的主机名,例如:

hostnamectl set-hostname node1
echo '172.66.1.12 node1
172.66.1.13 node2
172.66.1.14 node3
' >> /etc/hosts
username=ceph-deploy
ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3

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

Host node1
   Hostname node1
   User ceph-deploy
Host node2
   Hostname node2
   User ceph-deploy
Host node3
   Hostname node3
   User ceph-deploy

同时,部署前,确保firewalld, selinux关闭。

4、优先级/首选项

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

sudo yum install -y yum-plugin-priorities

三、集群安装

http://docs.ceph.org.cn/start/quick-ceph-deploy/

1、创建集群

ceph-deploy new node1

2、安装ceph

ceph-deploy install node1
ceph-deploy mon create-initial

执行

ceph-deploy osd prepare node2:/dev/vdc
ceph-deploy osd prepare node2:/dev/vdc node3:/dev/vdc

报错

usage: ceph-deploy osd [-h] {list,create} ...
ceph-deploy osd: error: argument subcommand: invalid choice: 'prepare' (choose from 'list', 'create')

ceph-deploy 2.0.1竟然没有prepare子命令, 坑真多。

然后执行

ceph-deploy osd create node2 --data /dev/vdc

遇到报错

ceph_deploy][ERROR ] ExecutableNotFound: Could not locate executable 'ceph-volume' make sure it is installed and available on node2

这个是因为ceph-Deploy的版本高了,需要卸载高版本,安装低版本(admin节点):

如下方法也能解决:

pip install ceph-deploy==1.5.39

最后执行下面命令成功

ceph-deploy osd prepare node2:/dev/vdc node3:/dev/vdc

这一步主要是为OSD做一些准备工作。

最后,激活 OSD:

ceph-deploy osd activate node2:/dev/vdc1 node3:/dev/vdc1

最后,类似的方法把node1也加进去,大功告成。

[root@node1 my-cluster]# ceph -s
    cluster 838f41b7-778e-43b1-b16d-99694af1df52
     health HEALTH_OK
     monmap e1: 1 mons at {node1=172.66.1.12:6789/0}
            election epoch 2, quorum 0 node1
     osdmap e13: 3 osds: 3 up, 3 in
            flags sortbitwise
      pgmap v23: 64 pgs, 1 pools, 0 bytes data, 0 objects
            100 MB used, 134 GB / 134 GB avail
                  64 active+clean

扩容操作

包括增加OSD和Monitor

增加Monitor

执行如下命令在node2上增加monitor

ceph-deploy mon add node2

出现如下错误

[node2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[node2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
解决方法:

通过上面日志可知ceph.conf配置文件中缺少public network的配置,在admin节点中,my-cluster目录下的ceph.conf的[global]下添加对应的网址:

[global]
fsid = b8b4aa68-d825-43e9-a60a-781c92fec20e
mon_initial_members = node1
mon_host = 192.168.197.154
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network =192.168.197.0/24

之后通过执行下面的命令把修改的配置推送至每个节点,否则提示error:

ceph-deploy --overwrite-conf config push node1 node2 node3

之后可以正常执行monitor添加命令了。

OSD扩容

OSD扩容主要分为两步:

  • 准备OSD, 即执行prepare命令
ceph-deploy osd prepare {ceph-node}:{device}

例如:

ceph-deploy osd prepare node1:/dev/vdc

最后,激活 OSD 。

  • 激活OSD, 即执行activate命令
ceph-deploy osd activate {ceph-node}:{device}

例如:

ceph-deploy osd activate node1:/dev/vdc

一旦你新加了 OSD , Ceph 集群就开始重均衡,把归置组迁移到新 OSD 。这时你可以看到归置组状态从 active + clean 变为 active,还有一些降级的对象;迁移完成后又会回到 active + clean 状态。

总结

手动成功部署一个ceph集群,完成了学习ceph的第一步。