ceph
一. 存储分类
1. 本地存储的文件系统
- ext3
- ext4
- efs
- ntfs
2. 网络存储
- nfs 网络文件系统
- hdfs 分布式网络文件系统
- glusterfs 分布式网络文件系统
3. 传统存储
(1). DAS
- SAS, SATA, SCSI, IDE, USB, 无论是那种接口, 都是存储设备驱动下的磁盘设备, 而磁盘设备其实就是一种存储, 这种存储是直接接入主板总线上去的
(2). NAS
- NFS, CIFS, FTP, 几乎所有的网线存储设备基本上都是以文件系统样式进行使用, 无法进一步格式化操作
(3). SAN
- SCSI协议, FC SAN, ISCSI, 基于SAN方式提供给客户端操作系统的是一种块设备接口, 这些设备间主要通过SCSI协议来完成正常的通信, SCSI的结构类似于TCP/TP协议, 也有很多层, 但是SCSI协议主要是用来进行存储数据操作的, 既然是分层方式实现, 那就是说, 有部分层可以被替代, 比如物理层基于FC方式来实现, 就形成了FCSAN, 如果基于以太网方式来传递数据, 就形成了ISCSI模式
二. 分布式存储分类
1. Hadoop HDFS
- 大数据分布式文件系统
- HDFS(Hadoop Distributed File System) 是一个分布式文件系统,是hadoop生态系统的一个重要组成部分,是hadoop中的存储组件,HDFS是一个高度容错性的系统,HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.
(1). HDFS优点
- 高容错性
- 数据自动保存多个副本
- 副本丢失后,自动恢复
- 良好的数据访问机制
- 一次性写入,多次读取,保证数据一致性
- 适合大数据文件存储
- TB,甚至PB级别的数据
- 扩展能力强
(2). HDFS缺点
- 低延迟数据访问
- 难以应付毫秒级别以下的应用
- 海量小文件存储
- 占用NameNode大量内存
- 一个文件只能有一个写入者
- 仅支持append(追加)
2. OpenStack
- 对象存储Swift
三. ceph特性
-
单机是不能实现ceph的, ceph是一堆服务器. 是需要成本支持以及维护成本
-
Ceph
是一个统一的分布式存储系统,最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),随后贡献给开源社区。其设计初衷是提供较好的性能、可靠性和可扩展性。在经过多年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储 -
Ceph的底层是RADOS,RADOS本身也是分布式存储系统,Ceph所有的存储功能都是基于RADOS实现的。RADOS采用C++开发,所提供的原生Librados API包括C和C++两种。Ceph的上层应用调用本机上的librados API,再由后者通过socket与RADOS集群中的其他节点通信并完成各种操作。
-
RADOS GateWay、RBD其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。其中RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。RBD则提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建volume。目前,RedHat已经将RBD驱动集成在KVM/QEMU中,以提供虚拟机访问性能。这两种方式目前在云计算中应用的比较多。
-
CephFS则提供了POSIX接口,用户可直接通过客户端挂载使用。它是内核态的程序,所有无需调用用户空间的librados库。它通过内核中的net模块来与RADOS进行交互
-
高性能
-
- 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高
- 能够支持上千个存储节点的规模。支持TB到PB级的数据
- 高可用
-
- 副本数可以灵活控制
-
- 支持故障域分隔,数据强一致性
- 多种故障场景自动进行修复自愈
- 没有单点故障,自动管理
- 高扩展性
-
- 去中心化
- 扩展灵活
- 随着节点增加,性能线性增长
- 特性丰富
-
- 支持三种存储接口:对象存储,块存储,文件存储
- 支持自定义接口,支持多种语言驱动
(一). ceph组件
ceph
支持三种调用接口, 这三种接口可以一同使用- 块存储
- 文件系统存储
- 对象存储
- ceph生产环境一定要选择万兆网络以上, 集群网络和公共网络分离,
Monitor
,MDS
要与OSD
分离部署在不同的机器上,OSD
使用SATA即可
1. Ceph OSD
- 全称是Object Storage Device,主要功能是存储数据,处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给Ceph Monitor,。例如ceph OSD心跳等。一个Ceph的存储集群,至少两个Ceph OSD来实现 active + clean健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整)。注意:每一个Disk、分区都可以成为一个OSD, 也叫元数据服务器, 处理数据复制, 恢复, 重新平衡, 并通过检查其他
ceph OSD
的心跳来向ceph Monitor
和Manages
提供一些监控信息, 本质上Ceph OSD
就是一个个host主机上的存储磁盘, 真正提供存储空间
2. Ceph Monitor
- Ceph Monitor是Ceph的监控器,是核心组件, 主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map、OSD map、PG(Placement Group)map和CRUSH map, 维护集群状态的映射, 至少需要三个Monitor才能实现高可用性, 基于paxos协议实现节点间的信息同步
3. Ceph MDS
- 全称是Ceph Metadata Server,主要保存的是Ceph文件系统(File System)的元数据(metadata), 注意:ceph块存储和ceph的对象存储都不需要Ceph MDS。Ceph MDS为基于POSIX文件系统的用户提供一些基础命令。例如:ls、find等命令, 本质上
Ceph MDS
4. Manages
- ceph管理器, 负责跟踪运行时指标和ceph集群当前的状态, 包括存储利用率, 当前性能指标和系统负载, 基于Python来管理和公开ceph集群信息, 包括基于web的ceph仪表盘和TEST API, 至少需要2个Manages来实现高可用性, 基于
raft
协议实现节点间的信息同步
5. ceph网络模型
- ceph生产环境一般分为两个网段
- 公有网段: 用于用户的数据通信
- 集群网段: 用于集群内部的通信
6. PG
- 全称Placement Groups,是一个逻辑的概念,一个PG包含多个OSD, 引入PG这一层其实是为了更好的分配数据和定位数据
7. RGW
- RGW 全称为Rados GateWay, 是Ceph用于对象存储网关,用于向客户端应用程序提供存储界面,提供RestFul API 接口
8. 版本选择
- x.0.z 开发版本
- x.1.z 候选版
- x.2.z 稳定版, 修正版
说明: x是大版本, z是小版本
- 我选择是16.2.8版本的Pacific版本
(二). 原理
- ceph支持三种存储,块存储, 文件系统存储, 对象存储为:
RBD
,CephFS
,Object Gateways
, 但是数据无论是从三个接口哪一种写入的,最终都要切分成对象存储到底层的RADOS
中。逻辑上通过算法先映射到PG上,最终存储进OSD节点里
四. ceph部署
- 安装是有点复杂的
(一). 环境准备
- 每个节点必须要多添加一个磁盘, client节点, 也就是cong-4可以不用添加
主机名 | 说明 | IP |
---|---|---|
cong-1 | manage, osd, monitor | 192.168.100.11 |
cong-2 | osd | 192.168.100.12 |
cong-3 | osd | 192.168.100.13 |
cong-4 | client | 192.168.100.14 |
sh
# 查看是否有新加入的磁盘
lsblk
sh
# 关闭防火墙,selinux略
# 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 时间同步, 启动时钟同步,手动同步,必须做
yum -y install chrony; systemctl enable chronyd --now; timedatectl set-ntp true; chronyc -a makestep
# chrony配置文件
vim /etc/chrony.conf
# 管理节点秘钥,并推送到其他节点,免密登录
ssh-keygen
1. ceph源
- 所有节点
sh
cat >>/etc/yum.repos.d/ceph.repo<<EOF
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
EOF
# 安装其他工具
yum -y install epel-release yum-plugin-priorities yum-utils ntpdate
2. ceph安装
- ceph官方退出了一个用python写的
ceph-deploy
的工具来安装集群
sh
# ceph安装, 可以直接安装
yum -y install ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs yum-plugin-priorities
# 也可以下载到本地,创建ceph目录
mkdir /root/ceph/
yum -y install --downloadonly --downloaddir=/root/ceph/ ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs
# 如果是下载到本地直接这样安装
cd /root/ceph/
yum -y localinstall *rpm
(二). 配置集群
1. 创建集群
-
在
cong-1
上 -
在
/etc/ceph
操作, 创建一个新的集群, 并设置cong-1为monitor
节点
sh
# 创建一个集群,集群名字为cong-1
cd /etc/ceph
[root@cong-1 /etc/ceph]# ceph-deploy new cong-1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy new cong-1
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] func : <function new at 0x7f255c53a2a8>
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f255c5615f0>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] ssh_copykey : True
[ceph_deploy.cli][INFO ] mon : ['cong-1']
[ceph_deploy.cli][INFO ] public_network : None
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster_network : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] fsid : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO ] making sure passwordless SSH succeeds
[cong-1][DEBUG ] connected to host: cong-1
[cong-1][DEBUG ] detect platform information from remote host
[cong-1][DEBUG ] detect machine type
[cong-1][DEBUG ] find the location of an executable
[cong-1][INFO ] Running command: /usr/sbin/ip link show
[cong-1][INFO ] Running command: /usr/sbin/ip addr show
[cong-1][DEBUG ] IP addresses found: [u'192.168.100.11']
[ceph_deploy.new][DEBUG ] Resolving host cong-1
[ceph_deploy.new][DEBUG ] Monitor cong-1 at 192.168.100.11
[ceph_deploy.new][DEBUG ] Monitor initial members are ['cong-1']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.100.11']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
# 创建集群后,多了些文件
[root@cong-1 /etc/ceph]# ll
总用量 16
-rw-r--r-- 1 root root 198 6月 8 22:13 ceph.conf
-rw-r--r-- 1 root root 2933 6月 8 22:13 ceph-deploy-ceph.log
-rw------- 1 root root 73 6月 8 22:13 ceph.mon.keyring
-rw-r--r-- 1 root root 92 1月 31 2020 rbdmap
# ceph配置文件最后加一行,他的意思是osd的数量为2,但是我们集群是有3个osd,为什么配置数量为2呢,因为ceph的crush算法,如果有一个osd故障了,通过这个算法能将故障的osd踢出掉,将另一个填充进来,通过分布式一致性算法进行同步,形成活动清除状态 active + clean
[root@cong-1 /etc/ceph]# vim ceph.com
osd_pool_default_size = 2
2. 安装monitor
- 在
cong-1
上
sh
[root@cong-1 /etc/ceph]# ceph-deploy mon create cong-1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy mon create cong-1
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : create
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_
3. 收集节点的keyring文件
sh
[root@cong-1 /etc/ceph]# ceph-deploy gatherkeys cong-1
# 查看文件, 创建出来的是.keyring的文件,也就是一些凭证文件,可以cat一下,其中client.admin.keyring是连接ceph集群的admin账号秘钥
[root@cong-1 /etc/ceph]# ll
总用量 48
-rw------- 1 root root 71 6月 8 22:29 ceph.bootstrap-mds.keyring
-rw------- 1 root root 71 6月 8 22:29 ceph.bootstrap-mgr.keyring
-rw------- 1 root root 71 6月 8 22:29 ceph.bootstrap-osd.keyring
-rw------- 1 root root 71 6月 8 22:30 ceph.bootstrap-rgw.keyring
-rw------- 1 root root 63 6月 8 22:29 ceph.client.admin.keyring
-rw-r--r-- 1 root root 223 6月 8 22:26 ceph.conf
-rw-r--r-- 1 root root 15544 6月 8 22:30 ceph-deploy-ceph.log
-rw------- 1 root root 73 6月 8 22:13 ceph.mon.keyring
-rw-r--r-- 1 root root 92 1月 31 2020 rbdmap
4. 部署osd服务
-
cong-1上执行即可
-
ceph12部署osd格式化命令和之前的不同, 添加完硬盘直接使用,不要分区
sh
# 为了保证磁盘的感觉,先提前清理下磁盘
[root@cong-1 /etc/ceph]# ceph-deploy disk zap cong-1 /dev/sdb
[root@cong-1 /etc/ceph]# ceph-deploy disk zap cong-2 /dev/sdb
[root@cong-1 /etc/ceph]# ceph-deploy disk zap cong-3 /dev/sdb
sh
# 添加osd节点
[root@cong-1 /etc/ceph]# ceph-deploy osd create cong-1 --data /dev/sdb
[root@cong-1 /etc/ceph]# ceph-deploy osd create cong-2 --data /dev/sdb
[root@cong-1 /etc/ceph]# ceph-deploy osd create cong-3 --data /dev/sdb
sh
# 查看是否添加成功
[root@cong-1 /etc/ceph]# ceph-deploy osd list cong-1 cong-2 cong-3
5. 部署manage
- 在管理机上部署
manage
管理服务, 也可以同时在cong-2
,cong-3
上来部署manage
, 实现高可用, 这里我并没有实现高可用, 就部署了一个, 他的作用就是辅助管理monitor
的
sh
[root@cong-1 /etc/ceph]# ceph-deploy mgr create cong-1
6. 统一集群配置
- 用ceph-deploy把配置文件和admin秘钥拷贝到所有节点上, 这样每次执行ceph命令时就无需指定
monitor
地址和ceph.clieng.admin.keyring
sh
[root@cong-1 /etc/ceph]# ceph-deploy admin cong-1 cong-2 cong-3
sh
# 秘钥文件权限
[root@cong-1 /etc/ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@cong-2 /etc/ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@cong-3 /etc/ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
(三). 文件系统存储
- 无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成对象(Objects)
1. 部署mds服务
- mds是ceph集群中的文件系统提供元数据服务, 而通常他都不是必须的, 因为只有在使用
cephfs
的时候才需要他, 而且云计算中使用更广泛的是另外两种存储方式, mds虽然是元数据服务器, 但是他不负责存储元数据, 元数据是被切换成对象存在各个osd节点中的
sh
# 给cong-2 cong-3创建文件系统
[root@cong-1 /etc/ceph]# ceph-deploy mds create cong-2 cong-3
# 查看mds服务, up状态
[root@cong-1 /etc/ceph]# ceph mds stat
, 2 up:standby
# 查看ceph集群的状态
[root@cong-1 /etc/ceph]# ceph -s
id: 5a72430d-b363-4ea3-959a-2dc2dfdaeedd
health: HEALTH_OK
services:
mon: 1 daemons, quorum cong-1
mgr: cong-1(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 3.01GiB used, 2.98GiB / 5.99GiB avail
pgs:
2. 创建ceph文件系统
- ceph文件系统是需要定义
pg_num
的, 这个pg_num
的设置直接影响集群的行为, 以及出错的数据持久性- 如果osd少5个,
pg_num
定义为128即可 osd
5~10个,pg_num
定义为512osd
10~50个,pg_num
定义为4096osd
大于50个,pg_num
借助工具去计算pgcalc
- 如果osd少5个,
sh
# 创建之前查看文件系统, 因为之前已经清空磁盘中的数据,所有没有文件系统开启
[root@cong-1 /etc/ceph]# ceph fs ls
No filesystems enabled
# 设置pg_num
[root@cong-1 /etc/ceph]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
# 创建存储池
[root@cong-1 /etc/ceph]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created
# 创建文件系统
[root@cong-1 /etc/ceph]# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
# 查看文件系统
[root@cong-1 /etc/ceph]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
# 再次查看mds状态
[root@cong-1 /etc/ceph]# ceph mds stat
cephfs-1/1/1 up {0=cong-3=up:active}, 1 up:standby
3. 测试挂载
-
在cong-4上
-
内核驱动挂载ceph文件系统, 要挂载ceph文件系统, 如果知道monitor的ip地址可以用mount命令, 或者用mount.ceph工具来自动解析监视器的IP地址
sh
# 在client端创建挂载目录来测试挂载
[root@cong-4 ~/ceph]# mkdir -p /data/aa
# cong-1上查看client的秘钥
[root@cong-1 /etc/ceph]# cat ceph.client.admin.keyring
[client.admin]
key = AQBmsqBi29c6FBAA2ju5LlbvUqBPGLW2G8dy2g==
# 测试挂载monitor上看是否可以挂载,如果是多个monitor,可以随便指定一个就可以,但是生产这样挂载是不允许的,因为在命令行输入了key值,这是非常危险的
[root@cong-4 /etc/ceph]# mount -t ceph 192.168.100.11:6789:/ /data/aa -o name=admin,secret=AQBmsqBi29c6FBAA2ju5LlbvUqBPGLW2G8dy2g==
# 查看是可以挂载上的,可以在cong-4上创建文件测试下
[root@cong-4 /etc/ceph]# mount -t ceph 192.168.100.11:6789:/ /data/aa -o name=admin,secret=AQBmsqBi29c6FBAA2ju5LlbvUqBPGLW2G8dy2g==
[root@cong-4 /etc/ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 20G 2.1G 18G 11% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.5M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
tmpfs 182M 0 182M 0% /run/user/0
192.168.100.11:6789:/ 1.4G 0 1.4G 0% /data/aa
# umount,如果报错
[root@cong-4 /etc/ceph]# umount /data/aa
umount: /data/aa:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
# 报错就用过提示用lsof查看进程,然后kill -9 干掉再umount即可
lsof /data/aa
4. 使用秘钥文件挂载
- 通过创建一个秘钥文件,将ceph的client的key放在里面, 然后通过指定文件来实现挂载
- 但是使用秘钥文件挂载, 需要客户端安装
ceph-common-12.2.13
, 版本要和ceph集群的版本一致, 否则也是无法使用秘钥文件进行挂载的
sh
# 上面如果没安装的,客户端需要安装ceph-common, 这个是之前ceph下载到本地中的有的
yum install ceph-common-12.2.13 -y
# 创建文件直接写入里面
[root@cong-4 /etc/ceph]# vim /etc/ceph/admin.secret
AQBmsqBi29c6FBAA2ju5LlbvUqBPGLW2G8dy2g==
# 然后挂载,这样卸载的时候就不会报错
[root@cong-4 /etc/ceph]# mount -t ceph 192.168.100.11:6789:/ /data/aa -o name=admin,secretfile=/etc/ceph/admin.secret
[root@cong-4 /etc/ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 20G 2.2G 18G 11% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.5M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
tmpfs 182M 0 182M 0% /run/user/0
192.168.100.11:6789:/ 1.4G 0 1.4G 0% /data/aa
[root@cong-4 /etc/ceph]# umount /data/aa
[root@cong-4 /etc/ceph]#
5. 开机自动挂载
- client节点要实现开机自动挂载,需要安装一个
ceph-fuse
的包
sh
[root@cong-4 /etc/ceph]# yum -y install ceph-fuse
# 将cong-1的client的key文件scp过去
[root@cong-1 /etc/ceph]# scp -rp ceph.client.admin.keyring cong-4:/etc/ceph
# 然后直接挂载
[root@cong-4 /etc/ceph]# ceph-fuse -m 192.168.100.11:6789 /data/aa
# 查看, 这样就隐藏了ceph的ip地址信息
[root@cong-4 /etc/ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 20G 2.2G 18G 11% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.5M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
tmpfs 182M 0 182M 0% /run/user/0
ceph-fuse 1.4G 0 1.4G 0% /data/aa
6. ceph dashboard
[下载](git clone https://github.com/Crapworks/ceph-dash.git)
sh
[root@cong-1 /etc/ceph]# git clone https://github.com/Crapworks/ceph-dash.git
# 下载完后解压
[root@cong-1 ~/ceph-dash-1.7.1]# ll
总用量 52
drwxrwxr-x 7 root root 118 12月 3 2021 app
-rwxrwxr-x 1 root root 104 12月 3 2021 ceph-dash.py
-rw-rw-r-- 1 root root 1157 12月 3 2021 ChangeLog
-rw-rw-r-- 1 root root 794 12月 3 2021 config.grahite.json
-rw-rw-r-- 1 root root 980 12月 3 2021 config.influxdb.json
-rw-rw-r-- 1 root root 45 12月 3 2021 config.json
drwxrwxr-x 7 root root 71 12月 3 2021 contrib
drwxrwxr-x 3 root root 121 12月 3 2021 debian
-rw-rw-r-- 1 root root 532 12月 3 2021 Dockerfile
-rw-rw-r-- 1 root root 1303 12月 3 2021 LICENSE
-rw-rw-r-- 1 root root 10518 12月 3 2021 README.md
-rw-rw-r-- 1 root root 28 12月 3 2021 requirements.txt
drwxrwxr-x 2 root root 153 12月 3 2021 screenshots
-rw-rw-r-- 1 root root 21 12月 3 2021 test-requirements.txt
drwxrwxr-x 2 root root 72 12月 3 2021 tests
-rw-rw-r-- 1 root root 353 12月 3 2021 tox.ini
# 执行, 监听的5000端口,要修改端口直接改ceph-dash.py
[root@cong-1 ~/ceph-dash-1.7.1]# ./ceph-dash.py
* Running on http://0.0.0.0:5000/
* Restarting with reloader
# 端口修改
app.run(host='0.0.0.0',port=5001,debug=True)
(四). 对象存储
- 要使用Ceph对象存储,首先我们需要部署RGW存储网关,RGW是一个http服务器,由Civetweb实现, 目前RGW已经嵌入到radosgw中了,因此部署会简单很多,Civetweb默认使用7480端口,我们可以根据需要将其修改为80端口。这里我们在 cong-1上部署RGW
- radosgw部署集群的时候装了
1. 部署RGW
sh
# 查看服务
[root@cong-1 ~/ceph]# systemctl restart ceph-radosgw.target
[root@cong-1 ~/ceph]# cd /etc/ceph/
[root@cong-1 ~/ceph]# ceph-deploy rgw create cong-1
# curl
[root@cong-1 /etc/ceph]# curl cong-1:7480
<?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>[root@cong-1 /etc/ceph]#
# 查看pool池
[root@cong-1 /etc/ceph]# ceph osd pool ls
cephfs_data
cephfs_metadata
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
# 端口修改, 配置文件添加/etc/ceph/ceph.conf, 配置修改完成之后我们需要将ceph.conf配置文件同步到集群中的所有节点, 并重启ceph-radosgw
[global]
fsid = 5a72430d-b363-4ea3-959a-2dc2dfdaeedd
mon_initial_members = cong-1
mon_host = 192.168.100.11
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2
[client.rgw.cong-1]
rgw_frontends = "civetweb port=80"
- 集群化RGW, 当做完后, 此时集群有三个RGW,但是该使用哪个作为接入呢?其实,RGW是一个http的web服务器,其提供无状态化的接入,因此对于cong-{1,2,3}来说,三个节点都是相同的,不管是哪个为入口,其提供的能力都是一样的,基于此我们需要在两个RGW的前面提供一个负载均衡调度器来实现接入,redhat官方推荐使用 haproxy 作为前段的负载均衡调度器,同时使用 keepalived 来确保haproxy的高可用, 可以自行部署 haproxy和keepalived ,如果RGW存在负载,只需要扩容RGW并将其添加之负载均衡调度器即可,Ceph RGW网关部署完毕,接下来开始使用Ceph对象存储
SH
# 将2个节点加入到RGW, 当然端口也可以改为其他的,并分发给其他节点
[root@cong-1 /etc/ceph]# ceph-deploy rgw create cong-2
[root@cong-1 /etc/ceph]# ceph-deploy rgw create cong-3
2. 用户信息
- 一般有三种使用方式
- API接口
- SDK,提供各种编程语言的SDK接口供开发者使用
- 命令行接口,类似于 aws s3 cp 的命令行接口,用于系统管理员使用
s3cmd
是提供访问RGW的开源命令行工具,通过这个工具我们可以实现类似于s3接口的访问方式,下面通过 s3cmd 实现对象存储的管理。RGW对象存储提供了独立的认证方式用于访问对象存储网关,因此我们需要先创建认证访问的账户。由于RGW能兼容与S3风格的API,同时也能兼容于Swift风格API,创建认证账户也是有所区别的。这里我们先创建S3风格的API为例演示s3cmd命令行接口的使用
sh
# 通过 radosgw-admin 创建一个访问的用户,创建输出结果和文件存储一样, 可以看到access_key和secret_key,这两个key非常关键,需要用于后续key访问RGW对象存储
# 创建用户,可以看到access_key,secret_key,同时也能够看到关于bucket,user配额相关的内容,radowsgw-admin还提供了其他用户管理相关的命令,比如查看用户的列表
[root@cong-1 /etc/ceph]# radosgw-admin user create --uid rgw-s3 --display-name="Ceph RGW S3 Style User"
{
"user_id": "rgw-s3",
"display_name": "Ceph RGW S3 Style User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "rgw-s3",
"access_key": "2YD97LGL5Q7Q3UGQA6RC",
"secret_key": "fKYJbQ9dENCRmsWCu2ncvrHNzdEzXa5OdqzjXmk7"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw"
}
# 查询用户信息
[root@cong-1 /etc/ceph]# radosgw-admin user info --uid rgw-s3
3. 客户端连接
sh
# 客户端安装s3cmd, AmazonS3是一种面向Internet的对象存储服务.客户端需要安装s3cmd工具
[root@cong-4 /etc/ceph]# yum install s3cmd -y
# 客户端配置
s3cmd --configure