越秀资本2023年基础设施采购项目lszldb RAC虚拟机数据库存储迁移方案 <> = 明确lszldb RAC虚拟机数据库存储迁移需求 = 1. 将现有的EMC Unity400存储替换为UnityXT480存储(采用RDM磁盘) 2. 采用asm rebalance技术进行在线迁移。 = 准备工作 = 如无特别说明, 默认使用grid用户执行. 1. grid用户执行标示为 '''$''' 2. root用户执行标示为 '''#''' == 查看ASM磁盘组信息 == [grid@lszldb1 ~] asmcmd lsdg == 查看ASM 磁盘空间使用情况 == $ asmcmd lsdsk -k $ sqlplus / as sysasm {{{ SQL> set linesize 300 column path format a50 column NAME format a15; select GROUP_NUMBER,DISK_NUMBER,HEADER_STATUS,MODE_STATUS,MOUNT_STATUS,STATE,total_mb,free_mb,NAME,PATH from v$asm_disk; }}} $ crsctl query css votedisk == 给lszldb数据库虚拟化分配共享RDM磁盘 == 1. 在存储中划分对应的LUN同时分配给lszldb RAC虚拟机数据库所在的物理服务器. 2. 分配RDM设备至对应的虚拟机. 参考现有RDM磁盘配置和VMware DOC https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.storage.doc/GUID-B3522FF1-76FF-419D-8DB6-F15BFD4DF12A.html == 查看并确认新挂载的磁盘状态 == $ lsblk Login in as '''root''' user * 可结合dmesg命令输出确认新增加的磁盘信息 # dmesg * 列出所有磁盘WWID/disk.UUID {{{ # for DISK in `find /dev/ -name "sd*" | sort`; do WWID=`/sbin/scsi_id --whitelisted --replace-whitespace --device=$DISK`; \ echo $DISK " WWID/disk.UUID is " $WWID; done | sort }}} 记录新增加的6块磁盘WWID/disk.UUID == 修改udev oracle磁盘规则 == * 修改之前备份配置文件. # cp /etc/udev/rules.d/99-oracle-asmdevices.rules{,.bk-$(date +%F)} * 在udev文件中增加新存储的磁盘信息. # vi /etc/udev/rules.d/99-oracle-asmdevices.rules === 使udev规则生效 === # udevadm control --reload-rules * RHEL/CentOS6 # udevadm trigger --type=devices --action=change * 确认asm_disk $ sqlplus / as sysasm {{{ SQL> select GROUP_NUMBER,DISK_NUMBER,HEADER_STATUS,MODE_STATUS,MOUNT_STATUS,STATE,total_mb,free_mb,NAME,PATH from v$asm_disk; }}} $ tail -f .../diag/asm/+asm/+ASM/trace/alert.log == 正式加入前创建磁盘组测试(可选) == * 如果需要做需要提前完成. 为新oracleasm磁盘创建测试磁盘组以确认磁盘是可以正常使用 测试完成之后, 删除该测试磁盘组, 再执行加入现有磁盘组的操作 = lszldb数据库存储迁移步骤 = == 备份相关数据 == 1. 执行备份 2. 备份归档 === 执行备份 === 使用nbu或备份软件执行全备或增备. === 备份归档 === 建议手动再备份一下asm磁盘组中的归档日志至本地. 创建本地备份目录, 确保该目录空间足够. # mkdir /backup/$(date +%F) # chown grid:oinstall /backup/$(date +%F) * ASM copy archivelog FROM ASM to LOCAL {{{ $ for i in $(asmcmd ls DATA/LSZLDB/ARCHIVELOG/); do asmcmd cp +DATA/LSZLDB/ARCHIVELOG/$i /backup/2023-12-30 done }}} == 将磁盘asm-ncrs01-asm-ncrs03加入到OCR磁盘组 == $ sqplus / as sysasm {{{ alter diskgroup OCR add disk '/dev/asm-ncrs01','/dev/asm-ncrs02','/dev/asm-ncrs03' rebalance power 6; }}} 或者通过以下命令依次添加(建议一起添加). {{{ alter diskgroup OCR add disk '/dev/asm-ncrs01' rebalance power 6; alter diskgroup OCR add disk '/dev/asm-ncrs02' rebalance power 6; alter diskgroup OCR add disk '/dev/asm-ncrs03' rebalance power 6; }}} === 查看rebalance情况和日志 === $ asmcmd -p lsop $ sqlplus / as sysasm {{{ SQL> select * from gv$asm_operation; }}} $ tail -f path-to-asm/alert.log == 然后在DATA中加入asm-ndata01-asm-ndata03磁盘 == {{{ alter diskgroup DATA add disk '/dev/asm-ndata01','/dev/asm-ndata02','/dev/asm-ndata03' rebalance power 9; }}} == 查看rebalance情况与日志对比 == $ asmcmd -p lsop $ sqlplus / as sysasm {{{ SQL> select * from gv$asm_operation; }}} $ tail -f path-to-asm-diag/alert.log 备注: 确认所有磁盘rebalance完成后,再进行下一步删盘操作; 尽量在业务不繁忙的情况下操作; == 逐次剔除旧存储对应的asm disk == === DROP OCR MEMBER === {{{ sqlplus -s '/ as sysasm' << "EOF" alter diskgroup OCR drop disk OCR_0000 rebalance power 3; EOF }}} {{{ sqlplus -s '/ as sysasm' << "EOF" alter diskgroup OCR drop disk OCR_0001 rebalance power 3; EOF }}} {{{ sqlplus -s '/ as sysasm' << "EOF" alter diskgroup OCR drop disk OCR_0002 rebalance power 3; EOF }}} === DROP DATA MEMBER === {{{ sqlplus -s '/ as sysasm' << "EOF" alter diskgroup DATA drop disk DATA_0000 rebalance power 9; EOF }}} {{{ sqlplus -s '/ as sysasm' << "EOF" alter diskgroup DATA drop disk DATA_0001 rebalance power 9; EOF }}} {{{ sqlplus -s '/ as sysasm' << "EOF" alter diskgroup DATA drop disk DATA_0002 rebalance power 9; EOF }}} == 查看rebalance情况与asm日志 == $ asmcmd -p lsop $ sqlplus / as sysasm {{{ SQL> select * from gv$asm_operation; }}} $ tail -f path-to-asm-diag/alert.log == 检查数据库和asm状态 == $ crsctl status resource -t $ asmcmd lsdg $ sqlplus as sysasm {{{ SQL> set linesize 300 column path format a50 column NAME format a15; select GROUP_NUMBER,DISK_NUMBER,HEADER_STATUS,MODE_STATUS,MOUNT_STATUS,STATE,total_mb,free_mb,NAME,PATH from v$asm_disk; }}} 确认无误之后,执行下一步. == 依次回收该RAC数据库虚拟机上的磁盘 == 先验证一个磁盘回收, 如无异常, 回收所有旧存储的磁盘. 最后建议是重启验证一下, 如果可能的话. = 风险说明 = 本操作为oracle asm磁盘rebalance技术的实现, 理论上没有风险. 但仍然针对相关场景进行说明, 如下: 1. 如果asm磁盘添加失败, 则asm磁盘组不会有任何影响. 2. 如果asm磁盘添加成功, 则asm磁盘组会新增对应的成员盘, 数据同步过程中性能受到一定影响. 3. 如果drop 旧存储的asm磁盘失败, 则旧的asm磁盘仍然存在asm磁盘组之中, ASM磁盘数据不会受到影响. 4. 如果drop 旧存储的asm磁盘成功, 则旧的asm磁盘将从asm磁盘组中删除, 数据将自动同步至所有其它磁盘(包括旧存储和新存储磁盘),不会影响数据库运行. 5. 所有旧存储中的asm磁盘drop完成, 数据全部平衡至新的asm磁盘中, 数据同步过程中性能受到一定影响. 6. Oracle 软件版本bug等其它因素, 数据库异常, 这种情况发生概率极低(PS:11.2.0.4虚拟机RAC环境中目前未遇到此类问题) 假设有异常, 则考虑启用容灾数据库. 同时执行数据库环境恢复操作. = 回退说明 = 除非Oracle软件或RHEL/CentOS Linux系统bug, asm磁盘组添加和删除磁盘成员的操作, 无论成功或失败, 都将自动完成, 不存在回退. = References = https://docs.oracle.com/cd/E29505_01/server.1111/e10897/asm.htm