Ceph存储集群&配置

Ceph存储集群

导读:
1.从零部署一个ceph集群
2.ceph block device与cephfs快速入门
3.ceph 对象存储快速入门

Overview

一个Ceph存储群集至少需要一个Ceph monitorCeph ManagersCeph OSD(对象存储守护程序)。 运行Ceph文件系统客户端时,也需要Ceph Metadata Server

在这里插入图片描述

  • Monitors:Ceph Monitor(ceph-mon)维护集群状态的映射,包括monitor映射,manager映射,OSD映射,MDS映射和CRUSH映射。 这些映射是Ceph守护程序相互协调所需的关键群集状态。 monitor还负责管理守护程序和客户端之间的身份验证。 通常至少需要三个monitor才能实现冗余和高可用性。
  • Managers:ceph manager daemon(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager daemon还托管基于python的模块,以管理和公开Ceph集群信息,包括基于Web的Ceph仪表板和REST API。 高可用性通常至少需要两个管理器。
  • Ceph OSDs:ceph osd(object storage daemon,ceph-osd)存储数据,处理数据复制,恢复,重新平衡,并通过检查其他Ceph OSD守护程序的heartbeat来向Ceph监视器和管理器提供一些监视信息。通常至少需要3个Ceph OSD才能实现冗余和高可用性。
  • MDSs:ceph metadata server(ceph-mds)Ceph文件系统存储元数据(Ceph块设备和Ceph对象存储不使用MDS)。 Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls,find等),而不会给Ceph存储集群带来巨大负担

Ceph将数据作为对象存储在逻辑存储池中。 使用CRUSH算法,Ceph计算哪个placement group(pg,中译:放置组)应包含该对象,并进一步计算哪个Ceph OSD守护程序应存储该pg。 CRUSH算法使Ceph存储集群能够动态扩展,重新平衡和恢复。

configuration

storage device

在存储数据的磁盘上有两个ceph守护进程,osd和mon。

  • osd:是大多数数据存储在Ceph中的地方。 一般而言,每个OSD都由单个存储设备(例如传统硬盘(HDD)或固态磁盘(SSD))支持。 OSD也可以由多种设备组合来支持,例如用于大多数数据的HDD和用于某些元数据的SSD(或SSD的分区)。 群集中OSD的数量通常取决于存储的数据量,每个存储设备的容量以及冗余(复制或擦除编码)的级别和类型。
  • mon:管理关键的群集状态,例如群集成员身份和身份验证信息。 对于较小的群集,只需要几GB的容量,尽管对于较大的群集,监控器数据库可以达到数十或数百GB的容量

后端OSD

OSD可以通过两种方式管理它们存储的数据。 从Luminous 12.2.z版本开始,新的默认(推荐)后端是BlueStore。 在这之前,默认(也是唯一的选项)是FileStore。

filestore

FileStore是在Ceph中存储对象的传统方法。 它依赖于标准文件系统(通常为XFS)以及键/值数据库(传统为LevelDB,现在为RocksDB)来获取某些元数据。但是由于其总体设计以及对用于存储对象数据的传统文件系统的依赖,因此存在许多性能缺陷。

bluestore settings

Ceph存储集群&配置_第1张图片

BlueStore是专用于存储的后端,专门用于管理Ceph OSD工作负载的磁盘上的数据。 BlueStore的主要功能包括:

  • 直接管理存储设备。 BlueStore使用原始块设备或分区。这避免了可能影响性能或增加复杂性的任何中间抽象层(例如XFS之类的本地文件系统)。
  • RocksDB的元数据管理。嵌入RocksDB的键/值数据库管理内部元数据,例如从对象名称到磁盘上块位置的映射。
  • 完整的数据和元数据校验和。默认情况下,所有写入BlueStore的数据和元数据都受到一个或多个校验和的保护。未经验证,不会从磁盘读取任何数据或元数据或将其返回给用户。
  • 压缩。写入的数据在写入磁盘之前可以选择压缩。
  • 多设备元数据分层。 BlueStore允许将其内部日志(预写日志)写入单独的高速设备(例如SSD,NVMe或NVDIMM),以提高性能。如果有大量的更快的存储空间,内部元数据也可以存储在更快的设备上。
  • 高效的写时复制。 RBD和CephFS快照依赖于在BlueStore中有效实现的写时复制克隆机制。这将为常规快照和擦除代码池(依赖克隆实现高效的两阶段提交)提供高效的IO。

集群至少运行一台Ceph元数据服务器(ceph-mds), 支持Ceph对象存储的集群运行Ceph网关守护程序(radosgw)。每个守护进程都有一系列配置选项,每个配置选项都有一个默认值。 我们可以通过更改这些配置选项来调整系统的行为。

config names

配置由小写字母和下划线组成唯一的名称。在命令行指定配置的时候下划线( _ )和破折号( - )是等效的,在配置文件中,也可以通过空格代替。

配置资源

每个Ceph守护进程,进程和库都将从以下列出的几个来源中提取其配置。 如果同时存在,则下列列表中,位置靠下的优先级高。

  • 编译的默认值

  • 监视器集群的集中式配置数据库

  • 存储在本地主机上的配置文件

  • 环境变量

  • 命令行参数

  • 管理员设置的运行时覆盖的值

Ceph进程在启动时要做的第一件事就是解析通过命令行,环境和本地配置文件提供的配置选项。 然后,该过程将与mon集群联系,以检索整个群集集中存储的配置。 一旦可获得完整的配置,则将继续执行守护进程。

启动项

有一些配置项会影响与mon的关联,进行身份验证和检索集群存储的配置的能力,因此可能需要将其本地存储在节点上并在本地配置文件中进行设置。这些选项包括:

  • mon_host:集群的监视器列表
  • mon_dns_serv_name:DNS SRV记录的名称,该记录用于检查以通过DNS识别集群监视器
  • mon_data, osd_data, mds_data, mgr_data等:定义守护程序将数据存储在哪个本地目录中。
  • keyring, keyfile, and/or key:指定用于与监视器进行身份验证的身份验证凭据

在大多数情况下,这些默认值都是合适的,但mon_host选项除外,该选项标识群集的监视器的地址。使用DNS标识监视器时,可以完全避免使用本地ceph配置文件。

跳过Mon配置

可以通过--no-mon-config选项跳过从集群监视器检索配置的步骤。 在完全通过配置文件管理配置或监视器集群当前处于关闭状态但需要完成一些维护活动的情况下,这很有用。

配置段

任何给定的进程或守护程序的每个配置选项都有一个值。 但是,选项的值可能在不同的守护程序类型之间变化,甚至是同一类型的守护程序也可能不同。 存储在监视器配置数据库或本地配置文件中的Ceph选项分为几部分,以指示它们适用于哪些守护程序或客户端。

  • global:配置在这个段中的配置项会影响所有进程。

    例如:

    log_file = /var/log/ceph/$cluster-$type.$id.log
    
  • mon:mon下的设置会影响Ceph存储群集中的所有ceph-mon守护程序,并覆盖global中的相同设置。

    例如:

    mon_cluster_log_to_syslog = true
    
  • mgr:mgr部分中的设置会影响Ceph Storage Cluster中的所有ceph-mgr守护程序,并在global中覆盖相同的设置。

    例如:

    mgr_stats_period = 10
    
  • osd:osd下的设置会影响Ceph Storage Cluster中的所有ceph-osd守护进程,并覆盖global中的相同设置。

    例如:

    osd_op_queue = wpq
    
  • mds:mds部分中的设置会影响Ceph Storage Cluster中的所有ceph-mds守护进程,并覆盖global中的相同设置。

    例如:

    mds_cache_memory_limit = 10G
    
  • client:客户端下的设置会影响所有Ceph客户端(例如已安装的Ceph文件系统,已安装的Ceph块设备等)以及Rados Gateway(RGW)守护程序。

    例如:

    objecter_inflight_ops = 512
    

    部分还可以指定单个客户端的名称。例如指定客户端ceph-adminrgw的端口

    [client.rgw.ceph-admin]
    rgw_frontends = "civetweb port=80"
    

    如果在同一部分中指定了相同配置选项的多个值,则以最后一个值为准。

    本地配置文件中的值始终优先于监视器配置数据库中的值,而不管它们出现在哪个部分中。

元变量(metavariables)

元变量极大地简化了Ceph存储集群的配置。 在配置值中设置了元变量后,Ceph会在使用配置值时将元变量扩展为具体值。 Ceph元变量类似于Bash shell中的变量扩展。

Ceph支持以下元变量:

  • $cluster:Ceph存储群集名称。

    例如:

    /etc/ceph/$cluster.keyring
    

    默认值:ceph

  • $type:扩展为守护程序或进程类型

    例如:

    /var/lib/ceph/$type
    
  • $id:守护进程或者客户端身份标识

    例如:

    /var/lib/ceph/$type/$cluster-$id
    
  • $host:运行进程的主机名

  • $name:扩展为$type.$id.

    例如:

    /var/run/ceph/$cluster-$name.asok
    
  • $pid:扩展为守护进程id

    例如:

    /var/run/ceph/$cluster-$name-$pid.asok
    

配置文件

启动时,Ceph进程在以下位置搜索配置文件:

  1. $CEPH_CONF (CEPH_CONF环境变量)
  2. -c path/path (-c参数指定的路径)
  3. /etc/ceph/$cluster.conf
  4. ~/.ceph/$cluster.conf
  5. ./$cluster.conf (i.e., in the current working directory)
  6. 在 FreeBSD系统仅在, /usr/local/etc/ceph/$cluster.conf

$cluster指的是集群的名称

配置文件,段的名称

配置文件分为几部分。 每个部分都必须以有效的配置部分名称开头,并用方括号括起来。

[global]
fsid = 1362b160-ef6a-42d9-9833-8094b97408ce
mon_initial_members = ceph-admin
mon_host = 10.10.128.174
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 10.10.128.0/24

[client.rgw.ceph-admin]
rgw_frontends = "civetweb port=80"
配置文件选项值

配置中的值为字符串,如果太长了,我们想进行换行可以使用\符号

[global]
foo = long long ago\
long ago

如果值当中出现空格,我们不想其被隐藏,可以使用单引号或者双引号将其包起来

[global]
line = "to be, or not to be"

值当中不允许出现=,#、; 和[符号,如果需要,要使用\进行转义

[global]
secret = "i love \# and \["

mon数据库配置

监视群集管理整个群集可以使用的配置选项数据库,从而可以简化整个系统的中央配置管理。 可以并且应该将绝大多数配置选项存储在此处,以简化管理和提高透明度。

少数设置可能仍需要存储在本地配置文件中,因为它们会影响连接到监视器,验证和获取配置信息的能力。 在大多数情况下,这仅限于mon_host选项,尽管也可以通过使用DNS SRV记录来避免。

命令行获取

以下CLI命令用于配置群集:

  • ceph config dump查看集群的整个配置数据库

  • ceph config get 将显示特定的守护程序或客户端的配置,该配置存储在监视器的配置数据库中。

  • ceph config set 将在监视器的配置数据库中设置一个配置选项。

  • ceph config show 将显示正在运行的守护程序的报告运行配置。如果还使用本地配置文件,或者在命令行或运行时覆盖了选项,则这些设置可能与监视器存储的设置不同。选项值的来源报告为输出的一部分。

  • ceph config assimilate-conf -i <输入文件> -o <输出文件>将从输入文件中提取配置文件,并将所有有效选项移至监视器的配置数据库。监视器无法识别,无效或无法控制的任何设置都将在输出文件中存储的简短配置文件中返回。此命令对于从旧版配置文件过渡到基于集中式监视器的配置很有用。

运行时更改

在大多数情况下,Ceph允许您在运行时更改守护程序的配置。 此功能对于增加/减少日志记录输出,启用/禁用调试设置,甚至用于运行时优化非常有用。

一般来说,可以通过ceph config set命令以常规方式更新配置选项。 例如,在特定的OSD上启用调试日志级别,可以执行以下操作:

ceph config set osd.0 debug_ms 20
覆盖值

用Ceph CLI上的tell或daemon界面临时设置一个选项。 这些替代值是短暂的,因为它们仅影响正在运行的进程,并且在守护程序或进程重新启动时将被丢弃/丢失。

覆盖值有两种用法:

  1. 在任何主机上,我们都可以使用以下命令通过网络向守护进程发送消息:

    ceph tell  config set 

    例如

    ceph tell osd.0 config set debug_osd 20
    

    ell命令还可以接受守护程序标识符的通配符。 例如,要调整所有OSD守护程序的调试级别,可以执行以下操作:

    ceph tell osd.* config set debug_osd 20
    
  2. 在运行该进程的主机上,我们可以通过/ var / run / ceph中的套接字直接连接到该进程,使用:

    ceph daemon  config set 

    例如

    ceph daemon osd.0 config set debug_osd 20
    

查看运行时设置

通过ceph config show node

[root@ceph-admin ceph-cluster]# ceph config show osd.0
NAME                  VALUE             SOURCE   OVERRIDES IGNORES 
auth_client_required  cephx             file                       
auth_cluster_required cephx             file                       
auth_service_required cephx             file                       
cluster_addr          10.10.128.174:0/0 override                   
daemonize             false             override                   
keyring               $osd_data/keyring default                    
leveldb_log                             default                    
mon_host              10.10.128.174     file                       
mon_initial_members   ceph-admin        file                       
public_addr           10.10.128.174:0/0 override                   
public_network        10.10.128.0/24    file                       
rbd_default_features  61                default                    
setgroup              ceph              cmdline                    
setuser               ceph              cmdline 

上述命令只显示部分的,可以查看所有的

[root@ceph-admin ceph-cluster]# ceph config show-with-defaults  osd.0 

可以通过管理套接字从本地主机连接到正在运行的守护程序来观察其设置

[root@ceph-admin ceph-cluster]# ceph daemon osd.0 config show | more
{
    "name": "osd.0",
    "cluster": "ceph",
    "admin_socket": "/var/run/ceph/ceph-osd.0.asok",
    "admin_socket_mode": "",
    "auth_client_required": "cephx",
    "auth_cluster_required": "cephx",
    "auth_debug": "false",
    "auth_mon_ticket_ttl": "43200.000000",
    "auth_service_required": "cephx",
    "auth_service_ticket_ttl": "3600.000000",
    "auth_supported": "",
    "bdev_aio": "true",
    "bdev_aio_max_queue_depth": "1024",
    "bdev_aio_poll_ms": "250",
    "bdev_aio_reap_max": "16",
    "bdev_async_discard": "false",
    "bdev_block_size": "4096",
    "bdev_debug_aio": "false",
    "bdev_debug_aio_suicide_timeout": "60.000000",
    "bdev_debug_inflight_ios": "false",
    "bdev_enable_discard": "false",
    "bdev_inject_crash": "0",
    "bdev_inject_crash_flush_delay": "2",

显示所有当前设置

[root@ceph-admin ceph-cluster]# ceph daemon osd.0 config diff
{
    "diff": {
        "auth_client_required": {
            "default": "cephx, none",
            "file": "cephx",
            "final": "cephx"
        },
        "auth_cluster_required": {
            "default": "cephx",
            "file": "cephx",
            "final": "cephx"
        },
        "auth_service_required": {
            "default": "cephx",
            "file": "cephx",
            "final": "cephx"
        },
        "cluster_addr": {
            "default": "-",
            "override": "10.10.128.174:0/0",
            "final": "10.10.128.174:0/0"
        },
        "daemonize": {
            "default": true,
            "override": false,
            "final": false
        },
        "fsid": {
            "default": "00000000-0000-0000-0000-000000000000",
            "file": "1362b160-ef6a-42d9-9833-8094b97408ce",
            "override": "1362b160-ef6a-42d9-9833-8094b97408ce",
            "final": "1362b160-ef6a-42d9-9833-8094b97408ce"
        },
        "mon_host": {
            "default": "",
            "file": "10.10.128.174",
            "final": "10.10.128.174"
        },
        "mon_initial_members": {
            "default": "",
            "file": "ceph-admin",
            "final": "ceph-admin"
        },
        "public_addr": {
            "default": "-",
            "override": "10.10.128.174:0/0",
            "final": "10.10.128.174:0/0"
        },
        "public_network": {
            "default": "",
            "file": "10.10.128.0/24",
            "final": "10.10.128.0/24"
        },
        "setgroup": {
            "default": "",
            "cmdline": "ceph",
            "final": "ceph"
        },
        "setuser": {
            "default": "",
            "cmdline": "ceph",
            "final": "ceph"
        }
    }
}

你可能感兴趣的:(ceph,linux,ceph)