EMC 加盘 【转载】
存储拓扑如下(点击看大图):
一、需求
站点 |
集群名称 |
主机名 |
WWWN号 |
存储阵列/空间需求 |
主站点03 |
irrac03 |
irora11 |
10000090fa07c5fa |
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下会有很多选项,我们选择volumes ,再点virtual volume ,双击打开TDEV ,如下:
最下面点击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的分配。如下图:
分配完成后,可以退回到上图中的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节点上分别执行。
六、存储主机加盘相关理论
数据库加盘操作主要涉及到三个概念:存储别名、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的作用一样,也是唯一的。具体见下图:
七、对盘
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 监控数据