适用于:
Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 10.2.0.3 - Release: 10.1 to 10.2
Linux x86
第三方产品:Openfiler(http://www.openfiler.com)
目的
在这篇文章中,我们将演示如何设置在Openfiler的iSCSI存储设备为基础的服务器。然后,我们将展示如何使用iSCSI存储的Oracle 10gR2数据库真正应用集群选项。
Openfiler(http://www.openfiler.com)是一个强大的,直观的基于浏览器的网络存储软件分发。 Openfiler中提供基于文件的网络附加存储(NAS)和基于块的存储区域网络(SAN),在一个单一的框架。 Openfiler的上面坐的CentOS Linux的,它是作为一个独立的Linux分发分发。整个软件与第三方软件栈接口,是开源的。
基于文件的网络协议包括Openfiler的支持的NFS,SMB / CIFS和HTTP / WebDAV的和FTP。 Openfiler中包括NIS,LDAP(支持加密密码的SMB / CIFS),活动目录(在本地和混合模式)和 Hesiod所支持的网络目录。认证协议包括Kerberos 5中。 Openfiler中包括支持基于卷分区的iSCSI(目标和启动),预定的快照,资源配额,共享管理一个单一的统一的接口。
SCSI(和iSCSI)使用客户端 - 服务器架构。一个“客户”的发起者 - 它发起的请求。一个“服务器”是一个目标 - 它是一个关于你需要和从发起者得到答案的东西。发起人来自两个品种:软件和硬件。软件启动仅仅是一个驱动程序处理所有的请求和对网络接口的驱动器和SCSI驱动程序,共同努力,使各项工作完成。软件启动任何系统使用以太网卡,可以作为iSCSI发起。 (从本罗克伍德的'快速指南的iSCSI Linux的,可在http://www.cuddletech.com/articles/iscsi/index.html)。
Openfiler的基础上现有的iSCSI Linux操作系统和逻辑卷管理能力。它通过基于浏览器的界面,稳定的服务和服务器端提供了易于安装和管理。
硬件设置
Openfiler服务器,(名为pixel3类型,pixel3)我们使用戴尔DX270系统,其规格如下:
- 英特尔奔腾4处理器,HT(2.6GHz的)在BIOS中禁用
- 1GB RAM
- 80GB内部IDE硬盘驱动器
- 内置1Gb的以太网卡
对于存储,我们用两个外部迈拓OneTouch二,250GB硬盘,通过USB 2.0接口连接到Openfiler服务器。我们也有一个内部IDE硬盘驱动器上的分区,Openfiler的安装后遗留下来的。
对于Oracle 10gR2数据库服务器(名为pixel1和pixel2),我们用两个戴尔DX280机,具有以下配置:
- 英特尔奔腾4处理器,HT(3GHz的)在BIOS中启用。
- 2GB RAM
- 80GB内部SATA硬盘驱动器
- 内置1Gb的以太网卡(私有网络 - 连接到Openfiler服务器和群集互连流量)
- 加入100Mb以太网PCI卡(连接到公共网络)
D-LINK DGS-1008D 8口千兆交换机,专用网络是围绕Openfiler服务器(pixel3类型,pixel3)和数据库服务器(pixel1和pixel2)通过其1Gb的以太网卡连接。相同的私有网络使用的Oracle 10gR2 RAC互连交通。
请注意,在我们的设置,Openfiler服务器连接到公共网络。
范围和应用
一旦安装,Openfiler的基于iSCSI的存储可以像任何其他硬盘驱动器(本地),并与任何Oracle数据库版本。在这篇文章中,我们选择使用Oracle数据库10gR2 RAC的选项。
本文的主要目的是展示如何设置在Openfiler的iSCSI。虽然本文没有谈及Oracle数据库安装的详情,我们演示了如何使用一些存储的Oracle组件 - 即Oracle集群就绪服务(CRS)的和Oracle自动存储管理(ASM)。
本文提供用于教育目的,这样的设置很简单,演示想法和概念。例如,磁盘镜像是只安装一个物理磁盘上,而在实践中应至少有两个物理驱动器上完成。
Openfiler的iSCSI的使用Linux上的Oracle RAC数据库
1。 Openfiler服务器
所有默认选项安装Openfiler的2.0测试1(Openfiler的2.0.beta1-i386.iso从http://www.openfiler.com/download)。我们只需要指定本地网络的相关信息(时区,服务器名称和IP地址)。安装说明,请咨询Openfiler的安装指南在http://www.openfiler.com/docs/install/graphical_install.html。
一旦安装完成,重启服务器,以确保所有必需的组件,服务和驱动程序启动,并确认。 Openfiler服务器重新启动后,外部迈拓硬盘被发现为为/ dev / sda和/ dev / sdb的。
我们也跑了'百胜upate'以获取最新的Openfiler的版本和包。要运行的yum从公司防火墙后面,我们必须设置http_proxy环境变量,然后运行yum:
export HTTP_PROXY="<your http proxy server name>"
yum更新
在yum更新的结束,Openfiler的修补版本2.0-beta2.961.1,Linux内核更新到版本2.6.9-34.EL。
1.1。管理
Openfiler管理是一个基于浏览器的工具,通过Openfiler的存储控制中心,通过HTTPS端口446上的连接。管理员用户名是“Openfiler的”与“密码”的初始密码:
作为存储服务器使用Openfiler的,我们必须设立服务,网络接入和物理存储。其他组件(用户帐户,配额等)是不是强制性的,并可以根据需要设置。
1.2。服务
为了控制服务,我们登录到Openfiler存储控制中心(在我们通过https://pixel3:446的),用户名Openfiler的。这需要我们首页/管理部分。我们对“服务”选项卡上单击“启用/禁用服务”选项,显示:
我们只关心在iSCSI服务,以便使我们只需点击“启用”下的“iSCSI目标”的服务名称。在此之后,“iSCSI目标”的地位应该改变为“启用”。
1.3。物理存储
存储设备 - 内部IDE / SATA / SCSI磁盘,外置USB或FireWire驱动器,或任何其他存储,可连接到Openfiler服务器,并送达客户。一旦发现这些设备在操作系统级别,Openfiler的存储控制中心可用于设置和管理所有存储。
在我们的例子中,我们有一个内部60GB硬盘(分区)和两个外部USB驱动器,我们的存储需求。 Openfiler服务器上,这些驱动器被视为为/ dev / hda的(内部IDE驱动器),/ dev / sda上(外部迈拓驱动器)和/ dev / sdb的(第二个外部迈拓驱动器)。
物理存储管理,通过卷/物理存储MGMT“选项卡,在Openfiler存储控制中心。在我们的例子表明:
1.3.1。物理磁盘分区
我们将展示如何设置iSCSI存储,外部迈拓硬盘上的进程将是任何其他磁盘可通过物理存储管理屏幕相同。
通过单击/ dev / sda上,我们提出的选项编辑或创建一个分区:
创建一个分区,我们指定/选择:
Mode: Primary
Partition Type: Physical Volume
Starting Cylinder: 1
Ending Cylinder: 8000
现在的大小显示61.28GB。接受我们点击“创建”按钮。这个结果在我们的外部硬盘驱动器的一个新分区:
一个分区是我们现在所需要的一切,并为我们的存储需求后,可以创建更多的分区。
1.3.2卷组管理
要创建一个卷组,在这个新创建的分区,我们去的卷/卷组MGMT选项卡。在那里,我们将看到任何现有的卷组,或者没有在我们的例子:
我们命名的卷组(“DATA1”听起来像一个好名字),在/ dev/sda1的前面打勾的框,选择该分区,单击“添加卷组”按钮。
之后,我们的列表,显示我们新创建的卷组DATA1:
请注意,可以删除卷组(VG的“删除列),因为它不包含任何逻辑卷。
1.3.3。逻辑卷
现在,我们可以在这个新的卷组(DATA1)创建逻辑卷,通过“创建新卷”标签。
从“选择卷组”列表中,我们选择“DATA1”,点击“更改”按钮。这提出了关于可用空间的卷组'DATA1“信息:
现在,我们创建三个逻辑卷 - OCR(1GB),投票(1GB)和ASM,其余的可用空间(60GB)。对于每个逻辑卷,我们指定它的名字,一个简短的描述,需要的大小和文件系统类型的iSCSI。
之后,我们可以去到现有卷的名单“的标签,并选择”DATA1“。呈现我们DATA1卷组的饼图图,并与所有有关逻辑卷的信息表:
实际上,我们已经在网络上创建三个iSCSI磁盘,现在可以提出iSCSI客户端(pixel1和pixel2)。
1.3.4。 IETD - iSCSI企业目标的守护
ietd程序,实现企业Linux上构建iSCSI存储系统的iSCSI Target软件的用户级别的一部分。与iSCSI目标服务的启用,我们应该看到IETD Openfiler服务器上运行的守护进程:
pixel3类型,pixel3#服务的iSCSI目标状态
ietd (pid 27843) is running...
1.3.5。 / etc / ietd.conf中 - IETD配置文件
此文件被创建,并通过Openfiler的维护。最初,该文件是空的,条目被添加iSCSI目标配置。这是/ etc / ietd.conf中的内容后,我们的iSCSI设备配置:
pixel3 # more ietd.conf
Target iqn.2006-01.com.openfiler:data1.ocr
Lun 0 Path=/dev/data1/ocr,Type=fileio
Target iqn.2006-01.com.openfiler:data1.vote
Lun 0 Path=/dev/data1/vote,Type=fileio
Target iqn.2006-01.com.openfiler:data1.asm
Lun 0 Path=/dev/data1/asm,Type=fileio
我们现在应该编辑/ etc / ietd.conf文件,添加的SCSI ID,以后可以用来唯一标识客户端上的iSCSI磁盘。的SCSI ID添加到伦线,可以是任何字符串,最多16个字符。在我们的例子中,我们选择使用的SCSI ID的卷名。这些变化后,在文件/ etc / ietd.conf是:
pixel3 # cat ietd.conf
Target iqn.2006-01.com.openfiler:data1.ocr
Lun 0 Path=/dev/data1/ocr,Type=fileio,ScsiId=data1ocr
Target iqn.2006-01.com.openfiler:data1.vote
Lun 0 Path=/dev/data1/vote,Type=fileio,ScsiId=data1vote
Target iqn.2006-01.com.openfiler:data1.asm
Lun 0 Path=/dev/data1/asm,Type=fileio,ScsiId=data1asm
...
1.3.6。让iSCSI目标提供给客户
我们每次添加逻辑卷,我们需要在Openfiler服务器上重新启动相关服务。在我们的例子中,我们创建了iSCSI逻辑卷,因此我们必须重新启动iscsi-target服务。这使得网络上的所有客户提供新的iSCSI目标:
pixel3 # service iscsi-target restart
Stopping iSCSI target service: [ OK ]
Starting iSCSI target service: [ OK ]
相同(iscsi-target服务启动),可以实现通过服务选项卡,在Openfiler存储控制中心。我们会先禁用iSCSI目标服务,然后再次启用它。
2。 iSCSI客户端
iSCSI客户端可以是任何系统(Linux,Unix系统,微软视窗美元,苹果电脑等),iSCSI支持(驱动器)是可用的。在我们的例子中,客户端是两个Linux服务器(pixel1和pixel2),运行红帽4,如前面提到的在“硬件设置”部分。
2.1。 iSCSI(启动器)服务
每个客户机上,我们必须确保iSCSI(启动器)服务的启动和运行。如果不作为操作系统安装的一部分安装的,下载的iSCSI启动器-utils的转速应该从互联网的RPM资源之一,并在客户端上安装。
只有在客户端上所需的配置是在/ etc / iscsi.conf文件中指定的iSCSI服务器。唯一需要的选项是DiscoveryAddress,在Openfiler存储服务器的名称。在我们的例子是:
DiscoveryAddress=pixel3
在那之后,我们就可以开始iSCSI启动器服务:
pixel1 # service iscsi restart
Stopping iscsid: [ OK ]
Removing iscsi driver: [ OK ]
Checking iscsi config: [ OK ]
Loading iscsi driver: [ OK ]
Starting iscsid: [ OK ]
我们还应该配置的服务,是整个机器重启活跃。可以使用Linux的命令chkconfig来实现,具体如下:
pixel1 # chkconfig --level 345 iscsi on
2.2。发现iSCSI目标
当Openfiler服务器发布可用iSCSI目标(iscsi-target服务上手/ Openfiler服务器上重新启动发生),或者当iSCSI启动器服务启动/重新启动客户端上配置的客户端得到的消息,现在新的iSCSI磁盘可用。在客户端的 /var/log/messages file,我们会看到这样的事情:
May 24 16:41:25 pixel1 iscsid[6071]: version 4:0.1.11 variant (12-Jan-2005)
May 24 16:41:25 pixel1 iscsi: iscsid startup succeeded
May 24 16:41:25 pixel1 iscsid[6075]: Connected to Discovery Address 10.10.0.30
May 24 16:41:25 pixel1 kernel: iscsi-sfnet:host8: Session established
May 24 16:41:25 pixel1 kernel: scsi8 : SFNet iSCSI driver
May 24 16:41:25 pixel1 kernel: Vendor: IET Model: VIRTUAL-DISK Rev: 0
May 24 16:41:25 pixel1 kernel: Type: Direct-Access ANSI SCSI revision: 04
May 24 16:41:25 pixel1 kernel: SCSI device sdb: 124256256 512-byte hdwr sectors (63619 MB)
May 24 16:41:25 pixel1 kernel: SCSI device sdb: drive cache: write back
May 24 16:41:25 pixel1 kernel: iscsi-sfnet:host9: Session established
May 24 16:41:25 pixel1 kernel: sdb:<6>scsi9 : SFNet iSCSI driver
May 24 16:41:25 pixel1 kernel: unknown partition table
May 24 16:41:25 pixel1 kernel: Attached scsi disk sdb at scsi8, channel 0, id 0, lun 0
May 24 16:41:25 pixel1 kernel: Vendor: IET Model: VIRTUAL-DISK Rev: 0
May 24 16:41:25 pixel1 kernel: Type: Direct-Access ANSI SCSI revision: 04
May 24 16:41:25 pixel1 kernel: iscsi-sfnet:host10: Session established
May 24 16:41:25 pixel1 kernel: scsi10 : SFNet iSCSI driver
May 24 16:41:25 pixel1 kernel: Vendor: IET Model: VIRTUAL-DISK Rev: 0
May 24 16:41:25 pixel1 kernel: Type: Direct-Access ANSI SCSI revision: 04
May 24 16:41:25 pixel1 kernel: SCSI device sdc: 2097152 512-byte hdwr sectors (1074 MB)
May 24 16:41:25 pixel1 scsi.agent[6126]: disk at /devices/platform/host8/target8:0:0/8:0:0:0
May 24 16:41:25 pixel1 kernel: SCSI device sdc: drive cache: write back
May 24 16:41:25 pixel1 kernel: sdc: unknown partition table
May 24 16:41:25 pixel1 kernel: Attached scsi disk sdc at scsi9, channel 0, id 0, lun 0
May 24 16:41:25 pixel1 kernel: SCSI device sdd: 2097152 512-byte hdwr sectors (1074 MB)
May 24 16:41:25 pixel1 kernel: SCSI device sdd: drive cache: write back
May 24 16:41:25 pixel1 kernel: sdd: unknown partition table
May 24 16:41:25 pixel1 kernel: Attached scsi disk sdd at scsi10, channel 0, id 0, lun 0
May 24 16:41:25 pixel1 scsi.agent[6187]: disk at /devices/platform/host10/target10:0:0/10:0:0:0
May 24 16:41:25 pixel1 scsi.agent[6182]: disk at /devices/platform/host9/target9:0:0/9:0:0:0
...
上述条目表明,客户端(pixel1)是能够建立一个iSCSI会话,iSCSI存储服务器(10.10.0.30 pixel3类型,pixel3)
我们也看到iSCSI目标的主机ID和LUN如何关联到本地SCSI设备名称:
Attached scsi disk sdb at scsi8, channel 0, id 0, lun 0
Attached scsi disk sdc at scsi9, channel 0, id 0, lun 0
Attached scsi disk sdd at scsi10, channel 0, id 0, lun 0
若要iSCSI目标映射到本地SCSI设备名称(pixel1),我们在客户端上运行的iscsi-ls命令:
pixel1 # iscsi-ls
*******************************************************************************
SFNet iSCSI Driver Version ...4:0.1.11(12-Jan-2005)
*******************************************************************************
TARGET NAME : iqn.2006-01.com.openfiler:data1.ocr
TARGET ALIAS :
HOST ID : 10
BUS ID : 0
TARGET ID : 0
TARGET ADDRESS : 10.10.0.30:3260,1
SESSION STATUS : ESTABLISHED AT Wed May 24 16:41:26 EST 2006
SESSION ID : ISID 00023d000001 TSIH 300
*******************************************************************************
TARGET NAME : iqn.2006-01.com.openfiler:data1.asm
TARGET ALIAS :
HOST ID : 8
BUS ID : 0
TARGET ID : 0
TARGET ADDRESS : 10.10.0.30:3260,1
SESSION STATUS : ESTABLISHED AT Wed May 24 16:41:26 EST 2006
SESSION ID : ISID 00023d000001 TSIH 100
*******************************************************************************
TARGET NAME : iqn.2006-01.com.openfiler:data1.vote
TARGET ALIAS :
HOST ID : 9
BUS ID : 0
TARGET ID : 0
TARGET ADDRESS : 10.10.0.30:3260,1
SESSION STATUS : ESTABLISHED AT Wed May 24 16:41:26 EST 2006
SESSION ID : ISID 00023d000001 TSIH 200
*******************************************************************************
所以我们看到,iSCSI目标iqn.2006-01.com.openfiler:data1.asm主机ID 8,映射到/ dev / pixel1 SDB。同样,我们看到iqn.2006-01.com.openfiler:data1.vote映射到/ dev / sdc的,而且iqn.2006-01.com.openfiler:data1.ocr映射到/ dev / sdd的。
虽然上述可能看起来相当复杂,它需要做的只有iSCSI目标是首次提供一个客户端(S)。
2.3。 iSCSI磁盘分区
可用的iSCSI磁盘,现在可以使用客户端系统上,像任何其他的(本地)SCSI磁盘。他们可以分区,使用的地方(比如ext3),共享(如SMB)或集群(如OCFS2)的文件系统,为原料,设备,ASM存储等。
在我们的例子中,我们希望Oracle集群注册表(Oracle 10g的CRS叠加部分)data1.ocr,data1.vote使用共享表决磁盘(再次CRS叠加组件)和基于ASM的数据库存储data1.asm的。
我们用fdisk分区/dev/sdb (asm), /dev/sdc (vote) and /dev/sdd (ocr),如下:
为ASM存储,我们创建了10个6GB分区:
pixel1 # fdisk -l /dev/sdb
Disk /dev/sdb: 63.6 GB, 63619203072 bytes
64 heads, 32 sectors/track, 60672 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 6068 6213616 83 Linux
/dev/sdb2 6069 12136 6213632 83 Linux
/dev/sdb3 12137 18204 6213632 83 Linux
/dev/sdb4 18205 60672 43487232 5 Extended
/dev/sdb5 18205 24272 6213616 83 Linux
/dev/sdb6 24273 30340 6213616 83 Linux
/dev/sdb7 30341 36408 6213616 83 Linux
/dev/sdb8 36409 42476 6213616 83 Linux
/dev/sdb9 42477 48544 6213616 83 Linux
/dev/sdb10 48545 54612 6213616 83 Linux
/dev/sdb11 54613 60672 6205424 83 Linux
为voting disk ,我们创建3个340m分区
pixel1 # fdisk -l /dev/sdc
Disk /dev/sdc: 1073 MB, 1073741824 bytes
34 heads, 61 sectors/track, 1011 cylinders
Units = cylinders of 2074 * 512 = 1061888 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 337 349438+ 83 Linux
/dev/sdc2 338 674 349469 83 Linux
/dev/sdc3 675 1011 349469 83 Linux
为OCR,创建两个500m分区:
pixel1 # fdisk -l /dev/sdd
Disk /dev/sdd: 1073 MB, 1073741824 bytes
34 heads, 61 sectors/track, 1011 cylinders
Units = cylinders of 2074 * 512 = 1061888 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 500 518469+ 83 Linux
/dev/sdd2 501 1011 529907 83 Linux
注意进行分区需要从一个客户机(如从pixel1)进行,pixel1和pixel2都可见,因为这是共享存储。
2.4。一致/持久存储设备映射解决方案
设备在启动时的映射需要的是持久的accross重新启动。它还需要所有RAC节点上是相同的。
2.4.1 udev的选项
udev的工具可以用于磁盘安装的节点之间的一致性。它是首选的工具。
注:371814.1解释了如何使用udev的选项。
2.4.2 devlabel中 - 使用符号链接
devlabel中是一个功能,在某些Linux系统存在,但一直EL4及在n-EL5被轻视然而,当它存在,它可以被用于下列方式:
以确保一致的iSCSI设备的SCSI磁盘映射,在重新启动后,我们应标明客户机上的SCSI磁盘(或磁盘分区)。不同的分区,这需要每个客户端上进行的,iSCSI设备可以在每个客户机映射到不同的SCSI磁盘名称。如果没有客户机上安装,devlabel中可以得到从互联网转资源之一或从http://linux.dell.com/的。
由于我们将使用的磁盘分区,我们将标注的利益(/dev/sdcn and /dev/sddn)分区。首先,我们检查了我们的分区不返回有效的标签:
# devlabel printid -d /dev/sdc1
S83.1:4f70656e66696c006461746131766f7465000000000000OpenfileVirtualdisksector61
请注意,我们的SCSI ID字符串“data1vote”,被视为devlabel中(十六进制值在中间的id 6461746131766f7465),现在,它唯一标识此磁盘/分区。
现在,我们可以标注分区:
pixel1 # devlabel add -d /dev/sdc1 -s /dev/vote1
SYMLINK: /dev/vote1 -> /dev/sdc1
Added /dev/vote1 to /etc/sysconfig/devlabel
...
pixel1 # devlabel add -d /dev/sdc11 -s /dev/asm10
SYMLINK: /dev/asm10 -> /dev/sdc11
添加/ dev/asm10到/etc/sysconfig/devlabel中
之后 /etc/sysconfig/devlabel 设备标签的内容是
# devlabel configuration file
#
# This file should generally not be edited by hand.
# Instead, use the /sbin/devlabel program to make changes.
# devlabel by Gary Lerhaupt gary_lerhaupt@dell.com
#
# format: <SYMLINK> <DEVICE> <UUID>
# or format: <RAWDEVICE> <DEVICE> <UUID>
/dev/vote1 /dev/sdc1 S83.1:4f70656e66696c006461746131766f7465310000000000OpenfileVirtualdisksector61
/dev/vote2 /dev/sdc2 S83.1:4f70656e66696c006461746131766f7465320000000000OpenfileVirtualdisksector1555508
...
/dev/asm10 /dev/sdb11 S83.1:4f70656e66696c00646174613161736d31300000000000OpenfileVirtualdisksector1037005
应当指出的是,上述的符号名是完全任意,我们可以使用任何我们想要的名称。
虽然devlabel中应设置所有客户端上,我们没有工作对其他客户的iSCSI设备映射SCSI磁盘名称。我们只是可以从第一个客户端复制/ etc / sysconfig到/ devlabel中,所有其他客户端文件,并重新启动devlabel中。这将创建符号链接到正确的客户机上的SCSI磁盘名称。
正如我们已经设置于pixel1 devlabel中,我们将尽devlabel中使用重新启动pixel2设备。
我们首先从把/etc/sysconfig/devlabel,从pixel1复制到pixel2
pixel2 # cd /etc/sysconfig
pixel2 # scp pixel1:/etc/sysconfig/devlabel .
And restart the devlabel:
pixel2 # devlabel restart
SYMLINK: /dev/vote1 -> /dev/sdc1
SYMLINK: /dev/vote2 -> /dev/sdc2
SYMLINK: /dev/vote3 -> /dev/sdc3
SYMLINK: /dev/ocr1 -> /dev/sdd1
...
如果磁盘映射更改在重新启动时,devlabel中会自动修复,
检测设备名称不一致的符号链接/ dev/ocr1!
现在的设备/dev/sdd1 是/dev/sde1。
现在的符号连接/ dev/ocr1将指向到新的设备名称。
SYMLINK: /dev/ocr1 -> /dev/sde1
我们应该把“devlabel中重新启动”,在启动脚本(例如/ etc / rc.local中),以确保它在系统重新启动运行。
3. Oracle数据库使用iSCSI存储
让我们看一下如何使用Oracle集群就绪服务Oracle 10gR2数据库配置iSCSI存储。安装Oracle集群就绪服务,Oracle数据库和Oracle自动存储管理,而超出了本文的范围是,我们将演示如何在iSCSI存储可以使用这些组件。
3.1 Oracle集群就绪服务
Oracle集群就绪服务(CRS)有两个组成部分,需要共享磁盘存储 - Oracle集群注册表(OCR)和表决磁盘。此外,该建议是有至少有两个OCR和表决磁盘至少有三个份副本(镜像)。
OCR和表决磁盘是可以支持的共享文件系统(如OCFS2)的,或通过原始设备的实施。我们将使用共享iSCSI存储创建OCR和表决磁盘的原始设备。
我们已经有OCR分区/ dev/sdd 和/ dev / sdc的表决磁盘,并创建使用devlabel中的符号名。现在,我们可以使用这些分区创建原始设备。请注意,这需要在集群中的所有节点(在我们都pixel1和pixel2)。
绑定裸设备到/dev/ocr,并且做镜像:
# /usr/bin/raw /dev/raw/raw11 /dev/ocr1
# /usr/bin/raw /dev/raw/raw12 /dev/ocr2
绑定裸设备到/dev/vote,并且做镜像:
# /usr/bin/raw /dev/raw/raw21 /dev/vote1
# /usr/bin/raw /dev/raw/raw22 /dev/vote2
# /usr/bin/raw /dev/raw/raw23 /dev/vote3
红帽使用udev来管理原设备(和其他)。要设置正确的所有权和对这些原始设备的权限,我们要更新udev的权限文件/ etc/udev/permissions.d/50-udev.permissions的。
做以下更改:
1原始安装线
raw/*:root:disk:0660
2添加了两行。
OCR的原始设备之一:
raw/raw1[1-2]:root:dba:640
而另一个为表决磁盘:
raw/raw2[1-3]:oracle:dba:640
The raw section of /etc/udev/permissions.d/50-udev.permissions was now:
# raw devices
ram*:root:disk:0660
#raw/*:root:disk:0660
raw/raw1[1-2]:root:dba:640
raw/raw2[1-3]:oracle:dba:640
应当指出,我们在任何系统上没有其他裸设备。需要更多的裸设备的情况下,他们也需要在这个文件中的设置。由于我们依靠devlabel中创建符号链接的/dev/ocrn和/dev/voten,我们应该把上面的命令在/etc/rc.local文件后,devlabel中重新启动命令:
# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
# Persistent iSCSI based device names across reboots - for OCR, voting disk and ASM disks.
# See /etc/sysconfig/devlabel for mappings
devlabel restart
# OCR copy 1, /dev/ocr1 on Maxtor disk1
/usr/bin/raw /dev/raw/raw11 /dev/ocr1
# Mirror copy of OCR, /dev/ocr2, on Maxtor disk 2
/usr/bin/raw /dev/raw/raw12 /dev/ocr2
# Voting disk /dev/vote1, on Maxtor 1
/usr/bin/raw /dev/raw/raw21 /dev/vote1
# First mirror copy of the voting disk, /dev/vote2 also on Maxtor 1
/usr/bin/raw /dev/raw/raw22 /dev/vote2
# Second mirror copy of the voting disk, /dev/vote3 on Maxtor 2
/usr/bin/raw /dev/raw/raw23 /dev/vote3
# Hangcheck timer module
/sbin/insmod /lib/modules/2.6.9-22.ELsmp/kernel/drivers/char/hangcheck-timer.ko
3.2 Oracle自动存储管理
Oracle自动存储管理(ASM)是一家综合性的文件系统和卷管理器,为Oracle数据库文件明确建立。甲骨文可以在ASM中存储的文件包括数据文件,控制文件,重做日志文件,归档日志文件,Oracle恢复管理器的文件等。
3.2.1。甲骨文ASMLib程序
自动存储管理库的驱动程序(ASMLib程序)简化了磁盘设备的配置和管理,无需重新绑定与ASM每次系统重新启动时使用的裸设备。
我们从OTN(http://www.oracle.com/technology/software/tech/linux/asmlib/rhel4.html)下载以下ASMLib的RPM包:
Library and Tools:
oracleasm-support-2.0.1-1.i386.rpm
oracleasmlib-2.0.1-1.i386.rpm
Driver for our kernel version (2.6.9-22.ELsmp):
oracleasm-2.6.9-22.ELsmp-2.0.0-1.i686.rpm
安装(pixel1 and pixel2)
# rpm -Uvh oracleasm-support-2.0.1-1.i386.rpm oracleasmlib-2.0.1-1.i386.rpm oracleasm-2.6.9-22.ELsmp-2.0.0-1.i686.rpm
Preparing... ########################################### [100%]
1:oracleasm-support ########################################### [ 33%]
2:oracleasm-2.6.9-22.ELsm########################################### [ 67%]
3:oracleasmlib ########################################### [100%]
还要在两个服务器上安装asmlib
# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: [ OK ]
Scanning system for ASM disks: [ OK ]
如果asmlib安装失败,这可能是由于红帽与SELinux的问题。为了解决运行 /usr/bin/system-config-securitylevel,并禁用SELinux选项。
现在,我们可以创建ASM磁盘,使用的/dev/asm* 我们前面配置的设备。注意:需要一台服务器上只创建ASM磁盘。
要做到这一点,我们将使用oracleasm createdisk命令:
pixel1 # /etc/init.d/oracleasm createdisk DISK01 /dev/asm01
Marking disk "/dev/asm01" as an ASM disk: [ OK ]
...
pixel1 # /etc/init.d/oracleasm createdisk DISK10 /dev/asm10
Marking disk "/dev/asm10" as an ASM disk: [ OK ]
检查所有的硬盘上的asmlib:
pixel1 # /etc/init.d/oracleasm listdisks
DISK01
DISK02
...
DISK10
另外一个节点也要执行
pixel2 # /etc/init.d/oracleasm scandisks
Scanning system for ASM disks: [ OK ]
After that we should be able to see our disks on the second node:
pixel2 # /etc/init.d/oracleasm listdisks
DISK01
DISK02
...
DISK10
.2.2。创建一个ASM磁盘组
当ASM使用Oracle 10g数据库存储的数据文件存储在ASM磁盘组(S)。要创建一个ASM磁盘组中,使用部分或所有可用的iSCSI磁盘,我们前面配置,我们连接到ASM实例,任服务器pixel1或pixel2,并运行CREATE DISKGROUP命令:
创建磁盘组DG_OPEN1
正常的冗余
failgroup F1 disk 'ORCL:DISK01', 'ORCL:DISK02'
failgroup F2 disk 'ORCL:DISK03', 'ORCL:DISK04' ;
这样,我们创建了12GB的磁盘组DG_OPEN1(每个ASM磁盘为6GB),额外的12GB的数据镜像(注意两个故障组)。
3.2.3创建一个表
数据库现在可以使用它的表空间磁盘组DG_OPEN1。我们连接到数据库实例,上要么pixel1或pixel2服务器,并创建表:
SQL> CREATE TABLESPACE TBS2 DATAFILE'+ DG_OPEN1“;
如果不指定大小,创建表TBS2,用一个100MB的数据文件在磁盘组DG_OPEN1:
SQL> select name, bytes/1024/1024 mb
from v$datafile;
NAME MB
------------------------------------------------ ----------
+GROUPA/v10/datafile/system.268.564600555 520
...
+DG_OPEN1/v10/datafile/tbs2.256.589462741 100
8 rows selected.
4开放性问题
Openfiler是一个坚实的产品与丰富的功能集。在这篇文章中,我们只探讨iSCSI功能,我们没有遇到任何重大问题。
4.1 Oracle集群验证实用程序(CVU)的共享存储检查失败
Oracle集群就绪服务安装的一部分,是检查配置共享存储。虽然是可见的,从我们的群集节点共享磁盘,检查本身的失败:
$ runcluvfy.sh stage -post hwos -n pixel1,pixel2 -verbose
...
Checking shared storage accessibility...
WARNING: Unable to determine the sharedness of /dev/sdc on nodes:
pixel2,pixel1
Shared storage check failed on nodes "pixel2,pixel1".
# /usr/sbin/smartctl -i /dev/sdc
smartctl version 5.33 [i386-redhat-linux-gnu] Copyright (C) 2002-4 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
Device: IET VIRTUAL-DISK Version: 0
Serial number:
Device type: disk
Local Time is: Tue May 30 11:33:35 2006 EST
Device supports SMART and is Disabled
Temperature Warning Disabled or Not Supported
I am yet to hear from the Openfiler developers, if there are any plans to fix this.
4.2. 次要的 bugs
This version of Openfiler was still in beta release and we have seen some minor issues.
4.2.1. 物理卷空间
在卷组被删掉之后,卷组不会显示出已释放的空间。在openfiler服务器上,我们需要手动的去移除卷组。
4.2.2 Openfiler服务器重启之后,释放iSCSI targets
在Openfiler服务器重启时,iSCSI客户端不会看到任何targets.这是因为逻辑卷在重启时,不会被激活,问题在于服务器启动时激活USB需要一定的时间。Openfiler 在重启时激活逻辑卷使用脚本/etc/rc.sysinit。但是此时呼叫会使得已激活的逻辑卷管理器,USB不会被初始化,并且外部的USB驱动不会显示的加载到内核/dev/sda和/dev/sdb。解决方法是修改/etc/rc.sysinit脚本和在驱动上提出等待,在先前LVM激活的时。在脚本被修改之前,LVM那部分是:
# LVM2 initialization
if [ -x /sbin/lvm.static -o -x /sbin/multipath -o -x /sbin/dmraid ]; then
if ! LC_ALL=C fgrep -q "device-mapper" /proc/devices 2>/dev/null ; then
modprobe dm-mod >/dev/null 2>&1
fi
echo "mkdmnod" | /sbin/nash --quiet >/dev/null 2>&1
[ -n "$SELINUX" ] && restorecon /dev/mapper/control >/dev/null 2>&1
fi
if [ -c /dev/mapper/control ]; then
modprobe dm-snapshot > /dev/null 2&>1
if [ -f /etc/multipath.conf -a -x /sbin/multipath ]; then
modprobe dm-multipath >/dev/null 2>&1
/sbin/multipath -v 0
fi
if [ -x /sbin/dmraid ]; then
modprobe dm-mirror > /dev/null 2>&1
/sbin/dmraid -i -a y
fi
if [ -x /sbin/lvm.static ]; then
if /sbin/lvm.static vgscan --mknodes --ignorelockingfailure > /dev/null 2>&1 ; then
action $ "Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y -- ignorelockingfailure
fi
fi
fi
After the change, the relevant part was:
# Chech if /dev/sd[a-b] are ready
while [ ! -e /dev/sda -o ! -e /dev/sdb ]
do
echo "Devices /dev/sd[a-b] are not ready yet..."
sleep 5
done;
echo "Devices are ready, keep going..."
if [ -x /sbin/lvm.static ]; then
if /sbin/lvm.static vgscan --mknodes --ignorelockingfailure > /dev/null 2>&1 ; then
action $ "Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y -- ignorelockingfailure
fi
fi
fi