??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
runsisi AT hust.edu.cn
2015/06/12
本文ȝZceph存储后端?/span>iSCSI target实现Q针对几U可能的实现思\q行分析Qƈ输出本文,本文内容l织l构如下Q?/span>
1. 描述本文的目的及内容Q?/span>
2. iSCSI使用ceph作ؓ存储后端的基本实现思\Q?/span>
3. 分别阐述几种可能的实现方式,分析其各自的特点和可能存在的一些技术障;
4. 最后简单ȝ全文?/span>
ceph作ؓ一个真正意义上的统一存储pȝQ有着很好的应用前景,但到目前为止有多U原因限制了其在传统存储应用领域真正大范围的应用Q如客户端仅支持GNU/LinuxpȝQ内核态客L实现也仅会合入高版本的内怸{。而对?/span>iSCSIq种传统的存储应用而言Q由于客L配置单且_通用Q常见的各种pȝQ包括操作系l和应用pȝQ一般都?/span>iSCSI有很好的支持Q因此ؓ了扩?/span>ceph的应用范_特别是应对只支持iSCSI的系l,ceph必须通过某种途径实现?/span>iSCSI的支持?/span>
ceph集群目前支持三种形式的存储接口:文g、对象、块Q其中块接口(?/span>RBD)?/span>SCSI块设备读写所要求的接口一_因此可以Zceph?/span>RBD提供SCSI存储pȝ后端Q当然如果有_信心的话也可以完全抛?/span>ceph提供的这三种基础接口Q而在原始?/span>RADOS接口上开发新的块接口Q当焉非原始的RBD接口有重要缺P否则暂时q看不到重新发明轮子的必要,注意后文的讨论都基于这一基本假设?/span>
/Files/runsisi/Zceph-RBD的iSCSI-target实现分析.pdf虚拟化,与真实的、物理存在的对象相对应,用于隔离底层物理实现。其中计机g虚拟化是我们所熟知的虚拟化技术,如?/span>VirtualBox{虚拟机软g创徏多台x86虚拟机器Q?/span>qemu模拟多种gq_Q?/span>x86Q?/span>PPCQ等。其它常见类型的虚拟化技术包括:操作pȝ虚拟化(DockerQ?/span>FreeBSD jailQ,存储虚拟化(poolingQ,应用软g虚拟化(virtualenvQ等[1]?/span>
http://www.shnenglu.com/runsisi
[本文所提及的部|方法已不适用于新版的ceph-formula]
本文单描qC?/span>saltstack部vceph集群Q?/span>MON+OSDQ的Ҏ?/span>
1. saltstack基本概念
masterQ?/span>saltstack服务端,可执行程序ؓsalt-masterQ?/span>
minionQ?/span>saltstack客户端,可执行程序ؓsalt-minionQ?/span>
grainsQ客L节点自n所固有的静态数据,如节点的基本信息{;
pillarQ在服务端定义的、针对具体客L的数据?br />
/Files/runsisi/salt-ceph.pdf
runsisi AT hust
http://www.shnenglu.com/runsisi
前言
本文对?/span>puppetq行ceph集群的部|流E进行简要ȝ。全文结构如下:W一、二节分别对puppet?/span>cephq行单介l;W三节分?/span>puppet-ceph模块的结构和实现Q第四节描述ceph集群部v的操作流E;W五节ȝ全文Q附录ؓ参考文献及代码?/span>
1. puppet
puppet是一个开源的配置理工具(Puppet is an open source configuration management utility[1])Q同时也是当前最L的配|管理自动化工具之一?/span>
Puppet有自q立的语言[2]用于~写配置脚本Q但不同于一般的脚本语言Q该语言只描q被配置对象的状态(?/span>puppet中的资源Q,而不需要指定实现该配置所需要的操作步骤?/span>puppet自n定义了很多常见的资源cdQ但用户也可以自定义资源cdQ具体实现细节可以参?#8220;Puppet Types and Providers”一书?br />runsisi AT hust
http://www.shnenglu.com/runsisi
前言
CHAP认证?/span>iSCSI协议中最主要的认证方式,现有的开?/span>iSCSI实现Q包?/span>initiator?/span>target实现Q基本上都只支持CHAP认证Q本文将?/span>CHAP认证及其?/span>iSCSI协议中的应用作一个简单的介绍?/span>
CHAP协议
CHAP[1]的全U是Challenge-Handshake Authentication ProtocolQ协议细节由RFC 1994q行定义?/span>CHAP最初应用在Point to Point ProtocolQ?/span>PPPQ中Q用于实?/span>PPP服务器对客户端的w䆾认证Q但也可以应用在其它需要对用户或主行n份认证的场合Q如iSCSI协议p定?/span>iSCSI协议q行通信的设备必(MUSTQ实?/span>CHAP认证?br />
注:附g中的压羃包ؓiSCSI discovery会话的抓包信息,两次抓包分别为单向CHAP认证和双向CHAP认证q程Q?br />iSCSI normal会话的CHAP认证q程和discovery会话是一LQ没有再单独抓包?br />
/Files/runsisi/iSCSI_CHAP认证.pdf
/Files/runsisi/iSCSI_CHAP_PCAP.7z
runsisi AT hust
http://www.shnenglu.com/runsisi
现在公司内部使用?/span>RPMpd行版应该多数q停留在Centos6.x?/span>RHEL6.x版本Q?/span>6.xpd的版本带?/span>vim好像都是7.2版本的,像我q种装了spf13提供?/span>vim插g包的TX比较郁闷了Q这个插件包只支?/span>7.3及以上的版本Q?/span>vim官方好像是没有提?/span>rpm包下载的Q我每次都是自己下来源代码进行编译,其实Z方便的,本来只需要进行一ơ的工作Q每ơ硬是要重新~译打包。让我想起了在学校维护系里的|站Ӟ需要添加一个生成本U毕业设计选题l计word文档的功能,大概׃我两天的旉才把q个功能l实CQ每ơ老师们想要生成这个文档,在面上点M下按钮,然后E等一会Q网站后C实时生成一?/span>word文提供下蝲Q好久之后我才突然开H,其实只需要我自己生成一份然后挂到网站上p了的Q反正毕N题每年只有一ơ,哪用SB似的每次都去查数据库l生成一?/span>:)
google?/span>GFWl屏蔽了Q因?/span>vim的代码也取不下来了,只好?/span>Centos7?/span>yum源里取了一份,路径如下Q?/span>
http://vault.centos.org/7.0.1406/os/Source/SPackages/
/Files/runsisi/centos6.x~译打包vim7.4.pdf
runsisi AT hust
http://www.shnenglu.com/runsisi
1Q?nbsp;获取源代?/span>
获取源代码有多种途径Q其?/span>ceph官方发布的源代码路径如下Q?/span>
在该路径下下载相应发行版本的源代?/span>tar包即可,同时也可以?/span>git版本理工具获取最新的开发版本的源代?/span>[1]Q?/span>
git clone --recursive https://github.com/ceph/ceph.git
2Q?nbsp;建立~译环境
~译打包ceph需要相应的工具链以及一pd的第三方库,Zdeb的发行版和基?/span>rpm的发行版所需要的依赖q不相同,如果使用git?/span>github获取的源代码Q则在源代码的根目录有两个文Ӟdeps.deb.txt, deps.rpm.txtQ这两个文g分别记录了这两种cd的发行版建立~译环境所需的工具及W三方依赖库Q但是这两个文g所记录的依赖关pdƈ不一定完全准,如果有缺q依赖Q编译体p进行构建时会报错,再安装相应的依赖卛_?br />
/Files/runsisi/ceph_build.pdf
runsisi AT hust
http://www.shnenglu.com/runsisi
该错误在执行命oQ?/span>ceph-deploy mon create-initial 时出玎ͼ说明?/span> monitor 节点曄部vq?/span> ceph 环境Q该问题的解x法很单,在执行该命o之前删除?/span> monitor 节点 /etc/ceph/ 下的{cluster}.client.admin.keyring 文gQ?/span>cluster名默认配|情况下?/span>cephQ?/span>
该错误的具体原因待会解释Q先单介l一下该命o执行q程中发生的事情Q?/span>
1Q?nbsp;启动 monitor 节点?/span> ceph monitor 守护q程Q?/span>
2Q?nbsp;monitor 节点执行 ceph-create-keys 命oQ?/span>
3Q?nbsp;ceph-create-keys创徏 {cluster}.client.admin.keyringQ?/span>
4Q?nbsp;ceph-create-keys创徏 bootstrap-{osd, mds}/{cluster}.keyringQ?/span>
5Q?nbsp;ceph-deploy 所在运行节点从 monitor 节点?/span> {cluster}.client.admin.keyring, {cluster}.mon.keyring, bootstrap-{osd, mds}/{cluster}.keyring 到当前\径;
6Q?nbsp;以上M一步如果文件已存在Q则不会新徏Q或?/span> monitor 节点取)文g?/span>
回到我们遇到的错误,׃ monitor 节点之前可能使用 ceph-deploy 工具q行q部|Ԍ再次部v时没有将 {cluster}.client.admin.keyring 原有的配|文件进行清理,因此W?/span>3步不会创建新?/span> keyring 文gQ仍然用上ơ部|用的keyringQ从而导致第4步操作会p|Q最l出错?/span>
从上面的介绍Q可以知道,如果要?/span> ceph-deploy 工具再次?/span> ceph 集群q行部vQ最好将各节点(包括 ceph-deploy 工具所在节点)上原有的配置文g清理之后再进行部|Ӏ?br />
/Files/runsisi/ceph_bootstrap_key_fail.pdf