<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ceph on My Blog</title><link>/tags/ceph/</link><description>Recent content in Ceph on My Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 13 Mar 2019 00:00:00 +0000</lastBuildDate><atom:link href="/tags/ceph/index.xml" rel="self" type="application/rss+xml"/><item><title>Ceph学习笔记-03-luminous版本部署</title><link>/2019/03/13/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-03-luminous%E7%89%88%E6%9C%AC%E9%83%A8%E7%BD%B2/</link><pubDate>Wed, 13 Mar 2019 00:00:00 +0000</pubDate><guid>/2019/03/13/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-03-luminous%E7%89%88%E6%9C%AC%E9%83%A8%E7%BD%B2/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h3 id="1配置cephrepo并安装批量管理工具ceph-deploy"&gt;1、配置ceph.repo并安装批量管理工具ceph-deploy&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[root@ceph-node1 ~]# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[root@ceph-node1 ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@ceph-node1 ~]# yum makecache
[root@ceph-node1 ~]# yum update -y
[root@ceph-node1 ~]# yum install -y ceph-deploy
​```
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2ceph的节点部署"&gt;2、ceph的节点部署&lt;/h3&gt;
&lt;h4 id="1安装ntp-在所有-ceph-节点上安装-ntp-服务特别是-ceph-monitor-节点以免因时钟漂移导致故障"&gt;（1）安装NTP 在所有 Ceph 节点上安装 NTP 服务（特别是 Ceph Monitor 节点），以免因时钟漂移导致故障&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[root@ceph-node1 ~]# yum install -y ntp ntpdate ntp-doc
[root@ceph-node2 ~]# yum install -y ntp ntpdate ntp-doc
[root@ceph-node3 ~]# yum install -y ntp ntpdate ntp-doc
[root@ceph-node1 ~]# ntpdate ntp1.aliyun.com
31 Jul 03:43:04 ntpdate[973]: adjust time server 120.25.115.20 offset 0.001528 sec
[root@ceph-node1 ~]# hwclock
Tue 31 Jul 2018 03:44:55 AM EDT -0.302897 seconds
[root@ceph-node1 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;确保在各 Ceph 节点上启动了 NTP 服务，并且要使用同一个 NTP 服务器&lt;/p&gt;</description></item><item><title>Ceph学习笔记-02-工作原理及流程</title><link>/2019/03/11/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-02-%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E6%B5%81%E7%A8%8B/</link><pubDate>Mon, 11 Mar 2019 00:00:00 +0000</pubDate><guid>/2019/03/11/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-02-%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E6%B5%81%E7%A8%8B/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h3 id="一rados的对象寻址"&gt;一、RADOS的对象寻址&lt;/h3&gt;
&lt;p&gt;　　Ceph 存储集群从 &lt;a href="http://docs.ceph.org.cn/glossary/#term-67"&gt;&lt;em&gt;Ceph 客户端&lt;/em&gt;&lt;/a&gt;接收数据——不管是来自 &lt;a href="http://docs.ceph.org.cn/glossary/#term-38"&gt;&lt;em&gt;Ceph 块设备&lt;/em&gt;&lt;/a&gt;、 &lt;a href="http://docs.ceph.org.cn/glossary/#term-30"&gt;&lt;em&gt;Ceph 对象存储&lt;/em&gt;&lt;/a&gt;、 &lt;a href="http://docs.ceph.org.cn/glossary/#term-45"&gt;&lt;em&gt;Ceph 文件系统&lt;/em&gt;&lt;/a&gt;、还是基于 &lt;code&gt;librados&lt;/code&gt; 的自定义实现——并存储为对象。每个对象是文件系统中的一个文件，它们存储在&lt;a href="http://docs.ceph.org.cn/glossary/#term-52"&gt;&lt;em&gt;对象存储设备&lt;/em&gt;&lt;/a&gt;上。由 Ceph OSD 守护进程处理存储设备上的读/写操作。　&lt;/p&gt;
&lt;p&gt;　　在传统架构里，客户端与一个中心化的组件通信（如网关、中间件、 API 、前端等等），它作为一个复杂子系统的唯一入口，它引入单故障点的同时，也限制了性能和伸缩性（就是说如果中心化组件挂了，整个系统就挂了）。&lt;/p&gt;
&lt;p&gt;　　Ceph 消除了集中网关，允许客户端直接和 Ceph OSD 守护进程通讯。 Ceph OSD 守护进程自动在其它 Ceph 节点上创建对象副本来确保数据安全和高可用性；为保证高可用性，监视器也实现了集群化。为消除中心节点， Ceph 使用了 CRUSH 算法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img alt="img" loading="lazy" src="/2019/03/11/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-02-%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E6%B5%81%E7%A8%8B/1349539-20180803162209076-1452295982.png"&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;File&lt;/strong&gt; —— 此处的file就是用户需要存储或者访问的文件。当用户要将数据存储到Ceph集群时，存储数据都会被分割成多个object。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ojbect&lt;/strong&gt; —— 每个object都有一个object id，每个object的大小是可以设置的，默认是4MB，object可以看成是Ceph存储的最小存储单元。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PG（Placement Group）&lt;/strong&gt;—— 顾名思义，PG的用途是对object的存储进行组织和位置映射。由于object的数量很多，所以Ceph引入了PG的概念用于管理object，每个object最后都会通过CRUSH计算映射到某个pg中，一个pg可以包含多个object。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OSD&lt;/strong&gt; —— 即object storage device，PG也需要通过CRUSH计算映射到osd中去存储，如果是二副本的，则每个pg都会映射到二个osd，比如[osd.1,osd.2]，那么osd.1是存放该pg的主副本，osd.2是存放该pg的从副本，保证了数据的冗余。&lt;/p&gt;
&lt;h4 id="1file---object映射"&gt;（1）File -&amp;gt; object映射&lt;/h4&gt;
&lt;p&gt;　　这次映射的目的是，将用户要操作的file，映射为RADOS能够处理的object。其映射十分简单，本质上就是按照object的最大size对file进行切分，相当于RAID中的条带化过程。这种切分的好处有二：一是让大小不限的file变成最大size一致、可以被RADOS高效管理的object；二是让对单一file实施的串行处理变为对多个object实施的并行化处理。&lt;/p&gt;
&lt;p&gt;　　每一个切分后产生的object将获得唯一的oid，即object id。其产生方式也是线性映射，极其简单。图中，ino是待操作file的元数据，可以简单理解为该file的唯一id。ono则是由该file切分产生的某个object的序号。而oid就是将这个序号简单连缀在该file id之后得到的。举例而言，如果一个id为filename的file被切分成了三个object，则其object序号依次为0、1和2，而最终得到的oid就依次为filename0、filename1和filename2。&lt;/p&gt;
&lt;p&gt;　　这里隐含的问题是，ino的唯一性必须得到保证，否则后续映射无法正确进行。&lt;/p&gt;
&lt;h4 id="2object---pg映射"&gt;（2）Object -&amp;gt; PG映射&lt;/h4&gt;
&lt;p&gt;　　在file被映射为一个或多个object之后，就需要将每个object独立地映射到一个PG中去。这个映射过程也很简单，如图中所示，其计算公式是：&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;hash(oid) &amp;amp; mask -&amp;gt; pgid&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　由此可见，其计算由两步组成。首先是使用Ceph系统指定的一个静态哈希函数计算oid的哈希值，将oid映射成为一个近似均匀分布的伪随机值。然后，将这个伪随机值和mask按位相与，得到最终的PG序号（pgid）。根据RADOS的设计，给定PG的总数为m（m应该为2的整数幂），则mask的值为m-1。因此，哈希值计算和按位与操作的整体结果事实上是从所有m个PG中近似均匀地随机选择一个。基于这一机制，当有大量object和大量PG时，RADOS能够保证object和PG之间的近似均匀映射。又因为object是由file切分而来，大部分object的size相同，因而，这一映射最终保证了，各个PG中存储的object的总数据量近似均匀。&lt;/p&gt;
&lt;p&gt;　　从介绍不难看出，这里反复强调了“大量”。只有当object和PG的数量较多时，这种伪随机关系的近似均匀性才能成立，Ceph的数据存储均匀性才有保证。为保证“大量”的成立，一方面，object的最大size应该被合理配置，以使得同样数量的file能够被切分成更多的object；另一方面，Ceph也推荐PG总数应该为OSD总数的数百倍，以保证有足够数量的PG可供映射。&lt;/p&gt;
&lt;h4 id="3pg---osd映射"&gt;（3）PG -&amp;gt; OSD映射&lt;/h4&gt;
&lt;p&gt;　　第三次映射就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD。如图所示，RADOS采用一个名为CRUSH的算法，将pgid代入其中，然后得到一组共n个OSD。这n个OSD即共同负责存储和维护一个PG中的所有object。前已述及，n的数值可以根据实际应用中对于可靠性的需求而配置，在生产环境下通常为3。具体到每个OSD，则由其上运行的OSD deamon负责执行映射到本地的object在本地文件系统中的存储、访问、元数据维护等操作。&lt;/p&gt;</description></item><item><title>Ceph学习笔记-01-初识Ceph</title><link>/2019/03/10/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-01-%E5%88%9D%E8%AF%86ceph/</link><pubDate>Sun, 10 Mar 2019 00:00:00 +0000</pubDate><guid>/2019/03/10/ceph%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-01-%E5%88%9D%E8%AF%86ceph/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;p&gt;官方中文文档：http://docs.ceph.org.cn/&lt;/p&gt;
&lt;h3 id="一元数据和元数据管理"&gt;&lt;strong&gt;一、元数据和元数据管理&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;（1）元数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　在学习Ceph之前，需要了解元数据的概念。元数据又称为中介数据、中继数据，为描述数据的数据。主要描述数据属性的信息，用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。通俗地说，就 是用于描述一个文件的特征的系统数据，比如访问权限、文件拥有者以及文件数据库的分布信息（inode)等等。在集群文件系统中，分布信息包括文件在磁盘上的位置以 及磁盘在集群中的位置。用户需要操作一个文件就必须首先得到它的元数据，才能定位到文件的位置并且得到文件的内容或相关属性。&lt;/p&gt;
&lt;p&gt;　　使用stat命令，可以显示文件的元数据&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[root@ceph-node1 ~]# stat 1.txt
File: ‘1.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 33889728 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-08-05 16:38:22.137566272 +0800
Modify: 2018-08-05 16:38:22.137566272 +0800
Change: 2018-08-05 16:38:22.137566272 +0800
Birth: -
File：文件名
Size：文件大小（单位：B）
Blocks：文件所占扇区个数，为8的倍数（通常的Linux扇区大小为512B，连续八个扇区组成一个block）
IO Block：每个数据块的大小（单位：B）
regular file：普通文件（此处显示文件的类型）
Inode：文件的Inode号
Links：硬链接次数
Access：权限
Uid：属主id/属主名
Gid：属组id/属组名
Access：最近访问时间
Modify：数据改动时间
Change：元数据改动时间
以上的参数均属于文件的元数据，元数据即用来描述数据的数据。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;（2）元数据管理&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>