[原创]解决多节点ASMlib安装问题_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 5333 | 回复: 0   主题: [原创]解决多节点ASMlib安装问题        下一篇 
匿名用户
发表于: IP:您无权察看 2012-5-9 14:48:22 | [全部帖] [楼主帖] 楼主

解决多节点ASMlib安装问题

适用于:

Linux 操作系统版本:2.0.0.1-1 to 2.0.0-1

此文档的内容适用于任何平台

Linux内核版本:2.0.0-1 to 2.0.5-1

目标:

此过程是检验一个新安装的或者已经存在的Oracle ASMLib是否正确配置,以及能否成功连接到集群中的每一个节点.在Oracle ASMLib主页中提供了一份很有用的相关技术资料以及ASMLib安装指导,MetaLink链接指向本文档后面附加的其他故障解决资源.

一个正确且功能齐全的ASMLib安装过程如下:

1.设置ASMlib包的最小限度.

2.ASMLib系统必须首先配置,每个节点包含一个合法的文件路径d /etc/sysconfig/oracleasm.

3.Oracle ASMLib磁盘中的共享磁盘必须正确的分区,持久有效,并且能在每个节点中重命名(重新启动).

4.oracleasm服务必须启动并且能在每个节点中正常运行.

一般的,剪切复制命令是一个持续15分钟分步完成的过程,经验丰富的系统管理员通常将命令加黑来显示最重要的一步.

决方案:

1.检查ASMLib安装包

在每个节点中,一个ASMLib安装过程需要三个包

oracleasm-<kernel version>-<ASMLib version>
oracleasmlib
oracleasm-support


检查这三个包是否通过以下的命令正确安装在每个节点:

# rpm -qa | grep oracleasm
oracleasm-2.6.18-128.1.1.0.1.el5xen-2.0.5-1.el5
oracleasmlib-2.0.4-1.el5
oracleasm-support-2.1.2-1.el5


包的版本应该和所有的节点匹配,为了能够让ASMLib运行,包的内核模块”oracleasm”必须和运行的内核精确匹配.启动自己的内核版本,然后运行一下命令验证oracleasm内核模块是否匹配以及能否正确加载:

# rpm -q oracleasm-`uname -r`
oracleasm-2.6.18-128.1.1.0.1.el5xen-2.0.5-1.el5


如果上面的命令没有输出,则必须安装正确的ASMLib内核版本,以下命令可以显示所需版本信息:

# uname -r
2.6.18-128.1.1.0.1.el5xen


也可以检查已安装ASMLib包的所有版本,Oracle ASN|Mlib主页提供了Red Hat和Novell相配套的资源下载链接.ASMLib安装包中提供了Oracle Enterprise Linux安装文件和更新,这些更新可以通过up2date公用程序从已注册机器获得,也可以通过VLN手动下载.

检查ASMLib安装包的完整性,在每个节点运行以下命令查看是否有丢失或更改.

rpm -Vv oracleasmlib | egrep 'S\.5|missing'
rpm -Vv oracleasm-`uname -r` | egrep 'S\.5|missing'
rpm -Vv oracleasm-support | egrep 'S\.5|missing'
An example of correct output from these commands on a single node is:
root@rmvsx1:/etc/sysconfig # rpm -Vv oracleasmlib | egrep 'S\.5|missing'
root@rmvsx1:/etc/sysconfig # rpm -Vv oracleasm-`uname -r` | egrep 'S\.5|missing'
root@rmvsx1:/etc/sysconfig # rpm -Vv oracleasm-support | egrep 'S\.5|missing'


所有的包都没有输出,表明没有更改或丢失,如果发现有输出,说明该包可能被破坏或替换.

2.检查ASMLib服务

当安装成功后,每个节点的oracleasm服务都处于休眠状态;

service oracleasm status
Checking if ASM is loaded: no
Checking if /dev/oracleasm is mounted: no


如果出现以上输出,请查看Oracle ASMLib安装文档中详细说明和初始化配置指导.文档中包含初始化服务的命令: "service oracleasm configure",该命令在第一个节点运行.完成配置过程后,文件/etc/sysconfig/oracleasm将会被创建.默认情况下该文件为:

#它是Oracle装载过程自动创建的一个配置文件.
#自动存储管理内核驱动包,通过运行/etc/init.d/oracleasm configure产生该文件,也可以使用该命令修改该文件.
# ORACLEASM_ENABELED: 'true' 指开机装载驱动.
ORACLEASM_ENABLED=true
# ORACLEASM_UID: 默认用户的 /dev/oracleasm 的挂载点.
ORACLEASM_UID=oracle
# ORACLEASM_GID: 默认用户组 /dev/oracleasm 的挂载点.
ORACLEASM_GID=dba
# ORACLEASM_SCANBOOT: 'true' 指开机扫描ASM盘.
ORACLEASM_SCANBOOT=true
# ORACLEASM_SCANORDER: 磁盘扫描的匹配模式
ORACLEASM_SCANORDER=""
# ORACLEASM_SCANEXCLUDE:拒绝磁盘扫描的匹配模式
ORACLEASM_SCANEXCLUDE=""


如果"service oracleasm configure"显示如下:

initializing the Oracle ASMLib driver: [FAILED]


重新检查oracle 内核模块是否和运行内核版本正确匹配,例如,在以上的输出中包不正确.是因为oracleasm-2.6.18-8.el5-2.0.5-1.el5 包和正在运行的内核版本2.6.18-128.1.6.0.1.el5xen不匹配所导致:

# rpm -qa | grep oracleasm-2
oracleasm-2.6.18-8.el5-2.0.5-1.el5
# uname -r
2.6.18-128.1.6.0.1.el5xen


以下的内核模块版本是正确的而且能够正确加载:

# rpm -qa | grep oracleasm-2
oracleasm-2.6.18-128.1.1.0.1.el5xen-2.0.5-1.el5
root@rmvsx3:/etc/sysconfig # uname -r
2.6.18-128.1.1.0.1.el5xen


如果正确的模块不能安装,可以通过以下命令安装:

up2date -i oracleasm-`uname -r`
Or
yum -y install oracleasm-`uname -r`


一旦服务正确配置,内核模块加载成功, 运行"service oracleasm start"命令如以下所示:

service oracleasm start
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]


当服务启动运行之后,它的状态通过以下命令在任何时候查看:

# service oracleasm status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes


对于第一次安装,从已成功运行的第一个节点复制/etc/sysconfig/oracleasm,粘贴到每个节点,然后在每个节点启动服务确保内核模块正确匹配,检验/etc/sysconfig/oracleasm配置文件是否正确复制.

正确配置所有的节点后,在所有的节点中运行"service oracleasm status"命令,查看oracleasm服务是否安装以及能否正常运行,确保服务能在开机后启动,在所有节点中运行以下命令:

chkconfig oracleasm on


重新启动节点检验服务能被"service oracleasm status"命令重复启动,重复以上的操作,确保所有的节点处于正确的状态.

3.检查ASMLib LUN 和命名

作为集群存储服务,ASM磁盘必须共享且能被所有节点访问,要达到这项功能,底层物理磁盘必须可用并能正确映射到每个节点的磁盘名, 第一次安装时LUNs需要选中,初始化和标记ASM的空间,对于已经安装了的,跳过下面部分,不要重复标记已经存在的LUMs.

警告:标记过程是一个破坏性的过程,必须慎重确定,如果LUN中包含数据或者要重新标记,使用附加的提示.为了正确初始化和标记LUMs,你必须首先确认哪些LUNs将作为ASM一个节点中的磁盘空间,由于LUMs是共享的,初始化和标记过程只能在一个节点中进行,你可以使用以下命令在第一个节点中定义LUMs的scsi的ID:

# cat /proc/partitions |grep sd|while read a b c d;do echo -n $d$'\t'" scsi_id=";(echo $d|tr -d [:digit:]|xargs -i scsi_id -g -s /block/{})done


如:

# cat /proc/partitions |grep sd|while read a b c d;do echo -n $d$'\t'" scsi_id=";(echo $d|tr -d [:digit:]|xargs -i scsi_id -g -s /block/{})done
sda scsi_id=14945540000000000646174612d3000000000000000000000
sda1 scsi_id=14945540000000000646174612d3000000000000000000000
sdb scsi_id=14945540000000000646174612d3000000000000000000000
sdb1 scsi_id=14945540000000000646174612d3000000000000000000000
sdc scsi_id=14945540000000000646174612d3100000000000000000000
sdc1 scsi_id=14945540000000000646174612d3100000000000000000000
sdd scsi_id=14945540000000000646174612d3100000000000000000000
sdd1 scsi_id=14945540000000000646174612d3100000000000000000000
sde scsi_id=14945540000000000646174612d3200000000000000000000
sde1 scsi_id=14945540000000000646174612d3200000000000000000000


这个命令输出的是系统的独立磁盘区,你可以使用scsi ID查找已经分配的ASM LUMs,当使用多路径时,你可以看到相同的scsi ID对于几个磁盘区,还有一些个别的SAN路径映射到聚合磁盘区,例如, 在/etc/multipath.conf中, sda中相同的scsi ID和sdb路径映射到data0 alias:

multipath {
      wwid 14945540000000000646174612d3000000000000000000000
      alias data0
}


多路径后台程序将位于不同路径中的相同磁盘分区映射到一个名为data0的聚集磁盘区

# multipath -ll
data0 (14945540000000000646174612d3000000000000000000000) dm-2 IET,VIRTUAL-DISK
[size=1.0G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 0:0:0:0  sda 8:0    [active][ready]
\_ 1:0:0:0  sdb 8:16   [active][ready]


ASM磁盘分区将被创建,详细信息阅读Installing Oracle ASMLib文档,在创建这个分区之后,data0磁盘分区显示如下:

# ls /dev/mapper/data0*
/dev/mapper/data0 /dev/mapper/data0p1


按照以下步骤,ASM分区将被创建在p1分区:

# oracleasm createdisk DATA0 /dev/mapper/data0p1
Writing disk header: done
Instantiating disk: done


由于LUMs是共享的.初始化和标记过程只能在一个节点进行,请查看Installing Oracle ASMLib文档和ASM分区标记的详细指导文档.对于已经存在或新标记的系统,你可以通过以下命令定义和查看LUNs,  scsi ID号和ASM 分区标记:

# blkid|grep sd.*oracleasm|while read a b;do echo -n $a$b" scsi_id=";(echo $a|tr -d [:digit:]|tr -d [:]|cut -d"/" -f3|xargs -i scsi_id -g -s /block/{})done;


       运行命令,确保scsi的id号和标记在每个节点都是相同的:

root@rmvsx1:~ # blkid|grep sd.*oracleasm|while read a b;do echo -n $a$b" scsi_id=";(echo $a|tr -d [:digit:]|tr -d [:]|cut -d"/" -f3|xargs -i scsi_id -g -s /block/{})done;
/dev/sda1:LABEL="DATA0" TYPE="oracleasm" scsi_id=14945540000000000646174612d3000000000000000000000
/dev/sdb1:LABEL="DATA0" TYPE="oracleasm" scsi_id=14945540000000000646174612d3000000000000000000000
/dev/sdc1:LABEL="DATA1" TYPE="oracleasm" scsi_id=14945540000000000646174612d3100000000000000000000
/dev/sdd1:LABEL="DATA1" TYPE="oracleasm" scsi_id=14945540000000000646174612d3100000000000000000000
/dev/sde1:LABEL="DATA2" TYPE="oracleasm" scsi_id=14945540000000000646174612d3200000000000000000000
/dev/sdf1:LABEL="DATA2" TYPE="oracleasm" scsi_id=14945540000000000646174612d3200000000000000000000
/dev/sdg1:LABEL="DATA3" TYPE="oracleasm" scsi_id=14945540000000000646174612d3300000000000000000000
/dev/sdh1:LABEL="DATA3" TYPE="oracleasm" scsi_id=14945540000000000646174612d3300000000000000000000
/dev/sdk1:LABEL="DISK4" TYPE="oracleasm" scsi_id=14945540000000000646174612d3500000000000000000000
/dev/sdl1:LABEL="DISK4" TYPE="oracleasm" scsi_id=14945540000000000646174612d3500000000000000000000
root@rmvsx2:~ # blkid|grep sd.*oracleasm|while read a b;do echo -n $a$b" scsi_id=";(echo $a|tr -d [:digit:]|tr -d [:]|cut -d"/" -f3|xargs -i scsi_id -g -s /block/{})done;
/dev/sda1:LABEL="DATA0" TYPE="oracleasm" scsi_id=14945540000000000646174612d3000000000000000000000
/dev/sdb1:LABEL="DATA0" TYPE="oracleasm" scsi_id=14945540000000000646174612d3000000000000000000000
/dev/sdc1:LABEL="DATA1" TYPE="oracleasm" scsi_id=14945540000000000646174612d3100000000000000000000
/dev/sdd1:LABEL="DATA1" TYPE="oracleasm" scsi_id=14945540000000000646174612d3100000000000000000000
/dev/sde1:LABEL="DATA2" TYPE="oracleasm" scsi_id=14945540000000000646174612d3200000000000000000000
/dev/sdf1:LABEL="DATA2" TYPE="oracleasm" scsi_id=14945540000000000646174612d3200000000000000000000
/dev/sdg1:LABEL="DATA3" TYPE="oracleasm" scsi_id=14945540000000000646174612d3300000000000000000000
/dev/sdh1:LABEL="DATA3" TYPE="oracleasm" scsi_id=14945540000000000646174612d3300000000000000000000
/dev/sdk1:LABEL="DISK4" TYPE="oracleasm" scsi_id=14945540000000000646174612d3500000000000000000000
/dev/sdl1:LABEL="DISK4" TYPE="oracleasm" scsi_id=14945540000000000646174612d3500000000000000000000
root@rmvsx3:~ # blkid|grep sd.*oracleasm|while read a b;do echo -n $a$b" scsi_id=";(echo $a|tr -d [:digit:]|tr -d [:]|cut -d"/" -f3|xargs -i scsi_id -g -s /block/{})done;
/dev/sda1:LABEL="DATA0" TYPE="oracleasm" scsi_id=14945540000000000646174612d3000000000000000000000
/dev/sdb1:LABEL="DATA0" TYPE="oracleasm" scsi_id=14945540000000000646174612d3000000000000000000000
/dev/sdc1:LABEL="DATA1" TYPE="oracleasm" scsi_id=14945540000000000646174612d3100000000000000000000
/dev/sdd1:LABEL="DATA1" TYPE="oracleasm" scsi_id=14945540000000000646174612d3100000000000000000000
/dev/sde1:LABEL="DATA2" TYPE="oracleasm" scsi_id=14945540000000000646174612d3200000000000000000000
/dev/sdf1:LABEL="DATA2" TYPE="oracleasm" scsi_id=14945540000000000646174612d3200000000000000000000
/dev/sdg1:LABEL="DATA3" TYPE="oracleasm" scsi_id=14945540000000000646174612d3300000000000000000000
/dev/sdh1:LABEL="DATA3" TYPE="oracleasm" scsi_id=14945540000000000646174612d3300000000000000000000
/dev/sdk1:LABEL="DISK4" TYPE="oracleasm" scsi_id=14945540000000000646174612d3500000000000000000000
/dev/sdl1:LABEL="DISK4" TYPE="oracleasm" scsi_id=14945540000000000646174612d3500000000000000000000


scsi的id号和磁盘标记与所有节点匹配是很重要的,记录每个多路径系统,每个聚集ASM分区包含两个物理磁盘路径,对于所有的节点,测试ASM分区在物理上是可读的,你可以使用以下命令导出ASM分区的头信息:

find /dev/oracleasm/disks -type b | xargs -i sh -c "echo {}; dd if={} count=10 2>/dev/null | strings"


       运行在一个测试集群中的一个节点上的例子如下:

root@rmvsx1:~ # find /dev/oracleasm/disks -type b | xargs -i sh -c "echo {}; dd if={} count=100 2>/dev/null | strings"
/dev/oracleasm/disks/DISK4
ORCLDISKDISK4
DATA_0004
DATA
DATA_0004
/dev/oracleasm/disks/DATA3
ORCLDISKDATA3
DATA_0003
DATA
DATA_0003
/dev/oracleasm/disks/DATA2
ORCLDISKDATA2
DATA_0002
DATA
DATA_0002
/dev/oracleasm/disks/DATA1
ORCLDISKDATA1
DATA_0001
DATA
DATA_0001
/dev/oracleasm/disks/DATA0
ORCLDISKDATA0
DATA_0000
DATA
DATA_0000


确保磁盘名字和分区名字在所有的节点上是相同的,如果他们不相同,检查所有节点上的/etc/multipath.conf是否一致,映射到alias的标示符是否正确.

如果oracleasm服务没有运行,分区的名字可以通过以下命令从asm磁盘中导出:

# dd if=/dev/mapper/data0p1 bs=16 skip=2 count=1 | hexdump -C
1+0 records in
1+0 records out
16 bytes (16 B) copied, 0.037821 seconds, 0.4 kB/s
00000000 4f 52 43 4c 44 49 53 4b 44 41 54 41 30 00 00 00 |ORCLDISKDATA0...|


未测试的多路径LUNs可以重新定义和导出以确保磁盘正确映射:

# multipath -ll | grep -A 4 data0
data0 (14945540000000000646174612d3000000000000000000000) dm-2 IET,VIRTUAL-DISK
[size=1.0G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 1:0:0:0 sdb 8:16 [active][ready]
\_ 0:0:0:0 sda 8:0 [active][ready]


然后在asm磁盘分区运行以下命令:

# dd if=/dev/sda1 bs=16 skip=2 count=1 | hexdump -C
1+0 records in
1+0 records out
16 bytes (16 B) copied, 0.00071 seconds, 22.5 kB/s
00000000 4f 52 43 4c 44 49 53 4b 44 41 54 41 30 00 00 00 |ORCLDISKDATA0...|
# dd if=/dev/sdb1 bs=16 skip=2 count=1 | hexdump -C
1+0 records in
1+0 records out
16 bytes (16 B) copied, 0.000705 seconds, 22.7 kB/s
00000000 4f 52 43 4c 44 49 53 4b 44 41 54 41 30 00 00 00 |ORCLDISKDATA0...|


4.最后的服务检查

作为最后的一个检查,在所有的节点上运行以下命令:

# service oracleasm status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes
root@rmvsx3:/etc/sysconfig # service oracleasm listdisks
DATA0
DATA1
DATA2
DATA3
root@rmvsx3:/etc/sysconfig # oracleasm querydisk DATA0


磁盘"DATA0"是一个合法的ASM分区
(依次检查DATA1, DATA2 and DATA3)

一个好的做法是在第一次安装的时候(或者是已经安装但是存在问题)重新启动所有的节点,以确保所有的服务都正确的映射到所有的节点,oracle服务状态无错误,所有的ASM分区都是可用的.

总结:

这些测试将建立静态健康的环境当中并且是基于ASMLib子系统的所有节点之上的.



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论