Ceph-RadosGW-S3
概述
本文主要介绍 Ceph 对象存储网关的重要组件 Ceph Rados GateWay
名词解释
- RADOS: Reliable Autonomic Distributed Object Store可靠自动分布式对象存储
- OSD: Object Storage Device对象存储设备
- MOB: Ceph Monitor
- librados: 访问RADOS的库
- RBD: Rados Block Device RADOS块设备
- RGW: Rados Gate Way RADOS网关
- MDS: Meta Data Service Ceph元数据服务器
- CephFS: Ceph File System Ceph文件系统
- Pool: 池,RADOS以对象的形式将数据存储在池中,用来存储对象的逻辑分区
|
|
OSD 是一个守护进程。
|
|
MON 也是一个轻量级的守护进程。
|
|
MDS 是元数据服务器,只有 CephFS 有用。
PG placement groups 是一种对象的逻辑组合。
|
|
用ceph-deploy部署Ceph集群
|
|
CephFS
POSIX 兼容的分布式文件系统,使用 Ceh RADOS 存储数据,需要同时部署 MDS。使用 CephFS 有两种方式,使用本地内核驱动程序挂载 CephFS,或者使用 Ceph FUSE。
|
|
Ceph RGW
在 Ceph 集群,RADOS 网关会配置在于 MON 和 OSD 不同的机器删,也可以用 MON 机器来配置 RGW。
|
|
Ceph RGW部署
测试集群的部署。
|
|
没有安装 radosgw。
|
|
查看 Ceph 的配置。
|
|
补充一些 rgw 的配置。
|
|
执行命令启动 rgw。
|
|
查看没有找到 Ceph 的进程,看一下日志。
|
|
radosgw 创建用户和 Keyring,为网关服务器创建 Keyring:
|
|
为网关实例 client.radosgw.gateway 生成一个名称和 Key:
|
|
将 key 添加到 ceph storage cluster:
|
|
将key添加到ceph storage cluster:
|
|
创建 rgw 相关的pool,如果集群里本身有这个 pool 就可以放弃。
|
|
启动失败
|
|
日志如下。
|
|
|
|
S3集群管理
Ceph 命令。
- status
- start
- stop
- restart
- forcestop
Ceph 守护进程。
- mon
- osd
- mds
- ceph-radosgw
Ceph监控
|
|
s3cfg 如下。
|
|
测试集群地址
|
|
关于 Exporter,目前最需要的可能是 Rados 网关的监控,所以先解决这个问题。
- radosgw_usage_exporter这个可能不够用,但是先尝试
- 加个Nginx,这个可能复杂点,现在是用默认的civetweb来部署的
kevin 提出的几个问题。
9.81.3.100 这台机器 S3的客户端口,现在配置的是gamesafe的。可以直接用 100.117.152.2 这个是mds
radosgw-admin bucket stats –uid=gamesafe |egrep ‘size_kb_actual|num_objects’
GameAI 的 Ceph 集群配置文件
|
|
rgw 的池 pool
|
|
rgw 的模板配置,重点参考官方文档。
|
|
测试集群的 ceph.conf 配置文件。
|
|
civetweb 的日志例子。
|
|
Mac通过VirtualBox创建Ceph集群
|
|
如果我有一块多余的硬盘
硬盘目前是 Windows NT File System NTFS,所以 MacOS 是不能写,只能读的(确定吗?)。
如果要抹掉这个磁盘,可以参考下图。
抹掉之后,会重新在硬盘中创建文件系统。
如果要 Linux 虚拟机的磁盘,我猜是不能用 MacOS 相关的文件系统的,可能要选择 ext4。
这里可以看到,开创建就有800M内容,可能是之前的。
所以我们可以在安全性里,把级别调高。
可以看到,这次的抹掉过程中,有说到7次安全抹掉,这样的擦除方式,可以让磁盘的内容比较安全地删除,缺点就是擦的仔细,速度比较慢。
Ceph Dashboard 的比较
如果你的 Ceph 版本在 luminous 以上,那么官方的 dashboard 绝对是最好的选择,但是万一你的集群是陈年老 Ceph,还有各种为了业务稳定的借口下的不升级,那么要搞个 dashboard,无疑是很头疼的
当然了,Ceph 的这些统计数据很多都是通过 ceph 本身的命令可视化出来的,自己写个 web 通过前端来展示也不是不可以,但是换句话来说,这么简单的需求,自己做起来也 duck 可不必。所以经过一番 github 之后,找到几个方案可以临时用一下,下面也简单做个对比
ceph-dash,也挺久没更新了,四个月前有个 README.md 的更新,按我的理解,如果 ceph 相关的命令不变,这个项目应该还是可以用的。怎么说呢,这个可视化确实也就只有 ceph health status
这些展示,内容比较少
官方 Ceph dashboard 后端是用 python 写的。
最新方案
luminous 可以开启 dashboard
rgw 通过 prometheus-nginxlog-exporter 可以解析 Nginx 日志,还有一些正则可以去处理,然后通过 relabel
的配置,让其在指标数据上打上标签。
civetweb 没有在日志记录请求返回的时间,所以考虑用 Nginx 来替换,为了能给 Ceph RGW 加一个请求相关的监控,所以需要去解析日志,在 prometheus-nginxlog-exporter 中,通过配置文件,可以把标签和端口等设置好,然后让 prometheus 加上这个 endpoint 就可以拉出来数据了。
|
|
Nginx 日志。
|
|
prometheus-nginxlog-exporter 采集到的指标如下:
|
|
Ceph监控
目前 RGW 是通过通过默认的 civetweb 部署的,因为 civetweb 产生的日志比较简单,无法判断请求的成功/失败/时长等等信息,查了一下 civetweb 相关的配置,暂时没找到可以打出更多信息的配置方法,为了统计用户在读写 Bucket 时候的时延等指标,所以考虑用 Nginx 做一层转发,通过解析 access.log/error.log 来获取时序指标存到 Prometheus,最后通过 Grafana 展示。
下面是生产环境 civetweb 的日志。
确定需要收集的指标
Nginx 里可以配置日志的格式,Telegraf 的配置。
|
|
|
|
收集到指标的转换值。
radosgw-admin user info –uid=lingqu
nginx.conf 配置
|
|
telegraf.conf 配置。支持环境变量
|
|
|
|