开篇常例 - 概述
Ceph 是一个广泛使用的开源存储平台。 它提供高性能、可靠性和可扩展性。 Ceph 分布式存储系统提供了对象存储、块存储和文件级存储。 Ceph 旨在提供无单点故障的分布式存储系统。
在本教程中,将通过 ceph-adm 方式在 CentOS 7 上安装和构建 Ceph 集群。该实验的 Ceph 集群需要以下 Ceph 组件:
- Ceph OSD (ceph-osd) - 处理数据存储、数据复制和恢复;通常一个Ceph集群至少需要两台 OSD 服务器 。
- Ceph Monitor (ceph-mon) - 监视集群状态、OSD 映射和 CRUSH 映射,我们在这里与 cephadm 或 OSD 公用一个节点
- Ceph 元数据服务器 (ceph-mds) - 这是使用 CephFS 所需的组件。
有了上面的条件,我们实验环境所需要的节点如下:
- 三台服务器节点,CentOS 7
注:CentOS 7 可安装最高级别的 ceph 版本就是 O 版
本教程中的服务器将使用以下主机名和 IP 地址:
主机名 | IP地址 | 作用 |
---|---|---|
cephadmin | 10.0.0.20 | 作为 ceph 管理节点,以管理与部署 ceph 集群 |
osd01 | 10.0.0.21 | |
osd02 | 10.0.0.22 | |
any | any | 作为 Ceph Client 的角色 |
注:所有 OSD 节点都需要两个分区,一个根(/)分区和一个空分区,稍后用作 Ceph 数据存储。
REQUIREMENTS
使用 cephadm 安装 ceph 集群,所需要的先决条件如下:
必要条件:
- Python 3,因为 cephadm 是一个 python3 脚本,所以需要每个节点都需要安装 python3
- Systemd
- Podman or Docker:cephadm 安装的集群是一种以 “容器方式” 运行在对应的 ceph node 之上
- LVM2:ceph OSD 是通过 LVM 来使用的,所以需要在每个 OSD 节点之上安装 LVM2
非必要条件:
- chrony or NTP:ceph 强依赖每个节点之上的时间
- Internet
- 域名解析:ceph 集群对于 ceph node 来说是通过
hostname.random_str
识别的的
Step 1 配置节点
此步骤,将配置所有 3 个节点,为安装 Ceph 集群做好准备。 建议在所有节点上按照并运行以下所有命令。 并确保所有节点上都安装了 ssh-server。
创建ceph用户(可选)
|
|
创建新用户后,我们需要为“cephuser” 配置 sudo。 他必须能够以 root 身份运行命令并无需密码即可获得 root 权限。
运行以下命令为用户创建 sudoers 文件并使用 sed 编辑 /etc/sudoers 文件。
|
|
Note:上述 通过 ceph-deploy 需要配置,cephadm 中没有强制
安装配置 NTP 服务(可选)
因为分布式存储需要依赖时间,所以需要对所有 OSD 节点的时间保持一致,这里时间同步的软件可以随意选择,
|
|
可以不准备,随意启动一个服务即可,否则安装会出现如下提示
|
|
关闭 SELInux
在所有 Ceph Node 节点上关闭 SELInux,可以根据下面命令使用 sed 操作
|
|
配置 Hosts 文件
这里主机名可以根据自己选择进行,如果你有 DNS 服务,那么也可以通过注册在 DNS 内的服务进行
|
|
安装依赖
|
|
Step2 下载 cephadm 并 修改 cephadm 镜像地址
获取 cephadm 脚本
步骤参考了 ceph 官方安装手册 [1] ,需要注意的是 cephadm 脚本也是需要按照版本来的
|
|
这个步骤主要是为了使 cephadm 可以正常的拉去 ceph 镜像,你可以通过 docker load
方式导入到 ceph node 之上,但是 ceph 镜像必须通过私有镜像进行拉取(存在 reposig 认证)其他 ceph 组件(prometheus, node-exporter..)可以通过 docker load
导入
cephadm 最上面几行写明了要拉去镜像的镜像仓库地址,可以在有互联网机器上下载好,push 到私有镜像仓库中,如果没有私有镜像仓库,可以 run 一个 docker registry ,这个步骤是强制的;其他组件是可以通过 docker load
方式获得
|
|
Run docker registry
拉去 docker registry
|
|
镜像保存路径放置在当前工作目录中
Note: 如果你没有独立的私有镜像仓库,那么请保留 docker registry,直到你不对 ceph 集群进行扩展
执行下面命令,运行 docker registry
|
|
在所有 ceph node 之上执行下面命令,需要自行替换 registry_host
部分
现象:https://xxx:5000/v2/: http: server gave HTTP response to HTTPS client
|
|
Step 3 引导一个新集群
在上面步骤都完成后,可以直接去引导一个新集群了
可以选择性执行下面步骤
这里是安装 ceph 客户端时需要用到的,例如 ceph-common, ceph-fuse 都会用到这些
|
|
cephadm 命令能够:
- 引导一个新集群
- 使用 ceph cli 启动容器化的 shell
- 用于调试容器化的 ceph daemon
O 版的安装命令是通过 github 下载,要注意的是,每个版本号的 cephadm 命令不通用
|
|
开始引导一个新的 ceph 集群
创建 Ceph 集群的第一步是在 Ceph 集群的管理几点上执行命令 cephadm bootstrap
,这个命令的行为会创建 Ceph 集群中的第一个 “monitor” 守护进程,这需要提供一个 “IP地址” 而不可以是 “域名”。
这里将 ceph monitor 部署在管理节点上了,以节省 Node 数量
|
|
成功后会看到 ceph dashboard 的界面,默认密码会输出到控制台,第一次登陆会要求修改默认密码
在安装将生成一个最小的 ceph.conf
仅适用于引导阶段的配置文件,通过进入 mon 容器查看
|
|
向 ceph 集群导入 osd node
向每个 node 导入 ssh key,下面的操作是通过进入管理容器执行的
|
|
添加一个主机到 ceph 集群
|
|
部署一个新的 mon,你可以给新加入的主机打上标签
|
|
向集群部署新的组件
|
|
部署 osd damon 在新的主机之上
|
|
这是可以列出正在管理的服务器 cephadm
使用 host ls
命令:
|
|
到此,如果你只使用 RDB 块存储,这里已经部署完成了,如果需要选择使用 文件存储 CephFS,或者对象存储 RGW,可以在另外部署相应的组件,部署的组件是根据按需使用进行部署
osd device 命令也可以列出对应的设备
|
|
在 Ceph 中一切存储的基础都是基于 RADOS 集群
Troubleshooting
TypeError: init() missing 2 required positional arguments: ‘hostname’ and ‘addr’
现象:实际上输入了 hostname 和 addr 也是出现这个问题
|
|
首先先将公钥分发到对应的 CEPH NODE 之上
|
|
我解决的方式:实际上版本不对,更新版本就恢复了
Reference
[1] install-cephadm
[2] Object Request Broker Architecture
[3] Cooperation for Open Systems Interconnection Networking in Europe