0
点赞
收藏
分享

微信扫一扫

CEPH 存储集群

曾宝月 2022-05-23 阅读 53


CEPH 存储集群

所有Ceph 部署都始于​​Ceph 存储集群​​。基于RADOS Ceph 对象存储集群包括两类守护进程:term:对象存储守护进程OSD 把存储节点上的数据存储为对象;term:Ceph 监视器

MON 维护集群运行图的主拷贝。一个Ceph 集群可以包含数千个存储节点,最简系统至少需要一个监视器和两个OSD 才能做到数据复制。

Ceph 文件系统、Ceph 对象存储、和Ceph 块设备从Ceph 存储集群读出和写入数据。

配置

Ceph 作为集群时可以包含数千个对象存储设备(OSD 。最简系统至少需要二个OSD 做数据复制。要配置OSD 集群,你得把配置写入配置文件。Ceph 对很多选项提供了默认值,你可以在配置文件里覆盖它们;另外,你可以使用命令行工具修改运行时配置。

Ceph 启动时要激活三类守护进程:

  1. CEPH 存储集群_ceph(必备
  2. (必备
  3. cephfs 必备
    各进程、守护进程或工具都会读取配置文件。一个进程可能需要不止一个守护进程例程的信息
    多个上下文);一个守护进程或工具只有关于单个守护进程例程的信息(单上下文)。
  4. ​​Ceph 监视器​​ ceph-mon
  5. ​​Ceph OSD 守护进程​​ ceph-osd
    要支持 ​​Ceph 文件系统​​功能,它还需要运行至少一个 ​​Ceph 元数据服务器​​ ceph-mds );支持​​Ceph 对象存储​​功能的集群还要运行网关守护进程(radosgw )。为方便起见,各类守护进程都有一系列默认值(很多由ceph/src/common/config_opts.h 配置),你可以用Ceph 配置文件覆盖这些默认值。

    配置文件

    启动Ceph 存储集群时,各守护进程都从同一个配置文件(即默认的ceph.conf )里查找它自己的配置。手动部署时,你需要创建此配置文件;用部署工具ceph-
    deploy chef 等)创建配置文件时可以参考下面的信息。配置文件定义了:
  6. 集群身
  7. 认证配
  8. 集群成
  9. 主机
  10. 主机IP
  11. 密钥环路
  12. 日志路
  13. 数据路
  14. 其它运行时选
    默认的Ceph 配置文件位置相继排列如下:
  1. $CEPH_CONF 就是$CEPH_CONF 环境变量所指示的路径)
  2. -c path/path 就是-c 命令行参数)
  3. /etc/ceph/ceph.conf
  4. ~/.ceph/config
  5. ./ceph.conf 就是当前所在的工作路径

Ceph 配置文件使用ini 风格的语法,以分号(;) 和井号(#) 开始的行是注释,如下:

CEPH 存储集群_ceph_02

配置段落

Ceph 配置文件可用于配置存储集群内的所有守护进程、或者某一类型的所有守护进程。要配置一系列守护进程,这些配置必须位于能收到配置的段落之下,比如:

[global]

  1. admin socket
  2. log file
  3. pid file
  4. mon data
  5. mon cluster log file
  6. osd data
  7. osd journal
  8. mds data
  9. rgw data



CEPH 存储集群_ceph_03

CEPH 存储集群_ceph_04

硬盘和文件系统推荐

准备硬盘

Ceph 注重数据安全,就是说,​​Ceph 客户端​​收到数据已写入存储器的通知时,数据确实已写入硬盘。使用较老的内核(版本小于2.6.33 )时,如果日志在原始硬盘上,就要禁用写缓存;较新的内核没问题。

hdparm 禁用硬盘的写缓冲功能。


CEPH 存储集群_ceph_05

在生产环境,我们建议操作系统和​​Ceph OSD 守护进程​​数据分别放到不同的硬盘。如果必须把数据和系统放在同一硬盘里,最好给数据分配一个单独的分区。

文件系统

Ceph OSD 依赖于底层文件系统的稳定性和性能。


CEPH 存储集群_ceph_06

当前,我们推荐部署生产系统时使用xfs 文件系统;推荐用btrfs 做测试、开发和其他不

CEPH 存储集群_ceph_07 CEPH 存储集群_ceph_08

CEPH 存储集群_ceph_09 xfs ext4 能提供当前部署所必需的稳定性。 btrfs 开发在迅速推进,所以它的用户应该有能力经常更新到最新内核发布,而且能跟踪严重缺陷的修正进度。

OSD 守护进程有赖于底层文件系统的扩展属性(XATTR )存储各种内部对象状态和元数据。底层文件系统必须能为XATTR 提供足够容量,btrfs 没有限制随文件的xattr 元数据总

量;xfs 的限制相对大(64KB ,多数部署都不会有瓶颈;ext4 的则太小而不可用。

使用ext4 文件系统时,一定要把下面的配置放于ceph.conf 配置文件的[osd] 段下;btrfs xfs 时可以选填。


CEPH 存储集群_ceph_10


文件系统背景知识

XFS btrfs ext4 ​​比较 ​​ext3 而言,在高伸缩性数据存储方面有几个优势。

XFS btrfs ext4 都是​​日志文件系统​​,这使得在崩溃、断电后恢复时更健壮,因为这些文件系统在写入数据前会先记录所有变更。

xfs Silicon Graphics 开发,是一个成熟、稳定的文件系统。相反,btrfs 是相对年轻的文件系统,它致力于实现系统管理员梦寐以求的大规模数据存储基础,和其他Linux 文件系统相比它有独一无二的功能和优势。

btrfs 是写时复制(​​copy-on-write ​​cow )文件系统,它支持文件创建时间戳和校验和

(可校验元数据完整性)功能,所以它能探测到数据坏副本,并且用好副本修复。写时复制功 能是说btrfs 支持可写文件系统快照。btrfs 也支持透明压缩和其他功能。

btrfs 也集成了多设备管理功能,据此可以在底层支持异质硬盘存储,和数据分配策略。未来开发社区还会提供fsck 、拆分、数据加密功能,这些诱人的功能正是Ceph 集群的理想选择。

配置CEPH


你启动Ceph 服务时,初始化进程会把一系列守护进程放到后台运行。​​Ceph 存储集群​​运行两种守护进程:



描述: [global] 下的配置影响Ceph 集群里的所有守护进程。

实例: auth supported = cephx

[osd]

[osd] 配置响存集群的所ceph-osd ,并会覆: [global] 同一项。

: osd journal size = 1000


[mon]

[mon] 配置响集里的ceph-mon ,并会覆: [global] 同一项。

: mon addr = 10.0.0.101:6789


[mds]

[mds] 配置响集里的ceph-mds ,并会覆: [global] 同一项。

host = myserver01


:

[client]

[client] 配置响所客户(如Ceph 系统挂载块设: 等)。

log file = /var/log/ceph/radosgw.log

:

全局设置影响集群内所有守护进程的例程,所以[global] 可用于设置适用所有守护进程的选项。但可以用这些覆盖[global] 设置:

  1. [osd] [mon] [mds] 下更改某一类进程的配置
  2. 更改特定进程的设置,如 [osd.1]


CEPH 存储集群_ceph_11

覆盖全局设置会影响所有子进程,明确剔除的例外。典型的全局设置包括激活认证,例如:

CEPH 存储集群_ceph_12

你可以统一配置一类守护进程。配置写到[osd] [mon] [mds] 下时,无须再指定某个特定例程,即可分别影响所有OSD 、监视器、元数据进程。

典型的类范畴配置包括日志尺寸、filestore 选项等,如:


CEPH 存储集群_ceph_13

你也可以配置某个特定例程。一个例程由类型和及其例程ID 确定,OSD 的例程ID 只能是数字,但监视器和元数据服务器的ID 可包含字母和数字。


CEPH 存储集群_ceph_14

如果你想配置某个Ceph 网关客户端,可以用点(. )分隔的守护进程和例程来指定,例如:


CEPH 存储集群_ceph_15


CEPH 存储集群_ceph_16

元变量

元变量大大简化了集群配置。Ceph 会把配置的元变量展开为具体值;元变量功能很强大,可以用在配置文件的[global] [osd] [mon] [mds] 段里,类似于Bash shell 扩展。

Ceph 支持下列元变量:

$cluster

描述: 展开为存储集群名字,在同一套硬件上运行多个集群时有用。



实例: /etc/ceph/$cluster.keyring

默认值: ceph

$type

描述: 可展开为mds osd mon 中的一个,有赖于当前守护进程的类型。

实例: /var/lib/ceph/$type

$id

描述: 展开为守护进程标识符;osd.0 应为0 mds.a a


实例: /var/lib/ceph/$type/$cluster-$id

$host

描述: 展开为当前守护进程的主机名。

$name

描述: 展开为$type.$id

实例: /var/run/ceph/$cluster-$name.asok

共有选项

​​硬件推荐​​段提供了一些配置Ceph 存储集群的硬件指导。一个​​Ceph 节点​​可以运行多个进程,例如一个节点有多个硬盘,可以为每个硬盘配置一个ceph-osd 守护进程。理想情况下一台主机应该只运行一类进程,例如:一台主机运行着ceph-osd 进程,另一台主机运行

ceph-mds 进程,ceph-mon 进程又在另外一台主机上。

各节点都用host 选项指定主机名字,监视器还需要用addr 选项指定网络地址和端口(即域名或IP 地址)。基本配置文件可以只指定最小配置。例如:


CEPH 存储集群_ceph_17


CEPH 存储集群_ceph_18

Important

CEPH 存储集群_ceph_19

CEPH 存储集群_ceph_20CEPH 存储集群_ceph_21hostname -s 即可得到短名字。不要给初始监视器之外的例程设置host ,除非你想手动部署;一定不能用于chef ceph-deploy ,这些工具会自动获取正确结果。

网络

关于Ceph 网络配置的讨论见​​网络配置参考​​

监视器

典型的Ceph 生产集群至少部署3 ​​监视器​​来确保高可靠性,它允许一个监视器例程崩溃。奇数个监视器(3 个)确保PAXOS 算法能确定一批监视器里哪个版本的​​集群运行图​​是最新的。


CEPH 存储集群_ceph_22

Note

Ceph 监视器默认监听6789 端口,例如:


CEPH 存储集群_ceph_23

默认情况下,Ceph 会在下面的路径存储监视器数据:


CEPH 存储集群_ceph_24

你必须手动或通过部署工具(ceph-deploy )创建对应目录。前述元变量必须先全部展开,名为“ceph的集群将展开为:


CEPH 存储集群_ceph_25


其它细节见​​监视器配置参考​​

认证

New in version Bobtail: 0.56

对于v0.56 及后来版本,要在配置文件的[global] 中明确启用或禁用认证。


CEPH 存储集群_ceph_26

另外,你应该启用消息签名,详情见​​Cephx 配置参考​​​​Cephx 认证​​


CEPH 存储集群_ceph_27

Important

OSDS

通常,Ceph 生产集群在一个节点上只运行一个​​Ceph OSD 守护进程​​,此守护进程在一个存储驱动器上只运行一个filestore ;典型部署需指定日志尺寸。例如:


CEPH 存储集群_ceph_28

默认情况下,Ceph 认为你把OSD 数据存储到了以下路径:


CEPH 存储集群_ceph_29

你必须手动或通过部署工具(ceph-deploy 创建对应目录,名为“ceph的集群其元变量完全展开后,前述的目录将是:


CEPH 存储集群_ceph_30

你可以用osd data 选项更改默认值,但我们不建议修改。用下面的命令在新OSD 主机上创建默认目录:


CEPH 存储集群_ceph_31

osd data 路径应该指向一个独立硬盘的挂载点,这个硬盘应该独立于操作系统和守护进程所在硬盘。按下列步骤准备好并挂载:


CEPH 存储集群_ceph_32

我们推荐用xfs btrfs 文件系统,命令是:command:mkfs 配置详细步骤见​​OSD 配置参考​​

心跳

在运行时,OSD 守护进程会相互检查邻居OSD 、并把结果报告给Ceph 监视器,一般不需要更改默认配置。但如果你的网络延时比较大,也许需要更改某些选项。

其它细节部分见​​监视器与OSD 交互的配置​​


日志、调试

有时候你可能遇到一些麻烦,需要修改日志或调试选项,请参考​​调试和日志记录​​

CEPH.CONF 实例


CEPH 存储集群_ceph_33


CEPH 存储集群_ceph_34

运行时更改

Ceph 可以在运行时更改ceph-osd ceph-mon ceph-mds 守护进程的配置,此功能在增加/降低日志输出、启用/禁用调试设置、甚至是运行时优化的时候非常有用,下面是运行时配置方法:


CEPH 存储集群_ceph_35

osd mon mds 中的一个替代{daemon-type} ,你可以用星号(* )更改一类进程的所有例程配置、或者更改某一具体进程ID (即数字或字母)的配置。例如提高名

osd.0 ceph-osd 进程之调试级别的命令如下:


CEPH 存储集群_ceph_36

ceph.conf 文件里配置时用空格分隔关键词;但在命令行使用的时候要用下划线或连字符(_ - 分隔,例如debug osd 变成debug-osd

查看运行时配置

如果你的Ceph 存储集群在运行,而你想看一个在运行进程的配置,用下面的命令:


CEPH 存储集群_ceph_37

如果你现在位于osd.0 所在的主机,命令将是:


CEPH 存储集群_ceph_38

运行多个集群

Ceph 可以实现在同一套硬件上运行多个集群,运行多个集群与同一集群内用CRUSH 规则控制多个存储池相比提供了更高水平的隔离。独立的集群需配备独立的监视器、OSD 和元数据服务器进程。默认配置下集群名字是“ceph” ,这意味着你得把配置文件保存

/etc/ceph 下的ceph.conf

详情见​​ceph-deploy new ​​.. _ceph-deploy new: ../ceph-deploy-new

运行多个集群时,你必须为集群命名并用这个名字保存配置文件。例如,名

openstack 的集群其配置文件将是/etc/ceph 下的openstack.conf



CEPH 存储集群_ceph_39

CEPH 存储集群_ceph_40

独立的集群意味着独立数据盘和日志,它们不能在集群间共享。根据前面的​​元变​​

​​​​$cluster 元变量对应集群名字(就是前面的openstack )。多处设置都用$cluster 元变量,包括:

keyring


$cluster 元变量相关的默认路径见​​常规选项​​​​OSD 选项​​​​监视器选项​​​​MDS ​​​​​​ ​​RGW 选项​​​​日志选项​​

创建默认目录和文件时,路径里该用集群名的地方要注意,例如:


CEPH 存储集群_ceph_41

CEPH 存储集群_ceph_42

CEPH 存储集群_ceph_43


要调动一个名字不是ceph 的集群,要给ceph 命令加-c {filename}.conf 选项,例如:


CEPH 存储集群_ceph_44

网络配置参考

网络配置对构建高性能​​Ceph 存储集群​​来说相当重要。Ceph 存储集群不会代表​​Ceph 客户端​​​​​​行请求路由或调度,相反,Ceph 客户端(如块设备、CephFS REST 网关)直接向OSD 请求,然后OSD 为客户端执行数据复制,也就是说复制和其它因素会额外增加集群网的负载。

我们的快速入门配置提供了一个简陋的​​Ceph 配置文件​​,其中只设置了监视器IP 地址和守护进程所在的主机名。如果没有配置集群网,那么Ceph 假设你只有一个公共网。只用一个网可以运行Ceph ,但是在大型集群里用单独的集群网可显著地提升性能。

我们建议用两个网络运营Ceph 存储集群:一个公共网(前端)和一个集群网(后端)。为此,​​节点​​得配备多个网卡,见硬件推荐——网络


CEPH 存储集群_ceph_45运营两个独立网络的考量主要有:

  1. 性能:OSD 为客户端处理数据复制,复制多份时OSD 间的网络负载势必会影响到客户端和Ceph 集群的通讯,包括延时增加、产生性能问题;恢复和重均衡也会显著增加公共网延时。关于Ceph 如何复制参见​​伸缩性和高可用性​​;关于心跳流量参见​​监视​​​​OSD 的交互​​
  2. 安全:大多数人都是良民,很少的一撮人喜欢折腾拒绝服务攻ji( DoS 。当OSD

间的流量失控时,归置组再也不能达到active + clean 状态,这样用户就不能

读写数据了。挫败此类攻ji的一种好方法是维护一个完全独立的集群网,使之不能直 连互联网;另外,请考虑用​​消息签名​​防止欺骗攻ji

防火墙

守护进程默认会​​绑定​​6800:7300 间的端口,你可以更改此范围。更改防火墙配置前先检查下iptables 配置。


CEPH 存储集群_ceph_46

一些Linux 发行版的规则拒绝除SSH 之外的所有网卡的所有入栈连接,例如:


CEPH 存储集群_ceph_47

你得先删掉公共网和集群网对应的这些规则,然后再增加安全保护规则。

监视器防火墙

监视器默认监听6789 端口,而且监视器总是运行在公共网。按下例增加规则时,要

{iface} 替换为公共网接口(eth0 eth1 等等){ip-address} 替换为公共IP {netmask} 替换为公共网掩码。


CEPH 存储集群_ceph_48

MDS 防火墙

​​元数据服务器​​会监听公共网 6800 以上的第一个可用端口。需要注意的是,这种行为是不确定的,所以如果你在同一主机上运行多个OSD MDS 、或者在很短的时间内重启了多个守护进程,它们会绑定更高的端口号;所以说你应该预先打开整个6800-7300 端口区间。按下例增加规则时,要把{iface} 替换为公共网接口(eth0 eth1 等等){ip- address} 替换为公共网IP {netmask} 替换为公共网掩码。

例如:


CEPH 存储集群_ceph_49

OSD 防火墙

OSD 守护进程默认​​绑定 ​​6800 起的第一个可用端口,需要注意的是,这种行为是不确定的,所以如果你在同一主机上运行多个OSD MDS 、或者在很短的时间内重启了多个守护进程,它们会绑定更高的端口号。一主机上的各个OSD 最多会用到4 个端口:

  1. 一个用于和客户端、监视器通讯
  2. 一个用于发送数据到其他OSD
  3. 两个用于各个网卡上的心跳


CEPH 存储集群_ceph_50

当某个守护进程失败并重启时没释放端口,重启后的进程就会监听新端口。你应该打开整个

6800-7300 端口区间,以应对这种可能性。

如果你分开了公共网和集群网,必须分别为之设置防火墙,因为客户端会通过公共网连接、而 其他OSD 会通过集群网连接。按下例增加规则时,要把{iface} 替换为网口

eth0 eth1 等等){ip-address} 替换为公共网或集群网

IP {netmask} 替换为公共网或集群网掩码。例如:


CEPH 存储集群_ceph_51

CEPH 存储集群_ceph_52

CEPH 存储集群_ceph_53

CEPH 网络

Ceph 的网络配置要放到[global] 段下。前述的5 分钟快速入门提供了一个简陋的​​Ceph​​​​配置文件​​,它假设服务器和客户端都位于同一网段,Ceph 可以很好地适应这种情形。然而Ceph 允许配置更精细的公共网,包括多IP 和多掩码;也能用单独的集群网处理OSD 心跳、对象复制、和恢复流量。不要混淆你配置的IP 地址和客户端用来访问存储服务的公共网地址。典型的内网常常是192.168.0.0 10.0.0.0


CEPH 存储集群_ceph_54

CEPH 存储集群_ceph_55


CEPH 存储集群_ceph_56


CEPH 存储集群_ceph_57

CEPH 存储集群_ceph_58Note

配置完几个网络后,可以重启集群或挨个重启守护进程。Ceph 守护进程动态地绑定端口,所以更改网络配置后无需重启整个集群。

公共网

CEPH 存储集群_ceph_59要配置一个公共网,把下列选项加到配置文件的 段下。


CEPH 存储集群_ceph_60

集群网


如果你声明了集群网,OSD 将把心跳、对象复制和恢复流量路由到集群网,与单个网络相比这会提升性能。要配置集群网,把下列选项加进配置文件的[global] 段。


CEPH 存储集群_ceph_61

为安全起见,从公共网或互联网到集群网应该是不可达的。


CEPH 守护进程

有一个网络配置是所有守护进程都要配的:各个守护进程都必须指定host Ceph 也要求指定监视器IP 地址及端口。


CEPH 存储集群_ceph_62

CEPH 存储集群_ceph_63


CEPH 存储集群_ceph_64

CEPH 存储集群_ceph_65


CEPH 存储集群_ceph_66

并非一定要给守护进程设置IP 地址。如果你有一个静态配置,且分离了公共网和集群网,Ceph 允许你在配置文件里指定主机的IP 地址。要给守护进程设置静态IP ,可把下列选项加到ceph.conf


CEPH 存储集群_ceph_67


CEPH 存储集群_ceph_68


CEPH 存储集群_ceph_69

网络配置选项

网络配置选项不是必需的,Ceph 假设所有主机都运行于公共网,除非你特意配置了一个集群网。

公共网


公共网配置用于明确地为公共网定义IP 地址和子网。你可以分配静态IP public addr 覆盖public network 选项。

public network

描述: 网(端)IP 和掩(如 192.168.0.0/24 ),置[global] 多个网用号分

类型: {ip-address}/{netmask} [, {ip-address}/{netmask}]

是否

必需: No

默认

: N/A


public addr

描述: 用于公共网(前端)的IP 地址。适用于各守护进程。



类型: IP 地址



是否必需: No



默认值: N/A


集群网

集群网配置用来声明一个集群网,并明确地定义其IP 地址和子网。你可以配置静态IP 或为某

OSD 守护进程配置cluster addr 以覆盖clusternetwork 选项。

cluster network

描述: 网(端)IP 及掩(如 10.0.0.0/24 ),置[global] 多个网用号分

类型: {ip-address}/{netmask} [, {ip-address}/{netmask}]

是否必

: No

默认

: N/A

cluster addr


描述: 集群网(后端) IP 地址。置于各守护进程下。



类型: Address



是否必需: No



默认值: N/A


绑定


绑定选项用于设置OSD MDS 默认使用的端口范围,默认范围是6800:7300 。确保​​防火​​​​​​放了对应端口范围。

你也可以让Ceph 守护进程绑定到IPv6 地址。

ms bind port min

描述: OSD 或MDS 可绑定的最小端口号。



类型: 32-bit Integer



默认值: 6800

是否必需: No

ms bind port max


描述: OSD 或MDS 可绑定的最大端口号。



类型: 32-bit Integer



默认值: 7300

是否必需: No.

ms bind ipv6

描述: 允许Ceph 守护进程绑定IPv6 地址。



类型: Boolean



默认值: false

是否必需: No


主机


Ceph 配置文件里至少要写一个监视器、且每个监视器下都要配置mon addr 选项;每个监视器、元数据服务器和OSD 下都要配host 选项。

mon addr

描述: {hostname}:{port} 列表用以客户Ceph 器。


未设置,Ceph 查找[mon.*] 段。

类型: String



是否必

: No

默认

: N/A

host

描述: 名。选项于特守护程,[osd.0]

类型: String



是否必需: Yes, for daemon instances.



默认值: localhost


CEPH 存储集群_ceph_70

CEPH 存储集群_ceph_71


CEPH 存储集群_ceph_72

CEPH 存储集群_ceph_73


CEPH 存储集群_ceph_74

TCP

Ceph 默认禁用TCP 缓冲。

ms tcp nodelay



描述:

Ceph ms tcp nodelay 使系统尽快不缓冲发送每个请求。禁

​​Nagle 算法​​可增加吞吐量,但会引进延时。如果你遇到大量小包,可以禁ms tcp nodelay 试试。


类型: Boolean



是否

必需: No

默认

: true


ms tcp rcvbuf

描述: 网络套接字接收缓冲尺寸,默认禁用。



类型: 32-bit Integer



是否必需: No


默认值: 0

ms tcp read timeout



描述:

如果一客户端或守护进程发送请求到另一个Ceph 守护进程,且没有断开不再使用的连接,在ms tcp read timeout 指定的秒数之后它将被标记为空闲。


类型: Unsigned 64-bit Integer



是否

必需: No

默认

: 900 15 minutes.

CEPHX 配置参考

(认证配置)

cephx 协议已默认开启。加密认证要耗费一定计算资源,但通常很低。如果您的客户端和服务器网络环境相当安全,而且认证的负面效应更大,你可以关闭它,通常不推荐您这么做


CEPH 存储集群_ceph_75

Note

关于创建用户请参考​​用户管理​​;关于Cephx 的体系结构请参考​​体系结构——高可用性认证​​

举报

相关推荐

0 条评论