Ceph分布式集群与存储类型接口实战

一、Ceph简介

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性、扩展性。

二、Ceph特点

1、高性能

  • 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
  • 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
  • 能够支持上千个存储节点的规模,支持TB到PB级的数据。

2、高可用性

  • 副本数可以灵活控制。
  • 支持故障域分隔,数据强一致性。
  • 多种故障场景自动进行修复自愈
  • 没有单点故障,自动管理。

3、高扩展性

  • 去中心化。
  • 扩展灵活。
  • 随着节点增加而线性增长。

4、特性丰富

  • 支持三种存储接口:块存储、文件存储、对象存储。
  • 支持自定义接口,支持多种语言驱动。

三、Ceph架构

1、支持三种接口

  • Object:有原生的API,而且也兼容Swift和S3的API。
  • Block:支持精简配置、快照、克隆。
  • File:Posix接口,支持快照。
    在这里插入图片描述
    上图详解:
  • Monitor:一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
  • OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
  • MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
  • Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
  • PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
  • RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
  • Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
  • CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
  • RBD全称RADOS block device,是Ceph对外提供的块设备服务。
  • RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
  • CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。

2、三种存储类型

1、块存储
典型设备:磁盘阵列,硬盘
主要是将裸磁盘空间映射给主机使用
优点:
- 通过Raid与LVM等手段,对数据提供了保护。
- 多块廉价的硬盘组合起来,提高容量。
- 多块磁盘组合出来的逻辑盘,提升读写效率。
缺点:
- 采用SAN架构组网时,光纤交换机,造价成本高。
- 主机之间无法共享数据。
使用场景:
Docker容器、虚拟机磁盘存储分配、日志存储、文件存储

2、文件存储
FTP、NFS服务器
为了克服块存储文件无法共享的问题,所以有了文件存储。
在服务器上架设FTP与NFS服务,就是文件存储。
优点:
- 造价低,随便一台机器就可以了。
- 方便文件共享
缺点:
- 读写效率低
- 传输速度慢
使用场景:
日志存储、有目录结构的文件存储。

3、对象存储
典型设备:内置大容量硬盘的分布式服务器(swift, s3)
多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能。
优点:
- 具备块存储的读写高速。
- 具备文件存储的共享等特性。
使用场景:(适合更新变动较少的数据)
图片存储。
视频存储。

3、Ceph集群要求

Ceph 存储集群至少需要 1 个 Ceph Monitor 和 2 个 OSD 守护进程。

  • Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )的功能:存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他 OSD 守护进程的心跳来向 Ceph Monitors提供一些监控信息。当 Ceph 存储集群设定为有 2 个副本时,至少需要 2 个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有 3 个副本,但你可以调整副本数)。
  • Monitors: Ceph Monitor 维护着展示集群状态的各种图表,包括监视器映射、 OSD映射、归置组( PG )映射、和 CRUSH 映射。 Ceph 保存着发生在 Monitors 、OSD 和 PG 上的每一次状态变更的历史信息(称为 epoch )。
  • MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用 MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
  • 1TB 的存储空间大约需要 1GB 内存。

四、Ceph集群搭建

1、基础环境配置

#四台机器配置hostname与ip映射
vim /etc/hosts
192.168.197.200 node01
192.168.197.201 node02
192.168.197.202 node03
192.168.197.203 ceph-deploy
#关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/g' /etc/selinux/config 

2、Ceph-deploy节点配置安装

使用ceph-deploy管理节点和一个三节点的ceph集群
把Ceph仓库添加到ceph-deploy管理节点,然后安装ceph-deploy。
#centos7
yum install -y yum-utils &&  yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ 
yum install --nogpgcheck -y epel-release &&rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && rm /etc/yum.repos.d/dl.fedoraproject.org*
#修改yum源
vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-{cephrelease}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

#更新软件库并安装ceph-deploy软件
yum update -y && sudo yum install ceph-deploy

3、Ntp时间同步

备注:所有服务器时间一定要同步
yum install ntp ntpdate ntp-doc -y
启动ntp服务
#或者shell脚本所有机器ntpdate同步阿里云时间。

4、免密互信

#如果需要对用户权限管理参考如下:
ceph-deploy工具以普通用户登录Ceph节点、建议在集群内的所有Ceph节点上给ceph-deploy创建一个特定的用户
#ceph-node01/ceph-node02/ceph-node03
useradd -d /home/{username} -m {username}
passwd {username}
确保各 Ceph 节点上新创建的用户都有 sudo 权限
echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
chmod 0440 /etc/sudoers.d/{username}
#免密登录
必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。(我这里使用的root)
ssh-keygen -t rsa
ssh-copy-id {username}@node01
ssh-copy-id {username}@node02
ssh-copy-id {username}@node03

在这里插入图片描述
在这里插入图片描述

注意:Ceph 的各 OSD 进程通过网络互联并向 Monitors 上报自己的状态。如果网络默认为 off,那么 Ceph 集群在启动时就不能上线,直到你打开网络/etc/sysconfig/network-scripts 目录并确保 ifcfg-{iface} 文件中的 ONBOOT 设置成了 yes 。

5、开放端口&&包管理器优先级/预选包

#开放端口(如果关闭防火墙就不需要)
Ceph Monitors 之间默认使用 6789 端口通信,OSD 之间默认用 6800:7300 这个范围内的端口通信。
如果使用iptables一定要端口放行
iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
在每个节点上配置好 iptables 之后要一定要保存,这样重启之后才依然有效。例如:
/sbin/service iptables save
#包管理器优先级/预选包
yum install yum-plugin-priorities -y --enablerepo=rhel-7-server-optional-rpms

6 、创建集群

mkdir -p /root/my-cluster
ceph-deploy new node01
错误:缺少python环境 
安装yum install python-setuptools -y 

在这里插入图片描述
在这里插入图片描述

把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达
到 active + clean 状态。把下面这行加入 [global] 段:
# 设置pool池默认分配数量
osd pool default size = 2
# 允许删除pool
mon_allow_pool_delete = true
[mgr]
# 开启WEB仪表盘
mgr modules = dashboard

在这里插入图片描述

安装 Ceph(所有节点)
ceph-deploy install ceph-deploy node01 node02 node03
安装过程中会很慢这里使用proxychains4代理。

在这里插入图片描述

配置初始 monitor(s)、并收集所有密钥:
ceph-deploy mon create-initial

在这里插入图片描述

#同步管理信息
ceph-deploy admin ceph-deploy node01 node02 node03

在这里插入图片描述

#mgr守护进程
ceph-deploy  mgr create ceph-deploy node01 node02 node03

在这里插入图片描述

#安装rgw
ceph-deploy rgw create ceph-deploy node01 node02 node03

在这里插入图片描述

#创建mds服务
ceph-deploy mds create node01 node02 node03

在这里插入图片描述

#osd安装
ceph-deploy osd create --data /dev/sdb node01 
ceph-deploy osd create --data /dev/sdb node02
ceph-deploy osd create --data /dev/sdb node03

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#查看集群状态
ceph -s

在这里插入图片描述

#查看osd
ceph osd df
ceph osd tree

在这里插入图片描述
在这里插入图片描述

7、dashboard安装

启用dashboard模块:
ceph mgr module enable dashboard
#生成签名证书(如果不使用https就不用生成)
ceph dashboard create-self-signed-cert
mkdir -p /usr/local/cephcluster/mgr-dashboard
openssl req -new -nodes -x509   -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650   -keyout dashboard.key -out dashboard.crt -extensions v3_ca

在这里插入图片描述

#管理器导入签名
ceph dashboard set-ssl-certificate -i dashboard.crt
ceph dashboard set-ssl-certificate-key -i dashboard.key
#启动服务
ceph mgr module disable dashboard
ceph mgr module enable dashboard
#取消https
ceph config set mgr mgr/dashboard/ssl false
#重启模块使配置生效
ceph mgr module disable dashboard
ceph mgr module enable dashboard

#设置配置访问端口
# 配置模板
ceph config set mgr mgr/dashboard/server_addr IP
ceph config set mgr mgr/dashboard/server_portIPcephconfigsetmgrmgr/dashboard/serverportPORT
ceph config set mgr mgr/dashboard/ssl_server_port $PORT
 
# 配置示例
ceph config set mgr mgr/dashboard/server_addr 192.168.197.203
ceph config set mgr mgr/dashboard/server_port 80
ceph config set mgr mgr/dashboard/ssl_server_port 443

#修改完重启模块
ceph mgr module disable dashboard
ceph mgr module enable dashboard

##查看dashboard的状态
ceph mgr services

在这里插入图片描述
在这里插入图片描述

#设置用户名和密码
ceph dashboard set-login-credentials root 000000

在这里插入图片描述

8、创建存储池和文件系统

#创建模板
ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
ceph fs new <fs_name> cephfs_metadata cephfs_data

#创建实列
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 64
ceph fs new fs_system cephfs_metadata cephfs_data

在这里插入图片描述

#查看存储池
ceph osd lspools

在这里插入图片描述

#查看文件系统
ceph fs ls

在这里插入图片描述

这里演示从管理节点而非服务器节点挂载 Ceph FS 文件系统。
如果有机器要使用Ceph FS文件系统
先安装在同步信息
ceph-deploy install 主机名(hostname已解析)
ceph-deploy admin 主机名
用户空间文件系统( FUSE )
mkdir /ceph-system
#模板文件
ceph-fuse -k -m {ip-address-of-monitor}:6789 /mycephfs
#创建文件
ceph-fuse -k /root/my-cluster/ceph.client.admin.keyring -m 192.168.197.200:6789 /ceph-system

在这里插入图片描述

#如果遇到-bash: ceph-fuse: 未找到命令
yum install ceph-fuse -y

在这里插入图片描述
在这里插入图片描述

9、Ceph 对象存储

在Deploy节点上安装RGW节点(上面搭建过程中已经安装),默认端口7480
curl http://node01:7480 -v

在这里插入图片描述

如果想修改默认端口如下:
通过修改 Ceph 配置文件可以更改默认端口(比如改成 80 )。增加名
为 [client.rgw.<client-node>] 的小节,把 <client-node> 替换成你
自己 Ceph 客户端节点的短名称(即 hostname -s 的输出)。例如,你的节点名
就是 client-node ,在 [global] 节后增加一个类似于下面的小节:
[client.rgw.client-node]
rgw_frontends = "civetweb port=80"
确保在 rgw_frontends 键值对的 port=<port-number> 中没有空格。

在Deploy节点上创建S3用户:
radosgw-admin user create --uid="qky" --display-name="qky" --system
这里会拿到access_key和secret_key
要使用仪表板的对象网关管理功能,需要提供system启用该标志的用户的登录凭据
ceph dashboard set-rgw-api-ssl-verify False
ceph dashboard set-rgw-api-admin-resource admin
ceph dashboard set-rgw-api-user-id qky
ceph dashboard set-rgw-api-access-key 329VDNUERO66ITFNW2J9
ceph dashboard set-rgw-api-secret-key unfBSFoKfc8fCDV5Tfn03BdOJoyJMX1XxW0AVeuK
#注意一定要重启dashboard:
ceph mgr module disable dashboard
ceph mgr module enable dashboard

在这里插入图片描述

如果在服务器上这里用python调用在Client节点上安装S3客户端:
yum -y install python-boto
我这里在本地使用pycharm调用
#下面使用python来对ceph object操作
官网API文档:https://docs.ceph.com/en/quincy/radosgw/s3/python/
创建两个bucket方便后续测试
s3-bucket-dev/s3-bucket-test

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下:
import boto
import boto.s3.connection
access_key = '329VDNUERO66ITFNW2J9'
secret_key = 'unfBSFoKfc8fCDV5Tfn03BdOJoyJMX1XxW0AVeuK'

# 新建S3连接
conn = boto.connect_s3(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        host='192.168.197.200', port=7480,
        is_secure=False,
        calling_format=boto.s3.connection.OrdinaryCallingFormat(),
        )

# 新建Bucket
bucket = conn.create_bucket('s3-bucket-dev')

# # 显示Bucket
for bucket in conn.get_all_buckets():
        print("{name}\t{created}".format(
                name=bucket.name,
                created=bucket.creation_date,
        ))
        # 删除Bucket桶,必须里面是清空的
        if bucket.name == 's3-bucket-test':
                bucket.delete_key('file.txt')
                conn.delete_bucket(bucket.name)

key = bucket.new_key('file.txt')
key.set_contents_from_string('Hello World!')

# #upload上传文件到Bucket中
file_path = 'dev.txt'
key=bucket.new_key('dev.txt')
with open(file_path, 'r',encoding='utf-8') as file:
    key.set_contents_from_string(file.read())
#upload图片
key = bucket.new_key('1.png')
key.set_contents_from_filename('1.png')

# 列出Bucket文件
for key in bucket.list():
        print ("{name}\t{size}\t{modified}".format(
                name=key.name,
                size=key.size,
                modified=key.last_modified,
        ))


# #download文件并保存到指定目录
key=bucket.get_key('dev.txt')
key.get_contents_to_filename('D:\\ceph-deploy\\dev.txt')

##download图片到指定目录
key=bucket.get_key('1.png')
key.get_contents_to_filename('D:\\ceph-deploy\\1.png')

# #删除文件
bucket.delete_key('dev.txt')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CEPH是一种开源的分布式文件系统和对象存储系统,以其高可靠、可扩展和高性能的特点而受到广泛关注。《Ceph分布式存储实战》是一本关于CEPH分布式存储系统的实用指南,内容详细介绍了CEPH架构、部署和运维等方面的知识,适合对CEPH感兴趣的读者学习和实践。 该书首先介绍了CEPH的基本概念和工作原理,包括集群、数据分布、数据一致性等重要内容。对于初次接触CEPH的读者来说,这些基础知识的讲解非常实用。接着,书中详细探讨了CEPH架构,包括存储节点、元数据服务器、监控节点等组件的功能和相互关系。通过对CEPH的结构深入了解,读者可以更好地理解其内部工作机制。 此外,《Ceph分布式存储实战》还包含了CEPH的部署和配置指南,以及一些常见问题的解决方案。对于想要实际搭建CEPH集群的读者来说,这些指南非常有用。书中还介绍了CEPH的运维和监控方法,包括集群管理、容错处理、性能优化等等。这些内容能帮助读者更好地维护和管理自己的CEPH系统。 总结来说,《Ceph分布式存储实战》是一本实用的CEPH指南,通过对CEPH架构和运维等方面进行详细讲解,帮助读者深入了解CEPH的工作原理,掌握CEPH的实际应用。对于对CEPH感兴趣的读者来说,这本书是一本不可多得的参考资料。无论是初学者还是有一定经验的运维人员,都能从中获得实用的知识和技巧。 ### 回答2: 《ceph分布式存储实战》是一本介绍ceph分布式存储系统的实践指南,全书共分为六个部分。 第一部分简要介绍了ceph的基本概念和基础知识,包括ceph架构和工作原理,以及分布式存储系统的设计理念和挑战。读者通过本部分可以了解到ceph的核心概念和基本原理,为后续的实战内容打下基础。 第二部分主要讲解了ceph的部署和配置,包括ceph的安装、环境配置和网络设置。此外,还介绍了如何创建存储集群、配置存储池和设置用户权限等。通过本部分的学习,读者可以掌握ceph的部署和配置方法,为后续的使用和维护工作打下基础。 第三部分重点介绍了ceph的数据管理和存储方案。包括数据分布和均衡、数据迁移和备份、以及故障恢复和容灾等方面。本部分通过具体的操作示例和案例分析,帮助读者理解ceph在实际应用中的数据管理和存储方案。 第四部分讲解了ceph的性能调优和监控。包括如何优化ceph的性能、如何监控ceph集群的状态和性能指标。同时,本部分还介绍了一些常见的问题和故障处理方法。通过本部分的学习,读者可以掌握ceph的性能调优和故障处理的方法和技巧。 第五部分介绍了ceph的高级特性和扩展应用。包括缓存和加速、多租户和多数据中心等方面。本部分通过实战案例和实际应用场景的分析,帮助读者了解ceph的高级特性和扩展应用。 第六部分总结了整本书的内容,并展望了ceph的发展趋势和前景。通过本部分的学习,读者可以对ceph分布式存储技术有一个全面的了解,并能够根据实际需求进行部署和应用。 总的来说,《ceph分布式存储实战》是一本详实的实践指南,通过具体的操作示例和实际应用案例,帮助读者全面了解ceph分布式存储系统的基本原理和实践方法。无论是初学者还是有一定经验的读者,都可以通过阅读本书,掌握ceph的配置部署、数据管理、性能调优和扩展应用等方面的知识和技能。 ### 回答3: 《Ceph分布式存储实战pdf》是一本介绍Ceph分布式存储技术的实战指南。Ceph是一个开源的分布式存储平台,具有高可靠性、高扩展性和高性能的特点,可以用于构建私有云、公有云以及混合云等存储解决方案。 这本书主要内容包括Ceph的基本概念、架构和工作原理,以及Ceph的部署、配置和管理方法。读者可以从中学习到Ceph的各种组件和功能,如RADOS对象存储、RBD块设备、CephFS文件系统等,并深入了解它们的实际应用场景。 此外,本书还介绍了Ceph在企业中的应用案例,包括容器存储、虚拟化存储、大数据存储等。读者可以通过这些案例了解Ceph在不同场景中的具体应用方法和效果,并可以根据自己的需求选择相应的部署和管理策略。 《Ceph分布式存储实战pdf》除了提供理论知识外,还包含了丰富的实际操作指南和实验实例。读者可以按照书中的步骤进行一系列的实验,从而掌握Ceph的部署、配置和管理技巧,提升自己的实战能力。 总之,这本书是一本系统地介绍Ceph分布式存储技术的实战指南,适合对Ceph感兴趣的读者阅读。无论是初学者还是有一定经验的技术人员,都可以从中获得宝贵的知识和经验,更好地应用Ceph进行分布式存储的实践工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值