ceph存储

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 MonitorManages提供一些监控信息, 本质上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即可
    • osd5~10个, pg_num定义为512
    • osd10~50个, pg_num定义为4096
    • osd大于50个, pg_num借助工具去计算pgcalc
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

(五). 块存储

相关推荐
弗锐土豆4 小时前
Windows系统中Oracle VM VirtualBox的安装
windows·虚拟机·virtualbox
秋の花4 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
YCyjs5 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R5 小时前
K8s小白入门
云原生·容器·kubernetes
零意@6 小时前
ubuntu切换不同版本的python
windows·python·ubuntu
写bug的小屁孩8 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
hairenjing112310 小时前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
为什么这亚子11 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口13 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
plmm烟酒僧13 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv