CentOS 7部署 Ceph分布式存储架构

CentOS 7部署 Ceph分布式存储架构,第1张

随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的首选后端存储。Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

前三台服务器增加一块硬盘/dev/sdb实验, 创建目录并挂载到/var/local/osd{1,2,3}

规范系统主机名添加hosts文件实现集群主机名与主机名之间相互能够解析(host 文件添加主机名不要使用fqdn方式)可用 hostnamectl set-hostname [name] 设置分别打开各节点的 /etc/hosts 文件,加入这四个节点ip与名称的对应关系:

在管理节点使用ssh-keygen 生成ssh keys 发布到各节点

第一步:增加 yum配置文件(各个节点都需要增加yum源) vim /etc/yum.repos.d/ceph.repo

或阿里的ceph源

复制配置文件到其它节点和客户端

在ceph1更新软件源并安装ceph-deploy 管理工具

配置文件的默认副本数从3改成2,这样只有两个osd也能达到 active+clean 状态,添加行 osd_pool_default_size = 2

(如果网络源安装失败,手工安装epel-release 然后安装yum –yinstall cep-release再yum –y install ceph ceph-radosgw)

错误参考: https://blog.csdn.net/yenai2008/article/details/72457463

添加osd节点 (所有osd节点执行)

我们实验准备时已经创建目录/var/local/osd{id}

(用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了)

以上基本上完成了ceph存储集群的搭建。

其中: <pg_num>= 128 ,

关于创建存储池

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

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

创建好存储池后,你就可以用 fs new 命令创建文件系统了

ceph fs new <fs_name>cephfs_metadata cephfs_data

其中: <fs_name>= cephfs 可自定义

在这里想起没在/etc/fstab配置ceph1、ceph2、ceph3的sdb自动挂载。

ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

清理机器上的ceph相关配置

可以参考内容: http://blog.51cto.com/12270625/1887648

Ceph是专为在商品硬件上运行而设计的,这使得构建和维护超大规模的数据集群在经济上是可行的。当规划出你的集群硬件时,你需要平衡一些考虑因素,包括故障域和潜在的性能问题。硬件规划应该包括将Ceph守护进程和其他使用Ceph的进程分布在许多主机上。一般来说,我们 建议在为该类型的守护进程配置的主机上运行特定的Ceph守护进程。我们建议使用其他主机来处理使用您的数据集群的进程(例如OpenStack、CloudStack)

Ceph元数据服务器会动态地重新分配负载,这对CPU来说是很有必要的。所以你的元数据处理器应该有相当大的处理能力(四核心或更高的CPU)。Ceph OSDs 运行RADOS服务,用CRUSH计算数据放置、复制数据,并维护自己的集群地图副本。因此,OSD应该有合理的处理能力(例如双核处理器)。监视器只是维护集群映射的主副本,所以监视器不需要CPU密集型的处理能力。

除了Ceph守护进程之外,你还必须考虑主机是否会运行CPU密集型进程,例如,如果您的主机将运行计算虚拟机(例如,OpenStack Nova),您需要确保这些其他进程为Ceph守护进程留下足够的处理能力。我们建议在单独的主机上运行额外的CPU密集型进程。

一般来说,RAM越多越好

监视器和管理器守护进程的内存使用量一般会随着集群的大小而变化。

对于小型集群,一般来说,1-2GB就足够了。

对于大型集群,你应该提供更多(5-10GB)。

你可能还需要考虑调整设置,如mon_osd_cache_size或 rocksdb_cache_size

Bluestore使用自己的内存来缓存数据,而不是依赖操作系统的页面缓存。在BlueStore中,你可以通过osd_memory_target选项调整OSD_memory_target的内存量

•通常不建议将osd_memory_target设置为2GB以下,可能会将内存保持在2GB以下,同时也可能导致性能极慢。•将内存目标设置在2Gb和4Gb之间通常有效,但可能会导致性能下降,因为元数据可能在IO期间从磁盘读取,除非活动数据集相对较小。•4GB是目前默认的osd_memory_target大小,这样设置的目的是为了平衡内存需求和OSD的性能,以满足典型的使用情况•设置osd_memory_target高于4GB时,当有许多(小的)或大的(256GB/OSD)数据集被处理时,可能会提高性能。

重要:

OSD的内存自动调整是“尽力而为”。虽然OSD可能会解除内存映射,让内核回收内存,但不能保证内核会在任何特定的时间框架内实际回收释放的内存。这在旧版本的Ceph中尤其如此,因为透明的巨页会阻止内核从碎片化的巨页中回收内存。现代版本的Ceph在应用级禁用透明巨页以避免这种情况,但这仍然不能保证内核会立即回收未映射的内存。OSD有时仍然可能会超过它的内存目标。我们建议在系统中保留20%左右的额外内存,以防止OSD在临时高峰期或由于内核延迟回收空闲页而导致的OSD出现OOM。这个值可能会比需要的多或少取决于系统的具体配置。

在使用传统的FileStore后端时,页面缓存是用来缓存数据的,所以一般不需要调优,OSD的内存消耗一般与系统中每个守护进程的PG数量有关

仔细规划你的数据存储配置。在规划数据存储时,需要考虑重大的成本和性能权衡。同时进行操作系统操作,以及多个守护进程对单个驱动器同时请求读取和写入操作,会大大降低性能。

重要

由于Ceph在发送ACK之前必须先将所有数据写入日志(至少对XFS来说),所以日志和OSD的性能平衡真的很重要!在这里,Ceph的日志和OSD的性能是非常重要的。

OSD应该有足够的硬盘空间来存放对象数据。我们建议硬盘驱动器的最小容量为1T。考虑到较大磁盘的每GB的成本优势。我们建议将硬盘驱动器的价格除以千兆字节,得出每千兆字节的成本,因为较大的驱动器可能会对每千兆字节的成本有很大影响。例如,价格为75美元的1T硬盘,每千兆字节的成本为0.07美元。相比之下,价格为150美元的3T硬盘的成本为每千兆字节0.05美元。在上述例子中,使用1T硬盘通常会使每千兆字节的成本增加40%——使集群的成本效益大大降低。

Tips: 在一个磁盘上运行多个OSD,无论分区如何,都不是一个好主意

Tips: 在单一磁盘上运行OSD和显示器或者元数据服务器,无论分区如何,都不是一个好主意

存储驱动器在寻求时间、访问时间、读取和写入时间以及总吞吐量方面受到限制。这些物理限制会影响整体系统性能,特别是在恢复期间。我们建议为操作系统和软件使用一个专门驱动器,并且您在主机上运行的每个Ceph OSD daemon使用一个驱动器。大多数“慢OSD”问题的出现是由于在同一个驱动器上运行一个操作系统,多个OSD,或多个日志。由于在一个小型集群上排除性能问题的成本超过了额外的磁盘驱动器的成本,因此您可以通过避免过度消耗OSD存储驱动器的诱惑来优化您的集群设计规划。

您可以在每个硬盘驱动器上运行多个Ceph OSD Daemons,但这可能会导致资源征用,降低整体吞吐量。你可以在同一硬盘上存储日志和对象数据,但这可能会增加写日志和ACK到客户端所需要的时间。Ceph必须先写入到日志,然后再进行ACK写入。

ack写入:完成此类写入之后,将向客户端发送一个成功写入的ACK,所以称之为ACK写入

Ceph最佳实践规定,你应该在不同的驱动器上运行操作系统、OSD数据和OSD日志

提高性能的一个机会是使用固态硬盘来减少随机访问时间和读取延迟,同时加快吞吐量。与机械硬盘相比,固态硬盘每千兆字节的成本往往超过10倍以上,但固态硬盘的访问时间往往比机械硬盘至少快100倍。

固态硬盘没有活动的机械部件,所以他们不一定会受到与机械硬盘相同的限制。但固态硬盘确实有很大的局限性。在评估固态硬盘时,重要的是考虑顺序读取和写入的性能。当为多个OSD存储多个日志时,具有400MB/S顺序写入吞吐量的SSD可能比具有120MB/s顺序写入吞吐量的SSD性能要好的多。

重要

我们建议探索使用固态硬盘来提高性能。然而,在对SSD进行重大投资之前,我们强烈建议在审查SSD的性能指标和测试配置中测试SSD的性能

由于固态硬盘没有活动的机械部件,所以在Ceph中不需要使用大量存储空间的区域(如日志)使用固态硬盘是很有意义的。相对便宜的SSD可能会吸引你的经济意识。请谨慎使用。在选择使用Ceph的SSD时,仅有可接受的IOPS是不够的。日志和SSD有几个重要的性能注意事项:

•写入密集型语义:日志涉及到写密集型语义,因此您应该确保您选择部署的SSD在写入数据时的性能相当于或优于机械硬盘。廉价的固态硬盘在加速访问时间的同时,可能会引入写入延时,因为有时高性能硬盘的写入速度会比市场上一些更经济的固态硬盘快,因此,您应该确保您选择的固态硬盘在写入数据时的性能与机械硬盘相当或更好。•顺序写入:当您在SSD上存储多个日志时,您必须考虑到SSD的顺序写入限制,因为它们可能会同时处理对多个OSD日志的写入请求。•分区对齐:SSD性能的一个常见问题是,人们喜欢将硬盘分区作为最佳做法,但往往忽略了对SSD的正确分区对齐,这样会导致SSD的数据传输速度更慢。确保SSD分区正确对齐

虽然固态硬盘对于对象存储的成本较高,但通过将OSD的日志存储在固态硬盘上,并将OSD的对象存储存储在独立的机械硬盘上,可能会看到性能的显著提升。osd journal配置设置默认为/var/lib/ceph/osd/$cluster-id/journal。您可以将此路径挂载到SSD或者SSD分区,使其不只是与对象数据存储在同一硬盘上。

Ceph加速CephFS文件系统性能的一种方法是将CephFS元数据的存储与CephFS文件内容的存储隔离开来。Ceph为CephFS元数据提供了一个默认的元数据池。你永远不必为CephFS元数据创建一个池,但你可以为你的CephFS元数据池创建一个只指向主机的SSD存储介质的CRUSH映射层次结构。详情请参见将池映射到不同类型的OSDs。

•意思是可以将一个池的所有数据都存储到SSD类型的OSD

磁盘控制器对写入吞吐量也有很大影响。在选择磁盘控制器时要慎重考虑,确保不会造成性能瓶颈。

Tips:Ceph博客通常是对Ceph性能问题的一个很好的信息来源。更多详情请参加Ceph写吞吐量1和Ceph写吞吐量2

•http://ceph.com/community/ceph-performance-part-1-disk-controller-write-throughput/•http://ceph.com/community/ceph-performance-part-2-write-throughput-without-ssd-journals/

你可以在每台主机上运行多个OSD,但你应该确保你的OSD硬盘的总吞吐量之和不超过服务于客户端读取或写入所需的网络带宽。你还应该考虑集群在每台主机上存储的数据占整体数据的百分比。如果某个特定主机上的百分比很大,而该主机出现故障,可能会导致超过  full ratio 等问题,从而导致Ceph停止工作,作为防止数据丢失的安全规范措施。

当你在每个主机上运行多个OSD时,你还需要确保内核是最新的。请参阅OS建议中关于glibc和syncfs(2)的说明,以确保你的硬件在每个主机上运行多个OSD时,能按照预期的方式执行。

考虑从机架上的10Gbps+网络开始。在1Gbps网络上复制1TB的数据需要3个小时,而10TB需要30个小时!相比之下,使用10Gbps网络,复制时间分别需要20分钟和1小时。在petabyte规模的集群中,OSD磁盘的故障应该是一种预期,而不是例外。在考虑到价格/性能权衡的情况下,系统管理员会很欣赏PG能尽快从降级状态恢复到活动+清洁状态。此外,一些部署工具采用VLANS使硬件和网络布线更易于管理。使用802.1q协议的运营成本节省所抵消。当使用VLAN来处理集群和计算堆栈(例如OpenStack、CloudStack等)之间的VM流量时,也值得考虑10G以太网。每个网络的架上路由器还需要能够与吞吐量更快的骨干路由器进行通信,例如40Gbps到100Gbps。

您的服务器硬件应该有一个底层管理控制器(BMC)。管理和部署工具也可能会大量使用BMC,因此要考虑带外网络的管理成本/收益权衡。Hypervisor SSH访问、VM镜像上传、操作系统镜像安装、管理套接字等都会给网络带来巨大的负载。运行三个网络可能看起来似乎矫枉过正,但每个流量路径都代表了潜在的容量、吞吐量和/或性能瓶颈,在部署大规模数据集群之前,您应该仔细考虑。

BMC:Baseboard Management Controller,基板管理控制器

带外网络:OOB,全程Out Of Band,一套与任何业务数据网络没有关联的独立网络,在任何时候——即便是业务网络终端的情况下,网络控制中心都可以通过带外网络连接到各个服务器或者网络设备的管理接口或者console.

故障域是指任何阻止一个或多个OSD的故障。这可能是主机上的守护进程停止;硬盘故障、操作系统崩溃、网卡故障、电源故障、网络中断、断电等等。在规划硬件需求的时候,你必须平衡一下,把太多的责任放在太少的故障域中来降低成本,以及隔离每个潜在故障域所带来的额外成本

Ceph可以在廉价的商品硬件上运行。小型生产集群和开发集群可以用适中的硬件成功运行

进程类型硬件类型建议的最低标准

ceph-osd Processor最低一核

200-500MB/s 单核心

1000-3000IOPS 单核心

结果是复制之前的结果

结果可能会因为不同的CPU型号和Ceph功能而不同(纠删码池、压缩等)

ARM处理器可能会需要更多的核心

实际性能取决于许多因素,包括磁盘、网络、客户端吞吐量和延迟。我们强烈建议进行基准测试

RAM每个守护进程4GB以上(越多越好)

2-4GB 可以正常工作(可能会很慢)

低于2GB是不推荐的

Volume Storage每个守护进程对应一块硬盘

DB/WAL每个守护进程对应一个SSD分区(可选)

Network最少一块千兆以上的网卡(万兆网卡是被推荐的) ceph-mon Processor最低一核

RAM每个进程2GB以上的内存

Disk Space每进程10GB以上的硬盘空间

Network最少一块千兆以上的网卡 ceph-mds Processor最低一核

RAM每个进程2GB以上的内存

Disk Space每个进程1MB以上的硬盘空间

Network最少一块千兆以上的网卡

官方英文视频教程参考官网这个网址:

https://www.proxmox.com/en/training/video-tutorials/item/install-ceph-server-on-proxmox-ve

默认是订阅版,如果不做修改,在使用pveceph init进行ceph初始化安装的时候会将整个环境破坏,切记!【 PVE版本6.1

删除订阅通知弹窗

通过SSH连接到Proxmox机器或通过PVE Web界面使用控制台,输入以下命令,然后清除浏览器缓存:

安装ntp,ceph集群对时间同步的要求很高。需要安装ntp服务: apt-get install ntp -y 安装完成之后会自动启动并同步debian的时间服务器,注意,是联网的情况下,如果不连接外网,需要设定内网的ntp服务。

提示我ceph没有安装。【后来发现是国内网络问题反复安装几次后成功了】

我们手动安装一下luminous版本试一下,通过SSH登陆服务器:

在pve2和pve3上面登录web界面创建mon:

将sdb磁盘加入到OSD,对pve2和pve3做同样的操作,完成后如下:

Pool的名称是Ceph-vm,根据自己需要取,size=2表示正常的副本数,min size=1表示最少的数据副本数,pg_num=128表示逻辑存储单元数未128,具体设置的策略请参考ceph相关文档。

ID可以自定义。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/513412.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-19
下一篇2023-06-19

发表评论

登录后才能评论

评论列表(0条)

    保存