网络:

ceph必须要有公共网络和集群网络:

public network:负责客户端交互以及osd与mon之间的通讯

cluster network:负责osd之间的复制,均衡,回填,数据恢复等操作。

主机上的各个 OSD 最多会用到 4 个端口:

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

OSD 守护进程默认绑定 从 6800 起的第一个可用端口,当某个守护进程失败并重启时没释放端口,重启后的进程就会监听新端口。你应该防火墙打开整个 6800-7300 端口区间,以应对这种可能性。

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

典型的 Ceph 生产集群至少部署 3 个mon确保高可靠性,它允许一个监视器例程崩溃。奇数个监视器( 3 个)确保 PAXOS 算法能确定一批监视器里哪个版本的集群运行图是最新的,一个 Ceph 集群可以只有一个监视器,但是如果它失败了,因没有监视器数据服务就会中断。

ceph有两种保证数据安全的措施:

1.副本(默认3份)

2.纠错码(类似raid5)

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

/var/lib/ceph/osd/$cluster-$id

查看运行时配置:

ceph daemon {daemon-type}.{id} config show | less

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

ceph daemon osd.0 config show | less

修改运行时配置:

ceph tell {daemon-type}.{id or *} injectargs --{name} {value} [--{name} {value}]
eg:
ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1

用 Ceph 可以实现在同一套硬件上运行多个集群,不同的集群使用不同的配置文件,独立的集群意味着独立数据盘和日志,它们不能在集群间共享,在一台主机上运行多个监视器时,你得指定不同端口。监视器默认使用 6789 端口,如果它已经被占,其它集群得指定其它端口。

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

ceph -c {cluster-name}.conf health
ceph -c openstack.conf health

启用 CEPHX

启用 cephx 后, Ceph 将在默认搜索路径(包括 /etc/ceph/ceph.$name.keyring )里查找密钥环。你可以在 Ceph 配置文件的 [global] 段里添加 keyring 选项来修改,但不推荐。

禁用 CEPHX

下述步骤描述了如何禁用 Cephx 。如果你的集群环境相对安全,你可以减免认证耗费的计算资源,然而我们不推荐。但是临时禁用认证会使安装、和/或排障更简单。

把以下配置加入 Ceph 配置文件的 [global] 段下以启用 cephx 认证:

auth cluster required = cephx
auth service required = cephx
auth client required = cephx 把下列配置加入 Ceph 配置文件的 [global] 段下即可禁用 cephx 认证:
auth cluster required = none
auth service required = none
auth client required = none

Mon:

  1. LeaderLeader 是实现最新 Paxos 版本的第一个监视器。
  2. ProviderProvider 有最新集群运行图的监视器,但不是第一个实现最新版。
  3. Requester: Requester 落后于 leader ,重回法定人数前,必须同步以获取关于集群的最新信息

有了这些角色区分, leader就 可以给 provider 委派同步任务,这会避免同步请求压垮 leader 、影响性能。在下面的图示中, requester 已经知道它落后于其它监视器,然后向 leader 请求同步, leader 让它去和 provider 同步。

我们建议在生产环境下最少部署 3 个监视器,以确保高可用性。

Ceph 监视器有存储数据的默认路径,生产集群为实现更高性能可把监视器部署到非 OSD 节点的独立主机上。因为监视器会频繁 fsync() ,这可能影响 OSD 。

在 Ceph 0.58 及更早版本中,监视器数据以文件保存,这样人们可以用 ls 和 cat 这些普通工具检查监视器数据,然而它不能提供健壮的一致性。

在 Ceph 0.59 及后续版本中,监视器以键/值对存储数据。监视器需要 ACID 事务,数据存储的使用可防止监视器用损坏的版本进行恢复,除此之外,它允许在一个原子批量操作中进行多个修改操作。

一般来说我们不建议更改默认数据位置,如果要改,我们建议所有监视器统一配置,加到配置文件的 [mon] 下。

mon data  

默认值:/var/lib/ceph/mon/$cluster-$id

注意:Ceph 存储集群利用率接近最大容量时(即 mon osd full ratio ),作为防止数据丢失的安全措施,它会阻止你读写 OSD 。 full ratio 默认值是 .95 或容量的 95% 。对小型测试集群来说这是非常激进的设置。

[global]

        mon osd full ratio = .80
mon osd nearfull ratio = .70
各 OSD 每 6 秒会与其他 OSD 进行心跳检查,用 [osd] 下的 osd heartbeat interval 可更改此间隔、或运行时更改。如果一个 OSD 20 秒都没有心跳,集群就认为它 down 了,用 [osd] 下的 osd heartbeatgrace 可更改宽限期、或者运行时更改。 OSD 守护进程每 120 秒会向监视器报告其状态,不论是否有值得报告的事件。在 [osd] 段下设置 osd mon reportinterval max 可更改OSD报告间隔,或运行时更改。

journal:

默认情况下, Ceph 会把 OSD 日志存储于下列路径:/var/lib/ceph/osd/$cluster-$id/journal,生产环境中为了提高性能,会用机械硬盘存储osd数据,用ssd盘存储journal.

osd journal size 默认值是 0 ,所以你得在 ceph.conf 里设置。日志尺寸应该是 filestore max sync interval 与期望吞吐量的乘积再乘以 2 。

osd journal size = {2 * (expected throughput * filestore max sync interval)}

scrub:

除了为对象复制多个副本外, Ceph 还要洗刷归置组以确保数据完整性。这种洗刷类似对象存储层的 fsck ,对每个归置组, Ceph 生成一个所有对象的目录,并比对每个主对象及其副本以确保没有对象丢失或错配。轻微洗刷(每天)检查对象尺寸和属性,深层洗刷(每周)会读出数据并用校验和方法确认数据完整性

osd scrub begin hour:    开始scrub的时间

osd scrub end hour停止scrub的时间
上面两个时间决定了能进行scrub操作的时间段

ceph故障域:

CRUSH 要把归置组分配到 OSD 时,它先查询这个存储池的副本数设置,再把归置组分配到 OSD ,这样就把各副本分配到了不同 OSD 。比如,如果存储池要求归置组有 3 个副本, CRUSH 可能把它们分别分配到 osd.1、 osd.2 、 osd.3 。考虑到你设置于 CRUSH map中的故障域,实际上 CRUSH 找出的是伪随机位置,所以在大型集群中,你很少能看到归置组被分配到了相邻的 OSD 。我们把涉及某个特定归置组副本的一组 OSD 称为 acting set 。同一个object的存放副本 的osd有一个主osd,如果主osd挂了,另外的会副本会接替主osd的工作。客户端像ceph写入数据时Ceph 不会向客户端确认写操作,直到 acting set 里的所有 OSD 都完成了写操作。这样处理保证了从上次成功互联起, acting set 中至少有一个成员确认了每个写操作就行,不用全部成员确认。

 

PG:

当你创建存储池并给它设置归置组数量时,如果你没指定 Ceph 就用默认值。我们建议更改某些默认值,特别是存储池的副本数和默认归置组数量,可以在运行 pool 命令的时候设置这些值。你也可以把配置写入 Ceph 配置文件的 [global] 段来覆盖默认值。要设置某存储池的归置组数量,你必须在创建它时就指定好,一存储池的归置组数量设置好之后,还可以增加(但不可以减少)

PG总数=OSD的总数乘以100除以复制副本数:

osd pool default pg num = 200
osd pool default pgp num = 200

ceph osd pool get {pool-name} pg_num   #获取指定pool的pg数

ceph pg scrub {pg-id}   #手动清洗数据

获取卡住的归置组统计信息

要获取所有卡在某状态的归置组统计信息,执行命令:

ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format <format>] [-t|--threshold <seconds>]

Inactive (不活跃)归置组不能处理读写,因为它们在等待一个有最新数据的 OSD 复活且进入集群。

Unclean (不干净)归置组含有复制数未达到期望数量的对象,它们应该在恢复中。

Stale (不新鲜)归置组处于未知状态:存储它们的 OSD 有段时间没向监视器报告了(由 mon_osd_report_timeout 配置)。

可用格式有 plain (默认)和 json 。阀值定义的是,归置组被认为卡住前等待的最小时间(默认 300 秒)。

ceph认证:

ceph auth list:              #列出所有用户信息
ceph auth get client.cinder #列出指定用户信息
ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'                                     #创建用户
ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool' #创建用户,并返回用户名和Key,如果存在就忽略,-o 参数可以将返回内容写到文件
ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key #创建用户,并返回Key,如果存在就忽略,-o 参数可以将返回内容写到文件
ceph auth caps client.test2 mon 'allow *' osd 'allow * pool=vms' #修改用户权限
ceph auth del client.test #删除用户
ceph auth print-key client.test2 #查看用户密钥
ceph auth import -i /etc/ceph/ceph.keyring #从密钥导入用户
cephx 协议已默认开启。加密认证要耗费一定计算资源,但通常很低。如果您的客户端和服务器网络环境相当安全,而且认证的负面效应更大,你可以关闭它,通常不推荐您这么做
eg:
mount -t ceph serverhost:/ mountpoint -o name=client.user,secret=`ceph auth print-key client.user`

存储池(pool):

ceph osd lspools    #列出存储池

ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated]  [crush-ruleset-name] [expected-num-objects]    #创建存储池

ceph osd pool set-quota data max_objects 10000                                                      #设置配额

rados df                                                                                            #统计存储池使用信息

ceph osd pool delete <poolname><poolname> --yes-i-really-really-mean-it                             #删除pool

缓存:

  • 回写模式: 管理员把缓存层配置为 writeback 模式时, Ceph 客户端们会把数据写入缓存层、并收到缓存层发来的 ACK ;写入缓存层的数据会被迁移到存储层、然后从缓存层刷掉。直观地看,缓存层位于后端存储层的“前面”,当 Ceph 客户端要读取的数据位于存储层时,缓存层代理会把这些数据迁移到缓存层,然后再发往 Ceph 客户端。从此, Ceph 客户端将与缓存层进行 I/O 操作,直到数据不再被读写。此模式对于易变数据来说较理想(如照片/视频编辑、事务数据等)。
  • 只读模式: 管理员把缓存层配置为 readonly 模式时, Ceph 直接把数据写入后端。读取时, Ceph 把相应对象从后端复制到缓存层,根据已定义策略、脏对象会被缓存层踢出。此模式适合不变数据(如社交网络上展示的图片/视频、 DNA 数据、 X-Ray 照片等),因为从缓存层读出的数据可能包含过期数据,即一致性较差。对易变数据不要用 readonly 模式。

设置后端存储池通常会遇到两种场景:

  • 标准存储: 此时,Ceph存储集群内的存储池保存了一对象的多个副本;
  • 纠删存储池: 此时,存储池用纠删码高效地存储数据,性能稍有损失。

某云计算平台稳定运行的ceph配置文件实例:

cat /etc/ceph/ceph.conf

[global]
fsid = 5b0e3d77-94c6-4dce-be5a-cc45e6d6e221
mon_initial_members = region3mon1, region3mon2, region3mon3
mon_host = 172.18.74.67,172.18.74.68,172.18.74.69
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
mon_clock_drift_allowed = 5
mon_clock_drift_warn_backoff = 30

public_network = 172.18.74.0/24
cluster_network = 172.18.70.0/24
osd_pool_default_min_size = 2
osd_pool_default_pg_num = 1024
osd_pool_default_pgp_num = 1024

osd_scrub_begin_hour = 22
osd_scrub_end_hour = 6
osd_backfill_scan_min = 4
osd_backfill_scan_max = 16
osd_backfill_full_ratio = 0.85
osd_recovery_op_priority = 2

osd_max_backfills=1
osd_recovery_max_active=1
mon_osd_down_out_interval = 12960

ceph学习的更多相关文章

  1. Ceph学习之路(二)之Ceph的工作原理及流程

    一.RADOS的对象寻址 Ceph 存储集群从 Ceph 客户端接收数据——不管是来自 Ceph 块设备. Ceph 对象存储. Ceph 文件系统.还是基于 librados 的自定义实现——并存储 ...

  2. Ceph学习之路(一)之ceph初识

    一.元数据和元数据管理 (1)元数据 在学习Ceph之前,需要了解元数据的概念.元数据又称为中介数据.中继数据,为描述数据的数据.主要描述数据属性的信息,用来支持如指示存储位置.历史数据.资源查找.文 ...

  3. Ceph学习笔记(2)- CRUSH数据分布算法

    前言: ​ 分布式存储系统需要让数据均匀的分布在集群中的物理设备上,同时在新设备加入,旧设备退出之后让数据重新达到平衡状态尤为重要.新设备加入后,数据要从不同的老设备中迁移过来.老设备退出后,数据迁移 ...

  4. Ceph学习笔记(3)- Monitor

    Ceph学习笔记(3)- Monitor 前言: ​ Ceph将cluster map与placement rule合并为一张表称为crush map,作为集群表的一部分.由Monitor对集群表的副 ...

  5. Ceph学习之路(三)Ceph luminous版本部署

    1.配置ceph.repo并安装批量管理工具ceph-deploy [root@ceph-node1 ~]# vim /etc/yum.repos.d/ceph.repo [ceph] name=Ce ...

  6. ceph学习之CRUSH

    CRUSH的全称是Controlled Replication Under Scalable Hashing,是ceph数据存储的分布式选择算法,也是ceph存储引擎的核心.在之前的博客里介绍过,ce ...

  7. ceph学习之PG

    PG的计算公式: 整个集群PG的计算公式 Total PGs = ((Total_number_of_OSD * ) / max_replication_count) 每个POOL中PG的计算公式: ...

  8. ceph学习之pool

    pool是ceph存储数据时的逻辑分区,它起到namespace的作用.其他分布式存储系统,比如Mogilefs.Couchbase.Swift都有pool的概念,只是叫法不同.每个pool包含一定数 ...

  9. ceph学习笔记之十二 Ubuntu安装部署Ceph J版本

    https://cloud.tencent.com/info/2b70340c72d893c30f5e124e89c346cd.html 安装Ubuntu系统安装步骤略过 拓扑连接: 一.安装前准备工 ...

随机推荐

  1. python第二十一天---昨天没写完作业

    作业 2, 模拟计算器开发:实现加减乘除及拓号优先级解析用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ...

  2. sql语句进阶教程

    转载自:http://blog.csdn.net/u011001084/article/details/51318434 最近从图书馆借了本介绍SQL的书,打算复习一下基本语法,记录一下笔记,整理一下 ...

  3. Python和Lua的默认作用域以及闭包

    默认作用域 前段时间学了下Lua,发现Lua的默认作用域和Python是相反的.Lua定义变量时默认变量的作用域是全局(global,这样说不是很准确,Lua在执行x = 1这样的语句时会从当前环境开 ...

  4. 分布式文件系统(HDFS)与 linux系统文件系统 对比

    初次接触分布式文件系统,有很多迷惑.通过参考网络文章,这里进行对比一下Hadoop 分布式文件系统(HDFS)与 传统文件系统之间的关系:   Linux 文件系统 分布式文件系统 块 块对应物理磁盘 ...

  5. HDU ACM 2066 一个人的旅行

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  6. lvm管理卷之缩减卷大小

    最近刚刚装好了一个系统,但是因为没有分好区,导致home分区过大,所以想把home分区的一大半移动到根分区里面. 1.先说一下我的环境. 安装的是centos6版本的系统,使用的默认文件系统是ext4 ...

  7. PHP PC端支付宝扫码支付

    前面的文章已经描述过在蚂蚁金服开放平台创建应用签约等流程,详见:PHP App端支付宝支付,这里就不多说了,剩下的分两步,第一步是支付前的准备工作,也就是整合支付类文件,我已经整合好可以直接用,代码开 ...

  8. openssl windows 生成公钥与私钥

    链接: https://pan.baidu.com/s/1qn-qeFxovor-vcAWFl8jIw 提取码: zy5v 一,下载安装windows平台openssl密钥生成工具,执行安装目录bin ...

  9. 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  10. Python web项目Django部署在Ubuntu18.04腾讯云主机上

    Django2.1 + Python3.6 + nginx + uwsgi 部署到Ubuntu18.04 材料准备 准备一个Django项目 准备一台Ubuntu18.04的主机 ssh连接到主机(腾 ...