【Kubernetes 企业项目实战】05、基于云原生分布式存储 Ceph 实现 K8s 数据持久化(上)

news2024/11/15 20:05:45

目录

一、分布式存储 Ceph 基本介绍

1.1 块存储(rbd)

1.2 文件系统 cephfs

1.3 对象存储

1.4 分布式存储的优点

二、Ceph 核心组件介绍

三、准备安装 Ceph 高可用集群的实验环境

3.1 机器配置

3.2  初始化环境

3.3 配置互信

3.4 配置 Ceph 安装源

四、安装 Ceph 集群

4.1 安装 ceph-deploy

4.2 创建 monitor 节点

4.3 安装 ceph-monitor

4.4 部署 osd 服务

4.5 创建 ceph 文件系统


 

一、分布式存储 Ceph 基本介绍

  • Ceph 官网地址:Ceph.io — Home
  • Ceph 官方文档:Intro to Ceph — Ceph Documentation

        Ceph 是一种开源的分布式的存储系统。它包含以下几种存储类型:块存储(rbd)、对象存储(RADOS Fateway)、文件系统(cephfs)。

1.1 块存储(rbd)

        块是一个字节序列(例如 512 字节的数据块)。 基于块的存储接口是使用旋转介质(如硬盘、CD、软盘甚至传统的 9 轨磁带等)存储数据的最常用方法。Ceph 块设备是精简配置,可调整大小并存储在 Ceph 集群中多个 OSD 条带化的数据。Ceph 块设备利用 RADOS 功能,如快照、复制和一致性。Ceph 的 RADOS 块设备(RBD)使用内核模块或 librbd 库与 OSD 进行交互。Ceph 的块设备为内核模块或 QVM 等 KVM 以及依赖 libvirt 和 QEMU 与 Ceph 块设备集成的OpenStack 和 CloudStack 等基于云的计算系统提供高性能和无限可扩展性。可以使用同一个集群同时运行 Ceph RADOS Gateway、CephFS 文件系统和 Ceph 块设备。

linux 系统中,ls /dev/ 下有很多块设备文件,这些文件就是我们添加硬盘时识别出来的。

        rbd 就是由 Ceph 集群提供出来的块设备。可以这样理解,sda 是通过数据线连接到了真实的硬盘,而 rbd 是通过网络连接到了 Ceph 集群中的一块存储区域,往 rbd 设备文件写入数据,最终会被存储到 Ceph 集群的这块区域中。

        总结:块设备可理解成一块硬盘,用户可以直接使用不含文件系统的块设备,也可以将其格式化成特定的文件系统,由文件系统来组织管理存储空间,从而为用户提供丰富而友好的数据操作支持。

1.2 文件系统 cephfs

        Ceph 文件系统(CephFS)是一个符合 POSIX 标准的文件系统,它使用 Ceph 存储集群来存储其数据。Ceph 文件系统使用与 Ceph 块设备相同的 Ceph 存储集群系统。

        用户可以在块设备上创建 xfs 文件系统,也可以创建 ext4 等其他文件系统,Ceph 集群实现了自己的文件系统来组织管理集群的存储空间,用户可以直接将 Ceph 集群的文件系统挂载到用户机上使用,Ceph 有了块设备接口,在块设备上完全可以构建一个文件系统,那么 Ceph 为什么还需要文件系统接口呢?

        主要是因为应用场景的不同,Ceph 的块设备具有优异的读写性能,但不能多处挂载同时读写,目前主要用在 OpenStack 上作为虚拟磁盘,而 Ceph 的文件系统接口读写性能较块设备接口差,但具有优异的共享性。

1.3 对象存储

        Ceph 对象存储使用 Ceph 对象网关守护进程(radosgw),它是一个用于与 Ceph 存储集群交互的 HTTP 服务器。由于它提供与 OpenStack Swift 和 Amazon S3 兼容的接口,因此 Ceph 对象网关具有自己的用户管理。 Ceph 对象网关可以将数据存储在用于存储来自 Ceph 文件系统客户端或 Ceph 块设备客户端的数据的相同 Ceph 存储集群中。使用方式就是通过 http 协议上传下载删除对象(文件即对象)。

老问题来了,有了块设备接口存储和文件系统接口存储,为什么还整个对象存储呢?

        Ceph 的块设备存储具有优异的存储性能但不具有共享性,而 Ceph 的文件系统具有共享性然而性能较块设备存储差,为什么不权衡一下存储性能和共享性,整个具有共享性而存储性能好于文件系统存储的存储呢,对象存储就这样出现了。

1.4 分布式存储的优点

二、Ceph 核心组件介绍

        在 Ceph 集群中,不管你是想要提供对象存储、块设备存储,还是文件系统存储,所有 Ceph 存储集群部署都是从设置每个 Ceph 节点、网络和 Ceph 存储开始的。Ceph 存储集群至少需要一个 Ceph Monitor、Ceph Manager 和 Ceph OSD(对象存储守护进程)。运行 Ceph Filesystem 客户端时也需要 Ceph 元数据服务器。

  • Monitors:Ceph 监视器(ceph-mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD 映射和 CRUSH 映射。这些映射是 Ceph 守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常至少需要三个监视器。

  • Managers:Ceph Manager 守护程序(ceph-mgr)负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager 守护进程还托管基于python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的 Ceph Dashboard 和 REST API。高可用性通常至少需要两名 Managers。

  • Ceph OSD:Ceph OSD(对象存储守护进程,ceph-osd)存储数据,处理数据复制,恢复,重新平衡,并通过检查其他 Ceph OSD 守护进程来获取心跳,为 Ceph 监视器和管理器提供一些监视信息。冗余和高可用性通常至少需要 3 个 Ceph OSD。

  • MDS:Ceph 元数据服务器(MDS,ceph-mds)代表 Ceph 文件系统存储元数据(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)。Ceph 元数据服务器允许 POSIX 文件系统用户执行基本命令(如 ls,find 等),而不会给 Ceph 存储集群带来巨大负担。

三、准备安装 Ceph 高可用集群的实验环境

3.1 机器配置

注意:不是在 k8s 集群内部署 Ceph,而是另外准备三台机器。

  • 操作系统:Centos 7.6

  • 网络模式:NAT

准备三台机器,每台机器需要三个硬盘,最低配置 2GiB / 2vCPU / 50G

master1-admin 是管理节点 :192.168.78.135

node1-monitor 是监控节点:192.168.78.136

node2-osd 是对象存储节点:192.168.78.137

3.2  初始化环境

可以按照我的这篇文章来操作:CentOS 7 初始化系统_centos7初始化_Stars.Sky的博客-CSDN博客

3.3 配置互信

生成 ssh 密钥对:

[root@master1-admin ~]# ssh-keygen -t rsa            # 一路回车(三次),不输入密码。下面操作以此类推

# 把本地的 ssh 公钥文件安装到远程主机对应的账户
[root@master1-admin ~]# ssh-copy-id node1-monitor    # 输入 yes 和 对应主机密码
[root@master1-admin ~]# ssh-copy-id node2-osd
[root@master1-admin ~]# ssh-copy-id master1-admin

[root@node1-monitor ~]# ssh-keygen
[root@node1-monitor ~]# ssh-copy-id master1-admin
[root@node1-monitor ~]# ssh-copy-id node1-monitor
[root@node1-monitor ~]# ssh-copy-id node2-osd

[root@node2-osd ~]# ssh-keygen 
[root@node2-osd ~]# ssh-copy-id master1-admin
[root@node2-osd ~]# ssh-copy-id node1-monitor
[root@node2-osd ~]# ssh-copy-id node2-osd

3.4 配置 Ceph 安装源

配置 ceph 的阿里云 repo 源,需要都在 master1-admin、node1-monitor、node2-osd 上操作:

yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*

需要在 master1-admin、node1-monitor、node2-osd 上创建 ceph.repo :

[root@master1-admin ~]# vim /etc/yum.repos.d/ceph.repo
[Ceph] 
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ 
enabled=1 
gpgcheck=0 
type=rpm-md 
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc 
priority=1
[Ceph-noarch] 
name=Ceph noarch packages 
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ 
enabled=1 
gpgcheck=0 
type=rpm-md 
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc 
priority=1 
[ceph-source]
name=Ceph source packages 
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/ 
enabled=1 
gpgcheck=0 
type=rpm-md 
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc 
priority=1

四、安装 Ceph 集群

4.1 安装 ceph-deploy

# 在 master1-admin 节点安装 ceph-deploy
[root@master1-admin ~]# yum install python-setuptools ceph-deploy -y

# 在 master1-admin、node1-monitor 和 node2-osd 节点安装 ceph
yum install ceph ceph-radosgw -y

# 查看 ceph 版本
[root@master1-admin ~]# ceph --version
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)

4.2 创建 monitor 节点

# 创建一个目录用于保存 ceph-deploy 生成的配置文件信息的
[root@master1-admin ~]# cd /etc/ceph/
[root@master1-admin ceph]# ceph-deploy new master1-admin node1-monitor node2-osd

# 生成了如下配置文件
[root@master1-admin ceph]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring  rbdmap

# Ceph 配置文件 日志文件           monitor 密钥环

4.3 安装 ceph-monitor

  • 修改 ceph 配置文件:
# 把 ceph.conf 配置文件里的默认副本数从 3 改成 1;把 osd_pool_default_size = 2 加入 [global] 段,这样只有 2 个 osd 也能达到 active+clean 状态:
[root@master1-admin ceph]# vim ceph.conf 
[global]
fsid = 8edfa62d-3732-45ca-b788-b42e35ebd144
mon_initial_members = master1-admin, node1-monitor, node2-osd
mon_host = 192.168.78.135,192.168.78.136,192.168.78.137
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2
mon clock drift allowed = 0.500        # 监视器间允许的时钟漂移量默认值 0.05
mon clock drift warn backoff = 10      # 时钟偏移警告的退避指数。默认值 5

# ceph 对每个mon之间的时间同步延时默认要求在0.05s之间,这个时间有的时候太短了。所以如果ceph集群如果出现clock问题就检查ntp时间同步或者适当放宽这个误差时间。
cephx是认证机制是整个 Ceph 系统的用户名/密码

        ceph 对每个 mon 之间的时间同步延时默认要求在 0.05s 之间,这个时间有的时候太短了。所以如果 ceph 集群如果出现 clock 问题就检查 ntp 时间同步或者适当放宽这个误差时间。

cephx 是认证机制,是整个 Ceph 系统的用户名/密码。

  • 配置初始 monitor、收集所有的密钥:

[root@master1-admin ceph]# cd /etc/ceph/

[root@master1-admin ceph]# ceph-deploy mon create-initial

[root@master1-admin ceph]# ls *.keyring
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring  ceph.mon.keyring

4.4 部署 osd 服务

# 查看磁盘信息
[root@master1-admin ceph]# fdisk -l

# 准备 osd
[root@master1-admin ceph]# pwd
/etc/ceph
[root@master1-admin ceph]# ceph-deploy osd prepare master1-admin:/dev/sdb
[root@master1-admin ceph]# ceph-deploy osd prepare node1-monitor:/dev/sdb
[root@master1-admin ceph]# ceph-deploy osd prepare node2-osd:/dev/sdb

# 激活 osd
[root@master1-admin ceph]# ceph-deploy osd activate master1-admin:/dev/sdb1
[root@master1-admin ceph]# ceph-deploy osd activate node1-monitor:/dev/sdb1
[root@master1-admin ceph]# ceph-deploy osd activate node2-osd:/dev/sdb1

# 查看状态
[root@master1-admin ceph]# ceph-deploy osd list master1-admin node1-monitor node2-osd

        要使用 Ceph 文件系统,你的 Ceph 的存储集群里至少需要存在一个 Ceph 的元数据服务器(mds)。

4.5 创建 ceph 文件系统

# 创建 mds
[root@master1-admin ceph]# ceph-deploy mds create master1-admin node1-monitor node2-osd

# 查看 ceph 当前文件系统
[root@master1-admin ceph]# ceph fs ls
No filesystems enabled

        一个 cephfs 至少要求两个 librados 存储池,一个为 data,一个为 metadata。当配置这两个存储池时,注意:

  1. 为 metadata pool 设置较高级别的副本级别,因为 metadata 的损坏可能导致整个文件系统不用;

  2. 建议 metadata pool 使用低延时存储,比如 SSD,因为 metadata 会直接影响客户端的响应速度。

# 创建存储池
[root@master1-admin ceph]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created

[root@master1-admin ceph]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created

解释:

确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

  • OSD 少于 5 个 OSD 时可把 pg_num 设置为 128

  • OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512

  • OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096

  • OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值

  • 自己计算 pg_num 取值时可借助 pgcalc 工具

        随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

# 创建文件系统
# 创建好存储池后,你就可以用 fs new 命令创建文件系统了,其中 new 后的 fsname 可自定义
[root@master1-admin ceph]# ceph fs new test cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1

# 查看创建后的 cephfs
[root@master1-admin ceph]# ceph fs ls
name: test, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

# 查看 mds 节点状态
[root@master1-admin ceph]# ceph mds stat
e7: 1/1/1 up {0=node2-osd=up:active}, 2 up:standby

# active 是活跃的,另 1 个是处于热备份的状态

# 查看 ceph 集群状态
[root@master1-admin ceph]# ceph -s
    cluster 8edfa62d-3732-45ca-b788-b42e35ebd144
     health HEALTH_OK
     monmap e1: 3 mons at {master1-admin=192.168.78.135:6789/0,node1-monitor=192.168.78.136:6789/0,node2-osd=192.168.78.137:6789/0}
            election epoch 4, quorum 0,1,2 master1-admin,node1-monitor,node2-osd
      fsmap e7: 1/1/1 up {0=node2-osd=up:active}, 2 up:standby
     osdmap e21: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v43: 320 pgs, 3 pools, 2068 bytes data, 20 objects
            326 MB used, 15000 MB / 15326 MB avail
                 320 active+clean

# HEALTH_OK 表示 ceph 集群正常

上一篇文章:【Kubernetes 企业项目实战】04、基于 K8s 构建 EFK+logstash+kafka 日志平台(下)_Stars.Sky的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【精选博客】反爬过程中 x-ca-nonce、x-ca-signature 参数的解密过程

本篇博客在 请求头 x-ca-key、x-ca-nonce、x-ca-signature 加密分析第一篇 的基础上继续编写,大家学习时可以从上一篇入手。 文章目录x-ca-nonce 代码实现python 实现 uuidx-ca-signature代码实现在上一篇博客我们已经捕获了参数的JS代码,这篇博客重点要…

Java设计模式-策略模式Strategy

介绍 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。这算法体现了几个设计原则,第…

这些学习技巧学起来

技巧一:组合多个对象 在PPT页面插入多个图形后,想要移动这些元素时,很多小伙伴会挨个拖动进行位置调整。其实,我们大可以使用快捷键【CtrlG】将多个同类的元素进行组合,使其成为一个图形元素,这样就可以方…

springboot整合mybatis-plus及mybatis-plus分页插件的使用

springboot整合mybatis-plus及mybatis-plus分页插件的使用1. mybatis-plus?2. 引入依赖3. 编写配置文件4. 编写sql表5. mapper层5.1 mybatis-plus做了什么?及创建mapper接口5.2 baseMapper源码6. service层及controller层6.1 service层6.2 controller层6.2.1 page对…

【html】超链接样式

超链接样式超链接样式超链接样式 根据超链接的类型&#xff0c;显示不同图片的前缀 根据 <!doctype html> <html> <head> <meta charset"utf-8"> <title></title> <style type"text/css"> body {background: …

C# 托管堆遭破坏问题溯源分析

一&#xff1a;背景 1. 讲故事 年前遇到了好几例托管堆被损坏的案例&#xff0c;有些运气好一些&#xff0c;从被破坏的托管堆内存现场能观测出大概是什么问题&#xff0c;但更多的情况下是无法做出准确判断的,原因就在于生成的dump是第二现场&#xff0c;借用之前文章的一张…

Exynos4412 移植针对Samsung的Linux-6.1(四)NandFlash卡驱动

系列文章目录 Exynos4412 移植针对Samsung的Linux-6.1&#xff08;一&#xff09;下载、配置、编译Linux-6.1Exynos4412 移植针对Samsung的Linux-6.1&#xff08;二&#xff09;SD卡驱动——解决无法挂载SD卡的根文件系统Exynos4412 移植针对Samsung的Linux-6.1&#xff08;三…

C++基础——C++ 循环

C基础——C 循环C 循环循环类型循环控制语句无限循环C 循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂…

计算机自动和声分析

思路&#xff1a;信号→和声 通过计算特征值&#xff08;特征向量&#xff09;区分音频的关键信息 Chroma特征向量 (32 条消息) 什么是 Chroma Features&#xff1f; - 知乎 (zhihu.com) 基本思想&#xff1a;音高听感的周期性 音高每高一个八度&#xff0c;就回到相似的听…

计算机相关专业提升学历的解决方案(博士研究生)

文章目录1、正规全日制博士1.1 申请 - 考核制1.2 硕博连读与直博2、继续教育&#xff08;非全日制&#xff09;2.1 在职博士2.2 同等学力申博3、海外博士3.1 海外博士3.2 中外合作博士博士录取政策 国内博士&#xff0c;没有具体的政策&#xff0c;招生权力下放到各个高校。 往…

Spark 行动算子

文章目录Spark 行动算子1、reduce2、collect3、count4、first5、take6、takeOrdered7、代码示例8、aggregate9、fold10、countByValue & countByKey (wordcount重点)Spark 行动算子 所谓的行动算子&#xff0c;其实就是触发作业执行的方法&#xff0c;之前的转换算子是不能…

Lua 模块与包

Lua 模块与包 参考至菜鸟教程。 模块类似于一个封装库&#xff0c;从 Lua 5.1 开始&#xff0c;Lua 加入了标准的模块管理机制&#xff0c;可以把一些公用的代码放在一个文件里&#xff0c;以 API 接口的形式在其他地方调用&#xff0c;有利于代码的重用和降低代码耦合度。 Lua…

一起自学SLAM算法:11.3 路径规划

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 路径规划其实就是在回答图11-1中机器人提出的第3个问题“我该如何去”&#xff0c;不管是在已知地图上导航或是在未知环境下通过一边探索地图一边导航&#xff0c;路径规划其实就是在地图上寻找到一条从起点到目…

CMMI3-5级如何高效落地?——CMMI落地4大工具

为了助力CMMI3-5级高效落地&#xff0c;近日CoCode旗下Co-ProjectV3.0智能项目管理平台全面升级&#xff0c;CMMI落地4大工具正式上线&#xff1a;CMMI成熟度自测工具、量化管理工具&#xff08;组织级过程改进工具和量化项目管理工具&#xff09;、组织级过程资产库。 01、CMM…

年后创业,该如何选择适合年轻人的小成本创业项目?

2023年创业大潮即将来袭&#xff0c;疫情政策的放开&#xff0c;会让越来越多的年轻人选择创业。单纯的工作已经不能满足年轻人的生活需求&#xff0c;那无经验、无人脉的年轻人该如何选择适合自己的创业项目&#xff1f;小编在这里总结了几点&#xff0c;适合年轻人的小成本项…

Android Kotlin 多线程编程 server

参考: 《第一行代码 第三版》 10.1 service 是什么 Service是实现程序后台运行的解决方案&#xff0c;适合执行非交互&#xff0c;后台预先的任务&#xff0c;即使用户打开其他应用&#xff0c;Service也能够正常运行 Service需要内部手动创建子线程 10.2 多线程编程 用法&a…

Makefile学习⑨:Makefile中的等号和shell命令的使用

Makefile学习⑨&#xff1a;Makefile中的等号和shell命令的使用 Makefile中的等号 “” 普通赋值符号&#xff0c;命令格式如下 变量值注意&#xff1a;变量的最终值为该文件中的最后进行赋值操作所赋的值。 &#xff08;不管在当前文件的何处进行赋值&#xff0c;在使用该…

【MySQL】MySQL经常使用时间日期相关函数

MySQL经常使用时间、日期相关函数 MySQL经常使用的时间、日期相关函数 1. 日期函数 显示当前日期函数&#xff1a;CURDATE(), CURRENT_DATE(), CURRENT_DATE SQL&#xff1a;select CURDATE(), CURRENT_DATE(), CURRENT_DATE from dual; 2. 时间函数 显示当前日期函数&…

Mysql专栏(五) Mysql高可用

Mysql专栏收尾之作&#xff0c;作为一名后端开发人员&#xff0c;对于Mysql的知识了解到这里已经足以应对99的场景了&#xff0c;毕竟没有必要非要跟DBA抢活儿干。 而且现在的趋势都是往云上走&#xff0c;云数据库已经帮我们处理了高可用和数据一致性的事情了&#xff0c;所以…

初阶指针的介绍

文章目录 指针是什么 指针和指针类型 野指针 指针运算 指针和数组 二级指针 指针数组 一、 指针是什么 指针理解的2个要点&#xff1a; 1. 指针是内存中一个最小单元的编号&#xff0c;也就是地址 2. 平时口语中说的指针&#xff0c;通常指的是指针变量&#xff0c;是用…