10月 252017
 

题记:

尽信书则不如无书

 

按照书上说的配置完cephfs后,无法mount成功,ceph-fuse的错误信息为:

mds 日志错误信息为:

从代码来看,就是caps给的不够。

书上关于caps的命令为:

实际上,还需要添加关于mds的授权,如果对mds之授权r, 则可以挂载,但是不可写;所以正常情况下,需要添加对mds的rw,更新授权信息如下:

 

如果我们只想让client.cephfs 访问 /data 目录,则可以添加更新授权信息如下:

注意: 这里似乎并未指定是哪个fs,如何区分不同的fs呢?

关于限制用户访问指定目录的问题,有更加方便的做法: http://docs.ceph.com/docs/master/cephfs/client-auth/

eg:

其实,该操作也是反映在ceph auth里面的,如下:

如此来看,具体是哪个cephfs,其实不是本质的东西,本质上还是对pool的授权

另外:ceph fs authorize 命令目前似乎不能操作现有用户(不能修改、也不能删除),该命令只能添加新用户;需要修改删除啥的还是要使用ceph auth的

 

下面使用client.phpor 尝试挂载,验证权限是否生效:

权限设置生效

结论:

  1. 别忘了cephfs对mds添加授权
  2. 修改完caps后,需要重新mount才生效

 

关于授权这部分,官方文档似乎并未提及

参考:http://www.yangguanjun.com/2017/07/01/cephfs-client-authentication/

 Posted by at 上午 11:21
10月 242017
 

前言

openstack是个很不错的东西,结合ceph之后,openstack就如同插上了翅膀,更加强大了。

 

ceph的好处:

  1. 有了ceph这个共享存储,guest的热迁移就方便多了
  2. ceph提供的块儿存储支持snap和clone,是的创建虚机和快照都不用copy磁盘,使得创建虚机可以秒级完成,而且非常节省存储

我遇到的问题:

  1. 在我将openstack和ceph结合起来之后,创建虚机依然很慢,并没有达到创建虚机不复制磁盘的效果

解决办法:

  1. 调试虚拟创建过程,发现如果要利用上rbd的snap和clone的特性,需要在image上有location属性;然而,我创建的image并没有该属性,openstack image命令行没有location相关选项,dashboard上创建镜像也没有该属性,只有glance命令行允许指定或单独添加该属性,却又报location invisible的错误;临时解决办法:直接修改代码,在代码中添加:
  2. 关于glance设置location失败的问题,根据关键字去glance代码中查看代码,发现当配置文件中的show_multiple_locations = false时,是不允许操作location的:

    然后,去glance-api的机器上grep show_multiple_locations ,并修改为True,重启glance-api 服务;然后再尝试location-add,提示url已存在,其实,该信息本来是存在的,只是显示与否的问题,现在不需要做任何操作,已经可以从image的信息中看到url了,如下:

    参考配置文件 /etc/glance/glance-api.conf 得知,show_multiple_locations = True使得image的地址直接暴露给了client,client就可以直接操作image了,可能存在一定的安全问题;当我们认为这不是问题的时候,我们就可以修改该配置,现在,我正是想利用rbd的一些特性,就需要将给选项设置为True;

  3. 至此,纠结已经的问题正式告一段落

总结:

  1. 按照手册安装openstack没有太大意义,能发现问题并解决问题才能进步;在解决该问题的过程中,尝试了python的单步调试(效果很差)、从代码上了解了虚拟机创建的过程,也了解了一些glance的代码,受益匪浅
 Posted by at 下午 1:54

rbd nbd

 Ceph  No Responses »  6,732 
10月 202017
 

rbd vs rbd-nbd

两者功能一样,效果也没啥差别,只是实现方式有所不同; 前者使用内核的rbd模块访问ceph存储,当ceph较新(内核较旧)时,可能会有一些image的feature内核不支持,就不能map;后者使用librbd来访问ceph存储,基本不会存在feature不支持的情况,但是需要nbd内核模块(关于nbd内核模块的担心似乎也多余,nbd早就进入内核了,就算没有加载,rbd-nbd也会帮你加载的)。

同一个rbd image可以同时在一台服务器上map多次;但是只能mount一次,因为多次挂载后设备的uuid是同一个,文件系统不允许同时挂载两个相同uuid的设备的

同一个rbd image可以同时挂载到多个服务器上; (rbd的 –shared  –image-shared 选项可以控制是否允许重复挂载)

–shared 允许给镜像加锁,避免写坏,实现特定条件下的共享

–image-shared 允许定义是否可以共享

 

也就是说,ceph的image是可以作为共享存储使用的(但是最好别这么做,没有任何机制保证并发写不会出问题)。

注意:

  1. 即使在两个不同的mnt名字空间,也不能同时分别mount同一个设备,依然有uuid冲突的问题
  2. 即使分别在不同的mnt名字空间执行rbd map,设备的uuid也都是一样的
  3. 即使在不同的服务器上执行rbd map,设备的uuid也都是一样的

 

 Posted by at 下午 12:11
9月 272017
 
  1. ceph不能自动识别磁盘类型
  2. 设置osd分类前osd需要是未分类的,即:修改osd分类的做法是,先移除原有的分类,在添加新的分类:

     
  3. 操作osd分类使用的不是ceph osd crush class *
  4. 根据磁盘分类查看osd:

     
  5. 然后参考ceph osd crush rule 来创建自己的规则,如只存放在hdd上,或只存放在ssd上的规则,然后对pool设置响应的规则
  6. class 不需要预先创建:

    没有提供一个方法add class ssd, 也没看到一个方法可以del class ssd

 

参考: http://docs.ceph.com/docs/master/rados/operations/crush-map/

 Posted by at 下午 2:03
5月 132017
 

ceph  osd down $id: 将osd $id 标记为down(mark down),达到不再访问的效果,并不真正停止进程,(仍然参与hash?),ceph osd tree 查看的时候,依然可能是up的状态

ceph osd out $id: 将weight 设置为0(零), 达到不再访问的效果,(不参与hash?)

ceph osd lost $id: 删除该osd上的所有数据,该操作比较危险,需要明确指定 –yes-i-really-mean-it, 如:

ceph osd rm $id: 从集群中彻底删除该osd;如果要删除某osd,必须先停止进程,仅仅标记为down(ceph osd down $id) 是不够的,如:

停止指定osd进程:

仅仅rm掉osd还是可以在ceph osd tree中看到,如下:

需要从crush中移除:

然而,依然删除的不够干净,如 auth中还有相关信息:

删除:

查看所有osd:

 

 

 Posted by at 下午 3:58