暂未分类 暂未分类 xenserver使用ceph的rbd的方法 zphj1987 2015-12-16 2024-01-05 首先安装的xenserver6.5的环境,看到有地方有提到这个上面可以安装rbd的支持,网上有一种方式是libvirt+kvm方式,因为ceph对libviet是原生支持的,但是xenserver底层是xen的,这个就不去研究太多,这个用最简单的方式最好
https://github.com/mstarikov/rbdsr 这个是个第三方的插件,最近才出来的
实现原理是ssh到ceph的机器上获取到可以使用的rbd信息,然后在xenserver的图形界面上通过配置iscsi的方式去配置rbd,里面套用了iscsi的界面,实际去xenserver机器后台同样做的是map的操作 这个试了下,界面的操作都可以实现,都可以获取到rbd的信息,但是在最后提交的一下的时候,后台会报错误的信息,这个有可能才出来,还有点问题 这个地方可以用其他的方式实现,xenserver在添加硬盘的时候本来就支持的命令行模式,下面为实现方式
先检查内核的信息,这个有rbd模块,并且用的是3.10的,这个是用的centos7同等的内核,问题不大
1 2 3 4 5 6 7 8 9 10 11 [root@xenserver ] filename: /lib/modules/3.10.0+2/kernel/drivers/block/rbd.ko license: GPL author: Jeff Garzik <[email protected] > description: rados block device author: Yehuda Sadeh <[email protected] > author: Sage Weil <[email protected] > srcversion: B03197D54ABE3BD7A32A276 depends: libceph intree: Y vermagic: 3.10.0+2 SMP mod_unload modversions
查看系统上软件包的信息,可以看到xenserver6.5虽然用的是centos7同等的内核,实际上环境还是基于centos5的软件版本进行的定制,这个地方本来准备把ceph的软件包安装上去,版本上的依赖相隔太大,就没装了,也没太多的必要,能实现需求即可
1 2 [root@xenserver] openssh-4.3p2-82.el5
这个地方在xenserver的机器上使用这个方式使用rbd,需要做下面几个事情:
一个是写rbdmap配置文件
一个是rbdmap启动的脚本
一个是ceph.conf的配置文件
修改/etc/ceph/rbdmap配置文件 1 2 3 4 /etc/ceph/rbdmap 里面的配置文件书写方式 rbd/testrbd id =admin
/etc/ceph/rbdmap根据需要去写,我不喜欢用keyring就没写keyring,但是id是必须写,否则会报错
修改rbdmap启动的脚本 /etc/init.d/rbdmap这个脚本要修改,默认的脚本里面是要去使用rbd命令的,rbd命令是在ceph-common里面的这个里面,可以修改一个不需要安装ceph-common的版本的启动脚本
改版的如下: /etc/init.d/rbdmap文件内容替换如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 #!/bin/bash DESC="RBD Mapping" RBDMAPFILE="/etc/ceph/rbdmap" . /lib/lsb/init-functions modprobe rbd || exit 1 do_map () { touch /var/lock/subsys/rbdmap if [ ! -f "$RBDMAPFILE " ]; then echo "$DESC : No $RBDMAPFILE found." exit 0 fi echo "Starting $DESC " newrbd= RET=0 while read DEV PARAMS; do case "$DEV " in "" |\ continue ;; */*) ;; *) DEV=rbd/$DEV ;; esac if [ ! -b /dev/rbd/$DEV ]; then echo $DEV mons=`egrep 'mon[ _]host' /etc/ceph/ceph.conf | cut -f2 -d'=' | sed 's/ //g' ` args=`echo $PARAMS | sed 's/id/name/g' ` rbddev=`echo $DEV | tr '/' ' ' ` echo "$mons $args $rbddev " > /sys/bus/rbd/add [ $? -ne "0" ] && RET=1 newrbd="yes" fi done < $RBDMAPFILE echo $RET if [ "$newrbd " ]; then echo "Mounting all filesystems" mount -a echo $? fi } do_unmap () { rm -rf /var/lock/subsys/rbdmap echo "Stopping $DESC " RET=0 MNTDEP=$(mount| awk '$1 ~ /^\/dev\/rbd[0-9]*$/ {print $3}' | sort -r) for MNT in $MNTDEP ; do umount $MNT done cd /sys/bus/rbd/devices/ if ls * >/dev/null 2>&1; then for DEV in *; do echo $DEV echo $DEV > /sys/bus/rbd/remove [ $? -ne "0" ] && RET=1 done fi echo $RET } case "$1 " in start) do_map ;; stop) do_unmap ;; reload) do_map ;; status) ls /sys/bus/rbd/devices/ ;; *) echo "Usage: rbdmap {start|stop|reload|status}" exit 1 ;; esac exit 0
使用下面的命令进行rbd的挂载: 1 /etc/init.d/rbdmap start
启动后可以查看本地rbd映射的磁盘 1 2 [root@xenserver15 ceph] brw-r----- 1 root disk 252, 0 Dec 16 11:35 /dev/rbd1
卸载rbd的命令为
加入到自启动
检查rbdmap的自启动状态 1 2 [root@xenserver] rbdmap 0:off 1:off 2:on 3:on 4:on 5:on 6:off
将rbdmap从自启动删除
这个地方因为xenserver添加存储的时候选择类型为lvm,而系统默认是识别不了rbdmap到本地的那个文件系统的类型的,所以需要修改一点东西: 在/etc/lvm/lvm.conf的98行修改如下
1 2 types= [ "nvme" , 64, "mtip32xx" , 64 , "rbd" , 64 ]
查询新加磁盘的uuid(只有格式化了的磁盘才有uuid,格式化完了start_udev) 用绝对路径的时候可能会出现编号错乱的问题,因为/dev/rbd*只是一个软链接
1 2 3 4 [root@xenserver ceph] total 0 lrwxrwxrwx 1 root root 10 Dec 16 11:35 0edeba9a-8b58-463c-bdea-0d46e90dd929 -> ../../rbd1 lrwxrwxrwx 1 root root 10 Dec 7 09:23 5170e462-18db-4fc6-a45c-dfc160cb86ee -> ../../sda1
如果上面的方法做完没有找到uuid 如果没有找到uuid,那么就用udev进行下控制,流程如下
1 vi /usr/bin/ceph-rbdnamer
创建一个文件
1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/sh DEV=$1 NUM=`echo $DEV | sed 's#p.*##g; s#[a-z]##g' ` POOL=`cat /sys/devices/rbd/$NUM /pool` IMAGE=`cat /sys/devices/rbd/$NUM /name` SNAP=`cat /sys/devices/rbd/$NUM /current_snap` if [ "$SNAP " = "-" ]; then echo -n "$POOL $IMAGE " else echo -n "$POOL $IMAGE @$SNAP " fi
给权限
1 chmod 777 /usr/bin/ceph-rbdnamer
添加规则文件
1 vi /etc/udev/rules.d/50-rbd.rules
添加
1 2 KERNEL=="rbd[0-9]*" , ENV{DEVTYPE}=="disk" , PROGRAM="/usr/bin/ceph-rbdnamer %k" , SYMLINK+="rbd/%c{1}/%c{2}" KERNEL=="rbd[0-9]*" , ENV{DEVTYPE}=="partition" , PROGRAM="/usr/bin/ceph-rbdnamer %k" , SYMLINK+="rbd/%c{1}/%c{2}-part%n"
让udev生效
1 2 [root@xenserver15 rules.d] [root@xenserver15 rules.d]
检查
1 2 [root@xenserver15 rules.d] lrwxrwxrwx 1 root root 10 Dec 29 11:57 /dev/rbd/rbd/zp -> ../../rbd1
现在用设备的时候就用下面的路径,这个是唯一值
/dev/rbd/rbd/zp
添加磁盘rbd到xenserver中
然后去图形管理界面就可以看到添加的存储了
到这里就创建好了,这里介绍下删除存储的的操作
列出pdb模块,找到对应存储的UUID
找到对应设备的 uuid 卸载对应uuid的存储
列出存储的UUID,找到对应存储的UUID
删除本地存储连接
对于已经挂载的rbd磁盘的信息查询的问题 如果用的是/dev/rbd4
查询存储池
查询镜像名称
附加知识 删除重新加进来的过程 1 2 3 4 5 6 7 8 [root@xenserver15 rules.d] uuid ( RO) : 6242d000-567d-257f-d030-7f360855f87f host-uuid ( RO): 91171862-9954-46e1-9210-3cebb55df395 sr-uuid ( RO): bbfd0739-b0a1-d2e3-986f-10827e4637ea device-config (MRO): device: /dev/rbd/rbd/zp currently-attached ( RO): true
删除掉pbd
1 2 [root@xenserver15 rules.d] [root@xenserver15 rules.d]
删掉sr(sr的uuid在vg的名称里面包含了)
1 2 3 4 5 6 7 8 9 10 [root@xenserver15 rules.d] uuid ( RO) : bbfd0739-b0a1-d2e3-986f-10827e4637ea name-label ( RW): ceph storage (rbdtest) name-description ( RW): host ( RO): <not in database> type ( RO): lvm content-type ( RO): user [root@xenserver15 rules.d]
重新加入sr
1 2 [root@xenserver15 rules.d] bbfd0739-b0a1-d2e3-986f-10827e4637ea
查询主机的uuid
1 2 3 4 5 [root@xenserver15 rules.d] uuid ( RO) : 91171862-9954-46e1-9210-3cebb55df395 name-label ( RW): xenserver1.5 name-description ( RW): Default install of XenServer
1 2 [root@xenserver15 rules.d] 51a40dd6-2b91-7590-8a81-04d129aed1ea
加载存储
1 xe pbd-plug uuid=51a40dd6-2b91-7590-8a81-04d129aed1ea
然后在前台repair下就可以了
附加 xenserver7升级了lvm
增加lvm的识别 需要识别rbd的话需要修改下面两个文件
/etc/lvm/lvm.conf和/etc/lvm/master/lvm.conf
修改为
1 2 3 4 5 6 7 8 9 10 types = [ "rbd" , 64 ]
执行命令
1 2 sed -i "s/metadata_read_only =.*/metadata_read_only = 0/g" /etc/lvm/master/lvm.conf sed -i "s/metadata_read_only =.*/metadata_read_only = 0/g" /etc/lvm/lvm.conf
创建sr 1 xe sr-create type =lvm content-type=user device-config:device=/dev/rbd1 name-label="ceph"
然后就可以用了
相关文件路径 /var/log/SMlog 存储创建日志路径 /opt/xensource/sm/lvutil.py 创建lv的代码
变更记录
Why
Who
When
创建
武汉-运维-磨渣
2015-12-16
增加 touch /var/lock/subsys/rbdmap
武汉-运维-磨渣
2016-05-10
增加xenserver7lvm支持
武汉-运维-磨渣
2017-02-07