EMC 加盘 【转载】

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

 

一、需求

站点

集群名称

主机名

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)给这套数据库 ---数据库之前的数据需要保留。

二、磁盘信息备份

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

 

  1. mkdir diskinfo_`date +%y%m%d`
  2. cd diskinfo_`date +%y%m%d`
  3. cat /sys/class/fc_host/host*/port_name > wwwn
  4. fdisk -l > fdisk
  5. cat /proc/scsi/scsi > procscsi
  6. multipath -ll > multipath
  7. powermt display > powermt
  8. powermt display dev=all >>powermt
  9. emcpadm export_mappings -x -f map.xml
  10. lsscsi > lsscsi
  11. ls -l /dev > dev
  12. ls -l /dev/asmdisk > asmdisk
  13. ls -l /dev/mapper/ > mapper
  14. for i in `ls /dev/disk`;do
  15. ls -l /dev/disk/$i >>devdisk
  16. done
  17. 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的创建 ,具体命令如下:

 

  1. symconfigure -sid 0082 -cmd "set symmetrix auto_meta_member_size=27307;" commit
  2. 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都已经在其中,就证明分配的没问题。

五、主机扫盘

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

 

  1. # cd /sys/class/scsi_host/host4/
  2. # echo '- - - ' > scan
  3. # echo "1" > /sys/class/fc_host/host4/issue_lip
  4. 完成扫盘后保存配置
  5. #Powermt config
  6. #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、同台主机增加前后对盘

 

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

 

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

 

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

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

 

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

3、生成自动修改脚本

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

 

  1. #!/bin/bash
  2. # author : write by yangbk < www.361way.com >
  3. # mail : itybku@139.com
  4. # desc : gen file of change disk name
  5. function emcmod(){
  6. while read line;do
  7. v1=`echo $line|awk '{print $'$1'}' `
  8. v2=`echo $line|awk '{print $'$2'}'`
  9. #echo $v1 $v2
  10. pre=${v2:8:1}
  11. suf=${v2:8:2}
  12. nv=emcpower${pre}${suf}
  13. if [ $v1 != $v2 ];then
  14. echo "emcpadm renamepseudo –s $v2 –t $nv"
  15. fi
  16. done < join.txt
  17. }
  18. function emcmod2(){
  19. while read line;do
  20. v1=`echo $line|awk '{print $'$1'}' `
  21. v2=`echo $line|awk '{print $'$2'}'`
  22. #echo $v1 $v2
  23. pre=${v2:8:1}
  24. suf=${v2:8:2}
  25. nv=emcpower${pre}${suf}
  26. if [ $v1 != $v2 ];then
  27. echo "emcpadm renamepseudo –s $nv –t $v1"
  28. fi
  29. done < join.txt
  30. }
  31. #result2=$(emcmod 2 3)
  32. #echo $result2
  33. echo '--------------------------------------'
  34. emcmod 2 3
  35. echo '--------------------------------------'
  36. emcmod2 2 3
  37. echo -e "\n\n\n"
  38. echo '--------------------------------------'
  39. emcmod 2 4
  40. echo '--------------------------------------'
  41. emcmod2 2 4

八、udev配置及触发

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

 

  1. for i in dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef ;do
  2. 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\""
  3. done

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

 

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

九、数据库加盘

1、加盘前检查

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

 

  1. SQL> set linesize 160
  2. SQL> col path for a60
  3. SQL> set pagesize 100
  4. 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;
  5. GROUP_NUMBER DISK_NUMBER NAME PATH OS_MB
  6. ------------ ----------- ------------------------------ ------------------------------------------------------------ ----------
  7. 6 28 DATADG03_0028 /dev/asmdisk/asm-data-do 102401
  8. 6 29 DATADG03_0029 /dev/asmdisk/asm-data-dp 102401
  9. 16 rows selected.

 

2、加盘

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

创建新的磁盘组:

 

  1. 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';

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

 

  1. 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 实例下执行该操作:

 

  1. select * from v$asm_operation;

十一、值守检查

 

    1. # 集群状态
    2. crs_stat –t
    3. #日志应有相关
    4. Alert.log
    5. V$datafile
    6. Select checkpoint_time from v$datafile where rownum <= 1;
    7. #监控
    8. QMONITOR及Grid control 监控数据
posted @ 2021-04-09 15:52  耀阳居士  阅读(508)  评论(0编辑  收藏  举报