zoukankan      html  css  js  c++  java
  • xenserver使用ceph的rbd的方法

    首先安装的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同等的内核,问题不大

    [root@xenserver ]# modinfo rbd
    filename:       /lib/modules/3.10.0+2/kernel/drivers/block/rbd.ko
    license:        GPL
    author:         Jeff Garzik <jeff@garzik.org>
    description:    rados block device
    author:         Yehuda Sadeh <yehuda@hq.newdream.net>
    author:         Sage Weil <sage@newdream.net>
    srcversion:     B03197D54ABE3BD7A32A276
    depends:        libceph
    intree:         Y
    vermagic:       3.10.0+2 SMP mod_unload modversions
    

    查看系统上软件包的信息,可以看到xenserver6.5虽然用的是centos7同等的内核,实际上环境还是基于centos5的软件版本进行的定制,这个地方本来准备把ceph的软件包安装上去,版本上的依赖相隔太大,就没装了,也没太多的必要,能实现需求即可

    [root@xenserver]# rpm -qa|grep ssh
    openssh-4.3p2-82.el5
    

    这个地方在xenserver的机器上使用这个方式使用rbd,需要做下面几个事情:

    • 一个是写rbdmap配置文件
    • 一个是rbdmap启动的脚本
    • 一个是ceph.conf的配置文件

    修改/etc/ceph/rbdmap配置文件

    /etc/ceph/rbdmap 里面的配置文件书写方式
    # RbdDevice             Parameters
    #poolname/imagename     id=client,keyring=/etc/ceph/ceph.client.keyring
    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文件内容替换如下:

    #!/bin/bash
    #
    # rbdmap Ceph RBD Mapping
    #
    # chkconfig: 2345 20 80
    # description: Ceph RBD Mapping
    
    ### BEGIN INIT INFO
    # Provides:          rbdmap
    # Required-Start:    $network
    # Required-Stop:     $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Ceph RBD Mapping
    # Description:       Ceph RBD Mapping
    ### END INIT INFO
    
    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"
    	# Read /etc/rbdtab to create non-existant mapping
    	newrbd=
    	RET=0
    	while read DEV PARAMS; do
    		case "$DEV" in
    		  ""|#*)
    			continue
    			;;
    		  */*)
    			;;
    		  *)
    			DEV=rbd/$DEV
    			;;
    		esac
    		if [ ! -b /dev/rbd/$DEV ]; then
    			echo $DEV
    			#rbd map $DEV $CMDPARAMS
    			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
    
    	# Mount new rbd
    	if [ "$newrbd" ]; then
                    echo "Mounting all filesystems"
    		mount -a
    		echo $?
    	fi
    }
    
    do_unmap() {
    	rm -rf /var/lock/subsys/rbdmap
    	echo "Stopping $DESC"
    	RET=0
    	# Recursive umount that depends /dev/rbd*
    #原始版本可能没这个命令
    #	MNTDEP=$(findmnt --mtab | awk '$2 ~ /^/dev/rbd[0-9]*$/ {print $1}' | sort -r)
    #修改如下:
    	MNTDEP=$(mount| awk '$1 ~ /^/dev/rbd[0-9]*$/ {print $3}' | sort -r)
    
    	for MNT in $MNTDEP; do
    		umount $MNT
    	done 
    	# Unmap all rbd device
    	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的挂载:

    /etc/init.d/rbdmap start
    

    启动后可以查看本地rbd映射的磁盘

    [root@xenserver15 ceph]# ll /dev/rbd1 
    brw-r----- 1 root disk 252, 0 Dec 16 11:35 /dev/rbd1
    

    卸载rbd的命令为

    /etc/init.d/rbdmap stop
    

    加入到自启动

    [root@xenserver]# chkconfig rbdmap on
    

    检查rbdmap的自启动状态

    [root@xenserver]# chkconfig --list|grep rbdmap
    rbdmap         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
    

    将rbdmap从自启动删除

    [root@xenserver]# chkconfig rbdmap off
    

    这个地方因为xenserver添加存储的时候选择类型为lvm,而系统默认是识别不了rbdmap到本地的那个文件系统的类型的,所以需要修改一点东西:
    在/etc/lvm/lvm.conf的98行修改如下

        #types= [ "nvme", 64, "mtip32xx", 64 ]
         types= [ "nvme", 64, "mtip32xx", 64 , "rbd", 64 ]
    

    查询新加磁盘的uuid(只有格式化了的磁盘才有uuid,格式化完了start_udev)

    用绝对路径的时候可能会出现编号错乱的问题,因为/dev/rbd*只是一个软链接

    [root@xenserver ceph]# ll /dev/disk/by-uuid/
    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进行下控制,流程如下

    vi /usr/bin/ceph-rbdnamer
    

    创建一个文件

    #!/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
    

    给权限

    chmod 777 /usr/bin/ceph-rbdnamer
    

    添加规则文件

     vi /etc/udev/rules.d/50-rbd.rules 
    

    添加

    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生效

    [root@xenserver15 rules.d]#  /sbin/udevcontrol reload_rules
    [root@xenserver15 rules.d]# start_udev
    

    检查

    [root@xenserver15 rules.d]# ll /dev/rbd/rbd/zp
    lrwxrwxrwx 1 root root 10 Dec 29 11:57 /dev/rbd/rbd/zp -> ../../rbd1
    

    现在用设备的时候就用下面的路径,这个是唯一值

    /dev/rbd/rbd/zp

    添加磁盘rbd到xenserver中

    [root@xenserver ceph]#  xe sr-create type=lvm content-type=user device-config:device=/dev/disk/by-uuid/0edeba9a-8b58-463c-bdea-0d46e90dd929 name-label="ceph storage (rbdtest)"
    

    然后去图形管理界面就可以看到添加的存储了

    到这里就创建好了,这里介绍下删除存储的的操作

    列出pdb模块,找到对应存储的UUID

    xe pbd-list
    

    找到对应设备的 uuid 卸载对应uuid的存储

    [root@xenserver ceph]# xe pbd-unplug uuid="09b97cda-24ad-0a36-8cf7-f7fb0b61cd55"
    

    列出存储的UUID,找到对应存储的UUID

    [root@xenserver ceph]# xe sr-list
    

    删除本地存储连接

    [root@xenserver ceph]# xe sr-forget uuid=bb24ee6f-e457-685b-f0b9-fe7c92387042
    

    对于已经挂载的rbd磁盘的信息查询的问题

    如果用的是/dev/rbd4

    查询存储池

    [root@xenserver ceph]# cat /sys/bus/rbd/devices/4/pool_id
    

    查询镜像名称

    [root@xenserver ceph]# cat /sys/bus/rbd/devices/4/name
    

    附加知识

    删除重新加进来的过程

    [root@xenserver15 rules.d]# xe pbd-list |grep rbd -A 2 -B 5
    
    
    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

    [root@xenserver15 rules.d]# xe pbd-unplug uuid=6242d000-567d-257f-d030-7f360855f87f
    [root@xenserver15 rules.d]# xe pbd-destroy  uuid=6242d000-567d-257f-d030-7f360855f87f
    

    删掉sr(sr的uuid在vg的名称里面包含了)

    [root@xenserver15 rules.d]# xe sr-list |grep rbd -A 4 -B 2
    
    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]# xe sr-forget uuid=bbfd0739-b0a1-d2e3-986f-10827e4637ea
    

    重新加入sr

    [root@xenserver15 rules.d]# xe sr-introduce uuid=bbfd0739-b0a1-d2e3-986f-10827e4637ea  type=lvm content-type=user device-config:device=/dev/rbd/rbd/zp  name-label="ceph storage (rbdtest)"
    bbfd0739-b0a1-d2e3-986f-10827e4637ea
    

    查询主机的uuid

    [root@xenserver15 rules.d]# xe host-list 
    uuid ( RO)                : 91171862-9954-46e1-9210-3cebb55df395
              name-label ( RW): xenserver1.5
        name-description ( RW): Default install of XenServer
    
    
    [root@xenserver15 rules.d]# xe pbd-create   sr-uuid=bbfd0739-b0a1-d2e3-986f-10827e4637ea device-config:device=/dev/rbd/rbd/zp host-uuid=91171862-9954-46e1-9210-3cebb55df395
    51a40dd6-2b91-7590-8a81-04d129aed1ea
    

    加载存储

    xe pbd-plug uuid=51a40dd6-2b91-7590-8a81-04d129aed1ea
    

    然后在前台repair下就可以了

    附加

    xenserver7升级了lvm

    增加lvm的识别

    需要识别rbd的话需要修改下面两个文件

    /etc/lvm/lvm.conf和/etc/lvm/master/lvm.conf

    # Configuration option devices/types.
    # List of additional acceptable block device types.
    # These are of device type names from /proc/devices, followed by the
    # maximum number of partitions.
    # 
    # Example
    # types = [ "fd", 16 ]
    # 
    # This configuration option is advanced.
    # This configuration option does not have a default value defined.
    

    修改为

    # Configuration option devices/types.
    # List of additional acceptable block device types.
    # These are of device type names from /proc/devices, followed by the
    # maximum number of partitions.
    # 
    # Example
    types = [ "rbd", 64 ]
    # 
    # This configuration option is advanced.
    # This configuration option does not have a default value defined.
    

    执行命令

    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

    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
  • 相关阅读:
    Delphi 2010下安装IOComp
    为自定义控件的某个属性添加像Winform控件中属性的注释
    C#WinForm仿qq窗体拖到windows窗体边上时,自动隐藏C#WinForm
    给图片添加水印,解决GIF添加水印的问题(无法从带有索引像素格式的图像创建 Graphics 对象)
    怎样把Image数据放入数据库
    取消IE“已限制此网页运行可以访问计算机的脚本
    sql 二进制文件的导入导出
    [转载]数据结构笔试题基础
    [转载]搜索算法(含基本搜索算法与深度搜索与广度搜索算法等思想)
    [转载]面试笔试总结
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575318.html
Copyright © 2011-2022 走看看