数据库加盘操作(EMC存储)

存储拓扑如下(点击看大图):

emc-storage

一、需求

站点

集群名称

主机名

WWWN

存储阵列/空间需求

主站点03

irrac03

irora11

10000090fa07c5fa
10000090fa07c5fb

EMC VMAX10K

RAID10/2000G (20*100GB)

irora12

10000090fa07c5ea 10000090fa07c5eb

irora13

10000090fa07c66c 10000090fa07c66d

如上表,这里是一套oracle RAC数据库的三个节点,及其对应的主机端HBA卡的wwwn号,此次需求是从存储上划分2T的数据(20个LUN)给这套数据库 ---数据库之前的数据需要保留。

二、磁盘信息备份

变更操作前,可以通过如下命令将现已存在的磁盘信息进行备份:

mkdir diskinfo_`date +%y%m%d`
cd diskinfo_`date +%y%m%d`
cat /sys/class/fc_host/host*/port_name > wwwn
fdisk -l > fdisk
cat /proc/scsi/scsi > procscsi
multipath -ll > multipath
powermt display > powermt
powermt display dev=all >>powermt
emcpadm export_mappings -x -f map.xml
lsscsi > lsscsi
ls -l /dev > dev
ls -l /dev/asmdisk > asmdisk
ls -l /dev/mapper/ > mapper
for i in `ls /dev/disk`;do
ls -l /dev/disk/$i >>devdisk
done
cp /etc/udev/rules.d/*asmdisk*  .

三、存储上划LUN

存储划LUN可以进行浏览器图形操作,也可以通过命令方的方式进行配置 。先说图形配置,通过浏览器打开https://存储IP:8443 ,输入用户名密码后进入如下界面:

storage

storage下会有很多选项,我们选择volumes ,再点virtual volume ,双击打开TDEV ,如下:

volumes

最下面点击Create就会弹出划LUN配置界面,如下:

create-lun

选择最下面的run now后,就会开始创建lun,lun创建好后,会弹出一个successfully created volumes的框 。

当然也可以通过命令进行lun的创建 ,具体命令如下:

symconfigure -sid 0082 -cmd "set symmetrix auto_meta_member_size=27307;" commit
symconfigure -sid 0082 -cmd "create dev count=20,  size=109928cyl, emulation=FBA, config=TDEV, binding to pool= VP_FC10_R10, preallocate size=all;" commit

四、将lun分配给主机组

LUN空间在存储端划好后,还需要将这部分LUN分配给主机组。在刚刚登录的web管理界面,依次通过点击:Storage > Storage Groups >sg_irrac03(对应的rac主机组),选择右边的volumes ,点击Add从volumes To Storage Group菜单里选取刚划分好的20个100GLUN,再点OK完成LUN的分配。如下图:

storage-group

分配完成后,可以退回到上图中的sg_irrac03位置,分别点击右边的Associated With:后的MaskingViews-3 ,由于该rac有三台主机,所以进去后会看到三台主机。选择其中一台,再点下面的View details或View Connections ,可以看到该主机分配的所有存储LUN情况。确认刚刚创建的LUN都已经在其中,就证明分配的没问题。

五、主机扫盘

扫盘和保存配置命令如下:

# cd /sys/class/scsi_host/host4/
# echo '- - - ' > scan
或
# echo "1" > /sys/class/fc_host/host4/issue_lip
完成扫盘后保存配置
#Powermt config
#powermt save

不同型号的HBA,扫盘的时候命令也不同,有些是操作sys下的scan文件,另一些操作是issue_lip文件。扫盘完成后,就可以在系统下识别新增的盘了,具体可以通过powermt display对比前后总LUN的数目(powermt命令需要在安装EMC的多路径软件后才有,如果使用系统自带的multipath,需要使用multipath -ll查看)。

以上操作需要在三台RAC节点上分别执行。

六、存储主机加盘相关理论

storage-server

数据库加盘操作主要涉及到三个概念:存储别名、scsi_id、askdisk别名。

1、存储别名:是由多路径软件聚合后生成的名称,无论是emcpower或者multipath 都可以通过特殊的命令或配置文件修改,变更该名称;

2、scsi_id:该id是唯一值,在存储划lun完成后就已经生成的,在主机上也可以通过scsi_id命令获取到,无论是存储别名还是asmdisk别名,最终都是跟此ID保持一致;

3、asmdisk别外:该名称是通过udev策略匹配scsi_id后通过触发生成的 ,该名称是便于数据库管理员维护使用;

4、以三节点的rac为例,理论上来说三台主机的存储别名与asmdisk不一定非要保持一致。如:某一scsi_id,在A主机上存储别名为emcpoweran,B主机上存储别名为emcpoweram,但通过udev策略修改过后,A、B两台主机上的asmdisk别名都为asm-data-an,这在数据库里加盘是没问题的。但出于后期维护的便利性和信息的统一性,强制要求同一个LUN在三台主机上这三个信息是一致的。

除以上提到的三个信息外,存储还会有Logical device ID这类唯一性信息存在,Logical device ID的作用和scsi_id的作用一样,也是唯一的。具体见下图:

lun-info

scsi-info

七、对盘

1、同台主机增加前后对盘

powermt display dev=all|grep 'Pseudo\|Logical' |awk '{if(NR%2==0){printf $0 "\n"}else{printf "%s\t",$0}}' > /tmp/powermt_new
cat powermt|grep 'Pseudo\|Logical' |awk '{if(NR%2==0){printf $0 "\n"}else{printf "%s\t",$0}}' > /tmp/powermt_old
diff /tmp/powermt_new /tmp/powermt_old |grep '<' |awk '{print $NF,$3}' > /tmp/1.txt


2、RAC主机间对盘(三台主机)

# join -a1  <(sort 3.txt) <(sort 2.txt) | join - <(sort 1.txt)
ID=0A72 name=emcpowerdq name=emcpowerbh name=emcpowerbh
ID=0A76 name=emcpowerdr name=emcpowerdq name=emcpowergb
ID=0A7A name=emcpowerds name=emcpowerdr name=emcpowergc
………………省略

为了便于进一步处理时可以更好的生成修改的脚本,我也可以将以上输出的结果,使用sed命令处理,将其中的name=字段去掉 。如下:

join -a1  <(sort 03s) <(sort 08s) | sed 's/name=//g' > join.txt

3、生成自动修改脚本

这里使用的是emcpadm命令进行的修改,这个之前在 linux下powerpath对盘与更改盘符名 。脚本内容如下:

#!/bin/bash
# author : write by yangbk < www.361way.com  >
# mail : itybku@139.com
# desc : gen file of change disk name
function emcmod(){
    while read line;do
        v1=`echo $line|awk '{print $'$1'}' `
        v2=`echo $line|awk '{print $'$2'}'`
        #echo $v1 $v2
        pre=${v2:8:1}
        suf=${v2:8:2}
        nv=emcpower${pre}${suf}
        if [ $v1 != $v2 ];then
            echo "emcpadm renamepseudo –s $v2 –t $nv"
        fi
    done < join.txt
}
function emcmod2(){
    while read line;do
        v1=`echo $line|awk '{print $'$1'}' `
        v2=`echo $line|awk '{print $'$2'}'`
        #echo $v1 $v2
        pre=${v2:8:1}
        suf=${v2:8:2}
        nv=emcpower${pre}${suf}
        if [ $v1 != $v2 ];then
            echo "emcpadm renamepseudo –s $nv –t $v1"
        fi
    done < join.txt
}
#result2=$(emcmod 2 3)
#echo $result2
echo '--------------------------------------'
emcmod 2 3
echo '--------------------------------------'
emcmod2 2 3
echo -e "\n\n\n"
echo '--------------------------------------'
emcmod 2 4
echo '--------------------------------------'
emcmod2 2 4

八、udev配置及触发

/etc/udev/rules.d下的asmdisk.rules里需要增加的内容,可以通过如下命令生成:

for i in dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef ;do
echo "KERNEL==\"emcpower*\", SUBSYSTEM==\"block\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/emcpower$i`\", NAME=\"asmdisk/asm-data-$i\", OWNER=\"grid\", GROUP=\"oinstall\", MODE=\"0660\""
done

由于UDEV触发时,如果都所有的规则全部触发,会出现心跳网卡闪断或其他问题。所以这里选择逐条进行规则触发,这里也是使用全自动的操作,可以每2秒触发一条,如下:

for i in `awk -F= '{print $NF}' 1.txt `;do udevadm trigger --subsystem-match=block --sysname-match=$i --verbose ;sleep 2 ;done

九、数据库加盘

1、加盘前检查

检查确定当前已在使用的磁盘最大编码。新增磁盘从该编码下一个开始编号。

SQL> set linesize 160
SQL> col path for a60
SQL> set pagesize 100
SQL> select group_number,disk_number,name,path,os_MB from v$asm_disk where path like '%asm-data-d%' order by group_number,disk_number;
GROUP_NUMBER DISK_NUMBER NAME                           PATH                                                              OS_MB
------------ ----------- ------------------------------ ------------------------------------------------------------ ----------
 6          28 DATADG03_0028                  /dev/asmdisk/asm-data-do                                         102401
 6          29 DATADG03_0029                  /dev/asmdisk/asm-data-dp                                         102401
16 rows selected. 

2、加盘

需要注意,加盘有两种方式:一种是向已存在的磁盘组中加盘;一种是创建一个新的磁盘组,并将存储新划分的盘分配到该组里。

创建新的磁盘组:

CREATE DISKGROUP datadg04  EXTERNAL REDUNDANCY DISK  '/dev/asmdisk/asm-data-dq','/dev/asmdisk/asm-data-dr','/dev/asmdisk/asm-data-ds','/dev/asmdisk/asm-data-dt','/dev/asmdisk/asm-data-du','/dev/asmdisk/asm-data-dv','/dev/asmdisk/asm-data-dw','/dev/asmdisk/asm-data-dx','/dev/asmdisk/asm-data-dy';

向已有磁盘组里增加磁盘:

alter diskgroup datadg01 add disk '/dev/asmdisk/asm-data-cc', '/dev/asmdisk/asm-data-cd', '/dev/asmdisk/asm-data-ce','/dev/asmdisk/asm-data-cf','/dev/asmdisk/asm-data-cg','/dev/asmdisk/asm-data-ch','/dev/asmdisk/asm-data-ci','/dev/asmdisk/asm-data-cj','/dev/asmdisk/asm-data-ck' ; 

十、检查

1、检查增加后的磁盘组信息(RAC 每个节点都要检查)grid 用户下,执行 asmcmd lsdg 命令,检查是否有新增加的磁盘组。如果没有,通过 crsctl stat res -t 检查对应的磁盘组资源在该节点是否处于 offline 状态,手动把该资源组启动即可;

2、检查磁盘组中的磁盘信息grid 用户下执行,asmcmd lsdsk 检查,新增加的磁盘是否增加到对应的磁盘组。

3、检查磁盘组数据平衡进度(向磁盘组中增加磁盘时,需要执行该检查)grid 用户下,连接到 ASM 实例下执行该操作:

 select  * from v$asm_operation;

十一、值守检查

# 集群状态
crs_stat –t
#日志应有相关
Alert.log
V$datafile
Select checkpoint_time from v$datafile where rownum <= 1;
#监控
QMONITOR及Grid control 监控数据




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: 数据库 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.