目录
1. 简介
   2. 软件前提条件
          * Oracle VM Server 2.1 和 Oracle VM Manager 2.1
          * Oracle Enterprise Linux 5.1 Update 1“小型”Oracle VM 模板 (PV_x86_64)
          * 适用于 Linux x86(64 位)的 Oracle 数据库 11g 和集群件
          * 适用于 Xen(64 位)的 Openfiler 2.2
   3. Oracle VM Server 安装
   4. Oracle VM Manager 安装
   5. 设置虚拟机 (VM)
          * 创建 VM
                o 上载模板
                o 基于可直接运行的 OEL 模板创建 RAC VM
                o 创建 Openfiler VM
          * 配置 VM
                o 根据扩展 RAC 需求重新配置 RAC VM
          * iSCSI 优化
   6. 为 Oracle 软件安装做准备
          * 设置 Oracle SSH 用户等效性
          * ASMLIB 配置
   7. Oracle 集群件安装
          * 第三个节点作为 NFS Server
          * 主要安装
          * 验证集群件安装
   8. Oracle 数据库软件安装
          * NetCA:为 RAC 配置 Oracle TNS 服务
          * DBCA:数据库创建
          * 针对扩展 Oracle RAC 11g 的数据库优化
                o 首选读取
                o 快速磁盘重新同步
          * 检查扩展 RAC 的表决磁盘和 OCR 镜像
   9. 测试故障切换功能
          * ERAC1 上的实例故障
          * 灾难性站点故障
          * 延迟影响和性能下降
                o 无延迟
                o 1ms 人为延迟
                o 3ms 人为延迟
  10. 故障诊断和其他事项
          * 连接到 RAC 时避免出现 ORA-12545 错误
          * 为 Oracle VM Server 2.1 Xen dom0 构建内核
                o 安装新内核
          * 从灾难性站点故障中快速恢复
  11. 后续步骤

 

1. 简介
典型的 Oracle 真正应用集群 (RAC) 部署是一种体系结构,可提供单节点或多节点故障的快速恢复。但在通常情况下,Oracle RAC 的所有节点都位于同一个数据中心,因此容易导致灾难性数据中心故障。在这种情况下实现灾难恢复的解决方案是,在本地数据中心和正在运行备用系统的某个备份 数据中心(通常是单个 Oracle 数据库或其他 RAC 集群)之间设置 Oracle DataGuard。
虽然 DataGuard 可以很好地完成这一任务,但它将整个备用系统和阵列(一个或多个)变成被动节点(计算功能无法用于事务处理),因此大大提高了此解决方案的成本。(虽然备 用的 Oracle DataGuard 系统可对只读查询开放,甚至可随同 Oracle 数据库 11g 中的 Active DataGuard 一直在只读模式下运行,但此配置要求应用程序知道某些节点的只读特性)。
幸运的是,还有另一种解决方案可以实现(部分)灾难恢复,称为“扩展 RAC”(Extended RAC 或 Stretched RAC)。在这种体系结构中,某些 RAC 节点在“站点 Alpha”中工作,其余节点在“站点 Beta”中工作。两个站点中的节点都是主动节点,因此所有计算资源都将得到充分利用。如图 1 中所示,每个站点都有其自身的存储区域网 (SAN);同时出现在两个数据中心(dcA 和 dcB)的系统是同一个 RAC 集群的成员,因此必须能够通过互连快速交换数据以及访问其他站点的存储设备。(也就是说,位于 dcA 的节点 RAC1 写入位于 dcB 的 SAN 阵列,并与位于 dcB 的 RAC2 节点通信)。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise
图 1
在本指南中,您将使用 Oracle VM 2.1 提供的虚拟化功能,在单台 PC 的 x86 64 位系统上创建经济但功能齐全的 Oracle 扩展 RAC 实现(仅供教学使用)。(图 2 提供了详细的拓扑结构。)主要制约因素 — 延迟(Oracle RAC 对互连延迟以及读取或写入期间的 I/O 延迟很敏感)— 将被人为施加到互连和存储设备以太网流量上(对 IP 网络设备使用 Linux 的信源质量 (Quality of Source))。
如果满足以下任一必要条件,扩展 RAC 可能还会削减成本并/或显著提升企业应用程序的可用性:
  • 两个数据中心/建筑物/机房已通过延迟很低的高速网络直接连接(甚至条件更好,在这些位置已存在存储基础架构)。
  • 企业愿意付出代价来提高系统可用性(RAC 的故障切换时间比 Data Guard 短)。
另请注意,从理论上讲,在扩展 RAC 中存储阵列不必是最可靠的,因为它中断后不会阻止集群处理请求。
在本指南描述的配置中,Oracle 数据库 11g 第 1 版(在 RAC 配置中)将在两个 Oracle Enterprise Linux 5.1 系统上运行。Oracle RAC 节点的存储将由 OpenFiler 上运行的两个 iSCSI 存储服务器提供。此配置还将利用 Oracle 自动存储管理 (ASM) 提供的特性,ASM 是 Oracle 数据库 10g 及更高版本基于主机/数据库的镜像特性。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_02
图 2
理想情况下,应使用实际硬件实现扩展 RAC 以获取更佳性能,但由于此体系结构仅用于研究和培训目的,因此这种折衷方案是可以接受的。Oracle VM Server 只需要一台计算机,但为了安装 Oracle VM Manager(用于管理虚拟系统的简单 Web 控制台),我们还需要另一台 PC。
在撰写本文时,光纤通道协议 (FCP) 仍是存储首选;但在 Oracle 数据库 11g 中,Oracle 引入了对数据文件 NFS 共享存储的支持,以及一些性能增强功能(如 Oracle Direct NFS)。由于本安装的性质,我们仍然继续选择较简单的 iSCSI 存储方法,以保持实际的 FCP 概念不变。注意,在扩展 RAC 案例中,必须将第三个表决磁盘放在 dcA 和 dcB 以外的位置,以实现完全容错的体系结构。
注意,本指南中的磁盘镜像配置对于实际案例来说是不够的;还缺少 I/O 多路径或冗余互连。另外,尽管本指南提供了成功安装完整 Oracle RAC 11g 评估系统的详细说明,但它绝不能替代 Oracle 官方文档。除本指南之外,用户还应参阅以下 Oracle 文档,以完全了解 Oracle RAC 11g 的其他配置选项、安装以及管理。
Oracle VM 的安装要求如下:
  • Intel QuadCore Q6600 2.4GHz(4 个内核)
  • 8GB DDR2 RAM
  • 3x160GB SATAII 7200 RPM 硬盘
  • DVD 阅读器
Oracle VM Manager 已安装在某个工作站(运行 CentOS 5.0;我本应安装 Oracle Enterprise Linux 5,但为了节省时间,我使用了已有的 CentOS 安装)上:
  • AMD Sempron 3000+(一个内核)
  • 1.5GB DDR RAM
  • 250GB SATA 硬盘
  • DVD 刻录机
在开始之前,我必须再强调一下: 本指南仅用于教学目的,既不支持也未考虑生产部署。对于遵循本指南操作时所遇到的问题,Oracle 支持部门不会作出响应。
 

2. 软件前提条件
要构建扩展 RAC,需要下载以下软件(后面将提供详细说明):
Oracle VM Server 2.1 和 Oracle VM Manager 2.1
这两个产品都是免费提供的。注册之后,应在 Select a Product Pack 中选择 Oracle VM,并在 Product architecture 中选择 x86 64 bit,然后选择 Go。选中 Oracle VM 2.1 Media Pack 并单击 Continue。现在您应看到:
  • Oracle VM Server 2.1 (304MB)
  • Oracle VM Manager 2.1 (534MB)
将这两个产品下载到之前准备好的下载目录中。将这两个 *.zip 文件解压缩后,应显示如下两个 ISO 文件,您可以使用喜爱的 CD 刻录软件将其刻录到 CD 中:
  • OracleVM-Server-2.1.iso
  • OracleVM-Manager-2.1.iso
(提示:如果您将这些 ISO 下载到某个工作站并要在其上进行安装,则不必为了在此工作站上安装 OracleVM-Manager-2.1.iso 而刻录该文件。可以在 Linux 上使用以下命令将 CD 回送挂载到 /mnt/cdrom 上):
mount -o loop,ro  OracleVM-Manager-2.1.iso /mnt/cdrom"
Oracle Enterprise Linux 5.1 Update 1“小型”模板 (PV_x86_64)
此处,您将不使用安装介质 CD 或 DVD 从头安装 Linux 系统,而是使用 Oracle 提供的 VM Linux 模板。VM Linux 模板是二进制文件,它是可直接运行的整个系统的磁盘镜像。由于 Oracle VM 所提供的环境是通用的,因此不必在每个系统上执行安装以确保系统具有驱动程序,而是从模板中克隆每个 Linux 实例并启动。Oracle 提供为 Oracle 数据库预配置的模板。
登录并接受协议之后,从 Product Pack 选择列表中选择 Oracle VM Templates,并从 Platform 选择列表中选择 x86_64,然后单击 Go。单击 Oracle VM Templates for Oracle Enterprise Linux 5 Media Pack for x86_64 (64 bit) 链接,然后选择下载 Oracle Enterprise Linux 5 Update 2 模板 — PV Small x86_64(64 位)。
超虚拟化 (PV) 系统和虚拟硬件 (HVM) 系统之间的主要区别在于 Linux 内核与 Oracle VM Server 内核 (Xen hypervisor) 之间交互的性质。HVM 系统是没有特殊勾子(以利用 Xen 的功能)的标准 x86 或 x86_64 系统,可以在标准 PC(无 Xen)上运行。另一方面,PV 系统知道自身在 Xen 上运行,它们不联系硬件,而是直接与 Xen 通信 — 不必像使用 HVM 时那样模拟实际硬件。
适用于 Linux x86(64 位)的 Oracle 数据库 11g 和集群件
需要下载的文件名如下:
  • linux.x64_11gR1_database.zip
  • linux.x64_11gR1_clusterware.zip
适用于 Xen(64 位)的 OpenFiler 2.2
打开下载页后,查找 openfiler-2.2-x86.img.gz (~160MB)。此处我们将使用 2.2 版;但是,我还建议您签出 2.3 版,它增加了一些很好的功能,如 iSCSI 快照的 LUN 映射和 iSCSI 动态卷大小调整(但在本指南中未进行可用性测试)。
 

3. Oracle VM Server 安装
刻录完 Oracle VM Server 引导 CD 后,将其放入有足够 CPU 和 RAM(可以运行几个 Linux 实例而不必进行交换)的 PC 中。按照以下说明安装 Oracle VM:
  1. 出现标题为“Oracle VM Server”的引导屏幕后,按下 <ENTER> 键启动安装过程。
  2. 接下来,可以选择在安装前测试 CD 介质。此处应首选 OK,以免因 CD 受损或刻录问题而中断安装过程。
  3. 在语言选择窗口中选择 English,然后按下 OK 继续。接下来,选择键盘型号或接受默认值。
  4. 如果愿意,您可以访问分区对话框以删除旧分区。(它们可能包含旧数据,因此需谨慎操作)。我们希望能从自制设备中获取最佳性能,因此您将创建由三个磁盘组成的 RAID0 阵列。由于 GRUB 引导加载程序无法从 RAID0 引导,因此您必须创建专用的引导分区:
    1. 删除所有磁盘的所有分区
    2. 在 sda(第一个 SATA 磁盘)上使用 ext3 文件系统创建小型 256MB/引导分区。它将包含引导 VM Server hypervisor 所需的内核和 initrd 镜像。在创建该分区时选择“Force to be primary partition”,以确保它成为 x86 主分区。应将该分区命名为 sda1。
    3. 在 sda 上创建大小为 1GB 左右的交换分区。(注:默认情况下,Oracle VM dom0 配置为最多使用 512MB 内存,因此没有任务繁重的应用程序,没必要仅仅为了交换目的而使用几 GB 的存储空间。默认情况下,Dom0 仅负责执行实际 I/O 和处理硬件任务。但是,每个 domU [实际 VM] 都需要大小合适的单独交换空间,以满足自身需求。)
    4. 通过选中 Fill all available space 选项在 sda 上创建“软件 RAID 分区”;应将其命名为 sda3。
    5. 通过选中 Fill all available space 选项在 sdb 上创建“软件 RAID 分区”;应将其命名为 sdb1。
    6. 通过选中 Fill all available space 选项在 sdc 上创建“软件 RAID 分区”;应将其命名为 sdc1。
    7. 如果您还有更多磁盘,则可以在这些磁盘上创建 RAID 分区以进一步提高存储性能。
    8. 单击 RAID 按钮创建软件 RAID 阵列。选择 RAID0,并选择要加入此阵列的所有软件 RAID 分区(在此案例中为 sda3、sdb1 和 sdc1)。确保文件系统为“ext3”,挂载点为“/”。(注:默认 RAID0 条带为 256kB。使用 Oracle VM 安装程序创建软件 RAID 阵列时不能更改此设置,但如果愿意,您可以尝试切换到第二个虚拟控制台,方法如下:按下 Alt-F2 键,卸载旧阵列,并在安装前使用 mdadm 重新创建 RAID 阵列。请注意,我尚未亲自测试此操作!)
    9. 接受更改,并单击 OK 按钮保存分区更改。
    10. 在下一个屏幕上,您必须选择安装引导加载程序 (GRUB) 的位置。请将其放在 MBR(主引导记录)上。
    11. 现在,必须确定将哪个以太网接口用作管理接口。在本案例中使用“eth0”(第一个检测到的以太网 PCI 网卡)。选择网卡后,必须设置正确的 IP 地址:
      1. 仅选择“Enable IPv4 support”和“Activate on boot”选项。
      2. 配置 IP 地址(将其输入“IPv4”域中),在本案例中为“10.99.1.2”。不要忘记输入正确的前缀/网络掩码(例如,为“255.255.255.0”输入前缀“24”)
      3. 单击 OK 接受配置。
      4. 系统将要求您提供 IPv4 网关和 DNS 名称服务器,如“10.99.1.1”。
      5. Hostname Configuration 中选择 manual 模式,然后为此服务器输入某个描述性的主机名,如“quadovm”。
    12. 配置完联网之后,系统将要求您提供:
      1. 时区(选择适合您的时区)。
      2. Oracle VM Agent 口令 — 此设置非常重要;Oracle VM Manager 将用它来管理 Oracle VM Server(因此,请对此口令保密)。
      3. root 口令 — 此设置也非常重要,它是 Oracle VM Server 的主要管理口令。
现在,您需要等待安装过程完成。CD 托盘应自动弹出。重新引导之后,将显示 Oracle VM Server。您可以 root 用户身份从以下位置登录到该服务器:
  • 直接从控制台或 KVM
  • 您的工作站(通过 SSH),使用以下命令:ssh -l root 10.99.1.2。(注:Oracle VM Server 仅为 Xen 的 dom0 域提供 512MB RAM,即使系统的 RAM 比该值多很多。这种做法非常正确,其余可用内存将用于客户虚拟机。可通过运行以下命令检查实际的可用内存:
[root@quadovm ~]# xm info | grep mem
total_memory :8182
free_memory :7537
[root@quadovm ~]#
 

4. Oracle VM Manager 安装
Oracle VM Manager 安装非常简单。使用 Oracle VM Manager 挂载的 ISO CD 启动安装程序:
[root@xeno ~]# cd /mnt/cdrom
[root@xeno cdrom]# sh runInstaller.sh
[..]
Welcome to Oracle VM Manager

Please enter the choice: [1|2]
  1. Install Oracle VM Manager
  2. Uninstall Oracle VM Manager
此处选择“1”,安装将继续进行。请确保提供大约 2GB 的可用空间,仅用于工作站上的 Oracle VM Manager。安装非常简单:
Starting Oracle VM Manager installation ...

Checking the supported platforms ... Done

Checking the prerequisite packages are installed ... Done

Checking the available disk space ... Done

Installing the oracle-xe-univ package (rpm) ... Done

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press <Enter> to accept the defaults.
Ctrl-C will abort.

 

Specify the HTTP port that will be used for Oracle Application Express [8080]:
We chose the default tomcat 8080 port, but you can always pick any other port in this case.
Specify a port that will be used for the database listener [1521]: <ENTER>

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:
Here we pick an unbreakable password.
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: <ENTER>

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to http://127.0.0.1:8080/apex

 

Installing the ovs-manager package (rpm) ... Done

Set default schema to 'OVS'.
Please enter the password for OVS: <ENTER PASSWORD HERE>
Please re-enter the password for OVS: <ENTER PASSWORD HERE>
Again, we pick a secret password for the VM Manager schema.
Creating the Oracle VM Manager database schema ...Done

Installing the oc4j package (rpm) ... Done
The default password for oc4jadmin is oracle.
You can change the default password after the installation completes.
To access the OC4J Home Page and change the password go to http://127.0.0.1:8888/em
Starting OC4J ... Done
OC4J logfiles can be found in /var/log/ovm-manager/oc4j.log.

Deploying Oracle VM Manager application to OC4J container.
Please enter the password for oc4jadmin: oracle
Please enter the Oracle Net Listener Port , default is [1521] ? <ENTER>
Creating connection pool ...

Deploying Oracle VM Manager application to OC4J container.
Please enter the password for oc4jadmin:
Please enter the Oracle Net Listener Port , default is [1521] ? <ENTER>
Creating connection pool ... Done
Creating data source ... Done
Deploying application ... Done
Deploying application help ... Done
Configuring Oracle VM Manager DataCollector ... Done

Configuring SMTP server ...
Please enter the outgoing mail server (SMTP) hostname: localhost
Setting the SMTP hostname server to localhost ...
Done

Configuring e-mail address for Oracle VM Manager account 'admin'...
Please enter an e-mail address for the admin account : localuser
将“localuser”替换为您的本地用户名,以便于邮件传递。按照指示转至 http://127.0.0.1:8888/OVS 访问 Oracle VM Manager。重新引导后,可通过 /etc/init.d/oracle-xe 和 /etc/init.d/oc4j 脚本启动和停止 Oracle VM Manager。
 

5. 设置虚拟机
首先,必须在 Oracle VM Manager 中将我们的 Oracle VM Server (quadvm) 注册为新“spool”(包含一个或多个物理服务器的逻辑自主区域)的主服务器。
转至 Servers Pools 选项卡,然后转至 Create Server Pool,输入有关 quadvm Oracle VM Server 的信息(使其成为 Server Pool Master、Virtual Machine Server 以及 Utility Master),并为 spool 选择一个直观的名称,如 spool1。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_03
图 3
在下一个屏幕上,选择“admin”用户。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_04
图 4
检查所有内容,并确认创建新 spool。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_05
图 5
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Oracle_06
图 6
创建虚拟机
如前所述,虚拟化允许您通过复制模板镜像来克隆系统。下面是操作方法。
上载模板
首先,需要将 VM 模板和 OpenFiler 传输到 VM Server 上:
[vnull@xeno OracleVM]$ scp -r  OVM_EL5U1_X86_64_PVM_4GB root@10.99.1.2:/root/
root@10.99.1.2's password:
vm.cfg 100% 318 0.3KB/s 00:00
system.img 100% 6144MB 8.8MB/s 11:41
README 100% 158 0.2KB/s 00:00
[vnull@xeno OracleVM]$ cd ~/ISO
[vnull@xeno ISO]$ scp openfiler-2.2-x86_64.img.gz root@10.99.1.2:/root
root@10.99.1.2's password:
openfiler-2.2-x86_64.img.gz 100% 175MB 10.9MB/s 00:16
[vnull@xeno ISO]$
然后,需要将 VM 模板移到特殊目录,稍后 VM Server 子代理会在该目录中自动检测到此模板:
[root@quadovm ~]# ls -al  OVM_EL5U1_X86_64_PVM_4GB/
total 6297632
drwxr-xr-x 2 root root 4096 May 6 14:04 .
drwxr-x--- 4 root root 4096 May 6 13:52 ..
-rw-r--r-- 1 root root 158 May 6 14:04 README
-rwxr-xr-x 1 root root 6442450945 May 6 14:04 system.img
-rw-r--r-- 1 root root 318 May 6 13:52 vm.cfg
[root@quadovm ~]# mv OVM_EL5U1_X86_64_PVM_4GB /OVS/seed_pool/
[root@quadovm ~]#
转至 Resources,按下 Import。选择 Internal Virtual Machine Template
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_07
图 7
描述模板详细信息(应自动检测到模板名称 OVM_EL5U1_X86_64_PVM_4GB,如果未检测到,请注销并重新登录):
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_08
图 8
确认导入操作:
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise_09
图 9
应该能看到模板,现在只需选择该模板并单击 Approve 按钮。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Oracle_10
图 10
基于 OEL 模板创建 RAC VM
注销并重新登录,转至 Virtual Machines -> Create Virtual Machine,然后选择 Create Virtual Machine based on Virtual Machine template
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Linux_11
图 11
选择您的“spool1”服务器池。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Linux_12
图 12
Source 选项卡中,选择新添加的模板(应该只有一个)。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_13
图 13
Virtual Machine Info 选项卡中,输入所需的 VM 名称(此处为rac1)、口令以及接口(仅一个)。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_14
图 14
在汇总屏幕上仔细检查所有内容,然后单击 Confirm
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Linux_15
图 15
在 Virtual Machines 主屏幕上应显示新添加的 rac1 VM,状态为 Creating。Oracle VM 现在正在将模板复制到新系统。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_16
图 16
对“rac2”节点重复此步骤。此时,您应该已为两个 Linux 系统做好 Oracle RAC 安装准备。接下来应自定义这两个系统,为 Oracle 软件安装重新配置更多的内存和空间。
转至 Virtual Machines,然后单击“rac1”或“rac2”。在 General Information 中转至 Edit。将 RAM 从 1,024MB 更改为 2,048MB。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_休闲_17
图 17
转至 Virtual Disk 选项卡,然后单击 Create New Virtual Disk。在此处,将附加磁盘上所需的空间指定为跟系统空间一样的值。所用的值如下:
虚拟磁盘名称:oracle_software
虚拟磁盘大小 (MB): 8,192
创建之后,Virtual Disks 的状态屏幕应指定已创建了 8GB 的磁盘。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_18
图 18
创建 OpenFiler VM
现在将创建 iSCSI 存储设备 (OpenFiler)。此步骤必须手动执行,不能使用 Oracle VM Manager,这样 OpenFilers 将不受 VM Manager 控制台管理。
[root@quadovm ~]# cd /OVS/running_pool/
[root@quadovm running_pool]# ls
132_rac1  134_rac2
[root@quadovm running_pool]# mkdir 60_iscsi1 62_iscsi2
[root@quadovm running_pool]# gzip -d /root/openfiler-2.2-x86_64.img.gz
[root@quadovm running_pool]# cp /root/openfiler-2.2-x86_64.img 60_iscsi1/
[root@quadovm running_pool]# cp /root/openfiler-2.2-x86_64.img 62_iscsi2/
如您在前面所看到的,OpenFiler Xen 设备可以作为单个镜像文件下载,但 Xen 需要使用内核和 initrd 镜像来引导虚拟机,而它们又位于镜像文件内部。为了解决这个鸡生蛋蛋生鸡的问题,您需要将 initrd 和内核镜像从所提供的镜像中提取出来,在 dom0 中跳过该镜像的前 512 个字节(MBR — 主引导记录)。然后,您将回送挂载内部文件系统并复制所需部分:
[root@quadovm running_pool]# losetup  -o 512 /dev/loop4 /root/openfiler-2.2-x86_64.img
[root@quadovm running_pool]# mount -o ro /dev/loop4 /mnt
[root@quadovm running_pool]# cp /mnt/boot/initrd* /mnt/boot/vmlinuz* 60_iscsi1/
[root@quadovm running_pool]# cp /mnt/boot/initrd* /mnt/boot/vmlinuz* 62_iscsi2/
[root@quadovm running_pool]# umount /mnt
[root@quadovm running_pool]# losetup -d /dev/loop4
由于您已经准备好系统、内核和 initrd 镜像,现在需要专用的磁盘来存储 iSCSI LUN。通过创建以零填充的大文件(OpenFiler VM 将这些文件用作实际的磁盘)即可达到此目的:
[root@quadovm running_pool]# dd  if=/dev/zero of=60_iscsi1/volume1.img bs=1M count=12000
12000+0 records in
12000+0 records out
12582912000 bytes (13 GB) copied, 83.3836 seconds, 151 MB/s
[root@quadovm running_pool]#
[root@quadovm running_pool]# dd if=/dev/zero of=62_iscsi2/volume1.img bs=1M count=12000
12000+0 records in
12000+0 records out
12582912000 bytes (13 GB) copied, 88.5499 seconds, 142 MB/s
[root@quadovm running_pool]#
现在您只差一步:创建 Xen 配置文件。(请确保使用第二个 SSH 会话将此步骤执行两次,在相应位置将 60_iscsi1 替换为 62_iscsi2。):
[root@quadovm running_pool]# cd  60_iscsi1
[root@quadovm 60_iscsi1]# cat > vm.cfg
name = "iscsi1"
kernel = "/OVS/running_pool/60_iscsi1/vmlinuz-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU"
ramdisk = "/OVS/running_pool/60_iscsi1/initrd-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU.img"
disk = [
'tap:aio:/OVS/running_pool/60_iscsi1/openfiler-2.2-x86_64.img,xvda,w',
'tap:aio:/OVS/running_pool/60_iscsi1/volume1.img,xvdb,w'
]
root = "/dev/xvda1 ro"
vif = ['bridge=xenbr0','bridge=sanbr0']
memory = 768
<CTRL+D>
[root@quadovm 60_iscsi1]# xm create -c vm.cfg
Using config file "./vm.cfg".
Started domain iscsi1
Bootdata ok (command line is root=/dev/xvda1 ro )
Linux version 2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU
(conary.rpath.com@rpl:1-xen) (gcc version 3.4.4) #1 SMP Wed Dec 6 02:05:30 EST 2006
[..]
Registering block device major 202
xvda: xvda1
xvdb: unknown partition table
[..]
Welcome to Openfiler NAS/SAN Appliance 2.2
Press 'I' to enter interactive startup.
[..many errors please ignore them..]
通过上述内容,您可以了解到以下几点:
  1. OpenFiler 将其系统磁盘看作 xvda,而将新磁盘(尚未使用分区进行初始化)看作 xvdb
  2. 您配置的第一个以太网接口用于连接到 xenbr0 网桥,第二个用于连接到 sanbr0。
  3. 您为 OpenFiler 提供的 RAM 达到 768MB。
配置虚拟机
由于所提供的 Xen 镜像未进行预配置,因此您需要亲自执行此步骤。以 root 用户身份登录到 iscsi1,然后为新的 OpenFiler iscsi1 VM 模板重新配置联网。首先设置以太网配置文件 /etc/hosts、/etc/resolv.conf 和 sysconfig。最后,重新启动所有联网以显示新设置(无需重新启动 VM)。
Openfiler NAS/SAN Appliance
Powered by rPath Linux
To administer this appliance, please use a web browser
from another system to navigate to
 

For further information and commercial support, please visit
http://www.openfiler.com

localhost login: root
[root@localhost ~]# cd /etc
[root@localhost etc]# echo -e "10.99.1.101\tiscsi1">> hosts
[root@localhost sysconfig]# cd sysconfig
[root@localhost sysconfig]# cat > network
NETWORKING=yes
GATEWAY=10.99.1.1
HOSTNAME=iscsi1
<CTRL+D>
[root@localhost sysconfig]# cat >network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.99.1.101
<CTRL+D>
[root@localhost sysconfig]# cat >network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.98.1.101
MTU=9000
<CTRL+D>
[root@localhost sysconfig]# echo "nameserver10.99.1.1" > /etc/resolv.conf
[root@localhost sysconfig]# service network restart
Shutting down interface eth0: [  OK  ]
Shutting down interface eth1: [  OK  ]
Shutting down loopback interface:  [  OK  ]
Bringing up loopback interface : [  OK  ]
Bringing up interface eth0: [  OK  ]
Bringing up interface eth1: [  OK  ]
[root@localhost sysconfig]#
验证接口上的 IP 地址:
[root@localhost sysconfig]# ip  a ls
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:14:53:73 brd ff:ff:ff:ff:ff:ff
    inet 10.99.1.101/24 brd 10.99.1.255 scope global eth0
    inet6 fe80::216:3eff:fe14:5373/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:68:4f:c7 brd ff:ff:ff:ff:ff:ff
    inet 10.98.1.101/24 brd 10.98.1.255 scope global eth1
    inet6 fe80::216:3eff:fe68:4fc7/64 scope link
       valid_lft forever preferred_lft forever
4: sit0: <NOARP> mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0
[root@localhost sysconfig]#
[root@localhost sysconfig]# ip ro ls | grep ^default
default via 10.99.1.1 dev eth0
[root@localhost sysconfig]#
[root@localhost sysconfig]# ping -c 1 iscsi1
PING iscsi1 (10.99.1.101) 56(84) bytes of data.
64 bytes from iscsi1 (10.99.1.101): icmp_seq=0 ttl=64 time=0.019 ms
--- iscsi1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.019/0.019/0.019/0.000 ms, pipe 2
[root@localhost sysconfig]#
为了避免混淆,请重新登录到 iscsi1 更改命令提示符,以显示新主机名。
现在更改 root 口令,因为 OpenFiler 未设置 root 口令:
[root@iscsi1 ~]# passwd
Changing password for user root.
New UNIX password:
BAD PASSWORD: it's WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@iscsi1 ~]#
在 iscsi2 OpenFiler 模板上使用其他 SSH 会话执行相同的操作。以 root 用户身份登录,并执行与 iscsi1 相同的过程:
[root@quadovm ~]# cd  /OVS/running_pool/62_iscsi2/
[root@quadovm 62_iscsi2]# cat > vm.cfg
name = "iscsi2"
kernel = "/OVS/running_pool/62_iscsi2/vmlinuz-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU"
ramdisk = "/OVS/running_pool/62_iscsi2/initrd-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU.img"
disk = [
'tap:aio:/OVS/running_pool/62_iscsi2/openfiler-2.2-x86_64.img,xvda,w',
'tap:aio:/OVS/running_pool/62_iscsi2/volume1.img,xvdb,w'
]
root = "/dev/xvda1 ro"
vif = ['bridge=xenbr0','bridge=sanbr0']
<CTRL+D>
[root@quadovm 62_iscsi2]#
[root@quadovm 62_iscsi2]# xm create -c vm.cfg
Using config file "./vm.cfg".
Started domain iscsi2
Bootdata ok (command line is root=/dev/xvda1 ro )
Linux version 2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU
(conary.rpath.com@rpl:1-xen) (gcc version 3.4.4) #1 SMP Wed Dec 6 02:05:30 EST 2006
[..]
INIT: version 2.85 booting
                Welcome to Openfiler NAS/SAN Appliance 2.2
                Press 'I' to enter interactive startup.
[..]
localhost login: root
[root@localhost ~]# cd /etc
[root@localhost etc]# echo -e "10.99.1.102\tiscsi2" >> hosts
[root@localhost etc]# cd sysconfig/
[root@localhost sysconfig]# cat > network
NETWORKING=yes
GATEWAY=10.99.1.1
HOSTNAME=iscsi2
<CTRL+D>
[root@localhost sysconfig]# cat > network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.99.1.102
<CTRL+D>
[root@localhost sysconfig]# cat > network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.98.1.102
MTU=9000
<CTRL+D>
[root@localhost sysconfig]# echo "nameserver 10.99.1.1" > /etc/resolv.conf
[root@localhost sysconfig]# service network restart
Shutting down interface eth0: [  OK  ]
Shutting down interface eth1: [  OK  ]
Shutting down loopback interface:  [  OK  ]
Bringing up loopback interface: [  OK  ]
Bringing up interface eth0: [  OK  ]
Bringing up interface eth1: [  OK  ]
[root@localhost sysconfig]#
验证 IP 联网:
[root@localhost sysconfig]# ip  a ls
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:3c:bd:4a brd ff:ff:ff:ff:ff:ff
    inet 10.99.1.102/24 brd 10.99.1.255 scope global eth0
    inet6 fe80::216:3eff:fe3c:bd4a/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:15:b7:51 brd ff:ff:ff:ff:ff:ff
    inet 10.98.1.102/24 brd 10.98.1.255 scope global eth1
    inet6 fe80::216:3eff:fe15:b751/64 scope link
       valid_lft forever preferred_lft forever
4: sit0: <NOARP> mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0
[root@localhost sysconfig]# ip ro ls | grep ^def
default via 10.99.1.1 dev eth0
[root@localhost sysconfig]# passwd
Changing password for user root.
New UNIX password:
BAD PASSWORD: it's WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
重新登录,以避免进一步的混淆。现在可将网络浏览器指向以下地址:
  • http://10.99.1.101:446/ (iscsi1)
  • http://10.99.1.102:446/ (iscsi2)
注:为每个 iSCSI 存储设备执行此步骤两次。
首先,系统将提示您接受许可,然后您可以使用以下凭证进行登录:
  • 登录:openfiler
  • 口令:password
提示:OpenFiler 的 root 口令与 Web 界面口令不同,但您可以使它们保持同步以减少管理开销。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise_19
图 19
转至 Volumes 选项卡,再转至 Physical Storage Mgmt.,然后单击 /dev/xvdb(您手动创建的第二个镜像数据文件,大小为 12GB)。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_20
图 20
转至 Volume Group Mgmt.,使用类型“Physical volume”创建一个 x86 大分区(用于 LVM)。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_21
图 21
再次转至 Volume Group Mgmt.,然后仅使用 /dev/xvdb1 物理卷(在 LVM 术语中称为“PV”)创建名为“racdata1”/“racdata2”的卷组。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Oracle_22
图 22
创建之后,应显示一个卷组。转至 Create New Volumes 选项卡。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise_23
图 23
现在需要创建三个 iSCSI LUN:
  • ocr (320MB)
  • voting (320MB)
  • asmdata1(所有可用空间,在我的案例中为 11GB 左右)
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise_24
图 24
创建这些 LUN 之后,可以查看表示存储分配卷组(名为“racdata1”/“racdata2”)的图表。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Linux_25
图 25
转至 Services -> Enable/disable 并启用 iSCSI target
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Oracle_26
图 26
转至 General -> Local Networks,在 Network Access Configuration 下创建“san1”,以从 10.98.1.0/24 网络(我们的 SAN 网络)建立 iSCSI 连接。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_27
图 27
切换到 iSCSI LUN (Volumes -> List of existing volumes),编辑每个 iSCSI LUN。在“iSCSI host access”部分下面确认可以从 san1 网络访问此 iSCSI LUN。单击 update 保存。
从现在开始,您已使两个 iSCSI 系统导出 LUN 可供 Oracle RAC 使用。
为扩展 RAC 重新配置 RAC VM
除了 eth0,您没有其他以太网物理适配器,所以您需要手动模拟这些适配器,因为如果没有物理接口,Oracle VM 将不会创建网桥。具体而言,您希望为 iSCSI 通信添加 SAN 网络,并为 RAC 的缓存融合添加互连网络。
因此,您只需向 /etc/rc.d/rc.local 中添加以下行,以创建其他以太网桥。(如果您不想重新启动 Oracle VM,则应手动执行这些命令。)
[root@quadovm ~]# cat >> /etc/rc.d/rc.local

brctl addbr sanbr0
brctl addbr ibr0
ip link set dev sanbr0 up
ip link set dev ibr0 up


<CTRL+D>
[root@quadovm ~]#
接下来,出于性能考虑,必须确保 SAN 桥和互连网桥始终保持 MTU 为 9000。(这是一个改动,因为您需要推迟设置 MTU,直至 Xen 使前端和后端网络虚拟化驱动程序保持同步。)
[root@quadovm ~]# cat > fixbrmtu.sh
#!/bin/sh

bridge=$1
if [ "$bridge" != "sanbr0" -a "$bridge" != "ibr0" ]; then
        logger -t fixbrmtu -p syslog.notice Skipping MTU fix for bridge=$bridge
        exit 0
fi

logger -t fixbrmtu -p syslog.notice Fixing MTU for bridge=$bridge

while : ; do
        cd /sys/class/net/$bridge/brif || exit 1
        err=0
        for iface in *; do
                ip link set dev $iface mtu 9000 > /dev/null 2>&1
                if [ $? -ne 0 ]; then
                        err=$[err+1]
                fi
        done
        if [ $err -eq 0 ]; then
                break
        fi
        sleep 1
done

ip link set dev $bridge mtu 9000
exit 0
<CTRL+D>

[root@quadovm ~]# chmod 700 fixbrmtu.sh
接下来,使用 vi 编辑 /etc/xen/scripts/vif-bridge 文件,在“success”行后面添加粗体显示的行:
log debug "Successful  vif-bridge $command for $vif, bridge $bridge." 
if [ "$command" = "online" ]
then
  success
  (/root/fixbrmtu.sh "$bridge") &
fi
以 root 用户身份登录到 Oracle VM 上,切换到 /OVS/running_pool/ 并编辑 rac1 和 rac2 的 vm.cfg,将 vif 行更改为以下内容:
vif = ['bridge=xenbr0', 'bridge=ibr0', 'bridge=sanbr0']
总的说来,您希望 RAC VM 通过以下方式连接到网桥:
  • 连接到 xenbr0 的 eth0(与 Oracle VM Server 的第一个物理以太网桥;用户可以通过执行 brctl show 命令查看它);这是 Oracle VM 客户端的公共接口
  • 连接到 ibr0 的 eth1,用于缓存融合的互连网络
  • 连接到 sanbr0 的 eth2,我们的 iSCSI SAN 网络
注:Oracle VM Manager 中不会显示其他接口。
接下来启动 VM(针对 rac1 和 rac2):
[root@quadovm 134_rac2]# xm     create vm.cfg
Using config file "./vm.cfg".
Started domain 134_rac2
[root@quadovm 134_rac2]#
检查正在运行的虚拟系统,如果全部正常,应显示类似如下的内容:
[root@quadovm ~]# xm list 
Name ID Mem VCPUs State Time(s)
132_rac1 7 2048 1 -b---- 12.8
134_rac2 8 2048 1 r----- 7.2
Domain-0 0 512 4 r----- 287.6
iscsi1 5 768 1 -b---- 4.8
iscsi2 6 768 1 -b---- 4.8
[root@quadovm ~]#
默认情况下,Oracle VM 模板的凭证配置如下:
  • 用户:root
  • 口令:ovsroot
首先重新配置 rac1 节点;通过本地控制台连接到该节点:

[root@quadovm ~]# xm console 132_rac1 
rtc: IRQ 8 is not free.
i8042.c: No controller found.
Enterprise Linux Enterprise Linux Server release 5.1 (Carthage)
Kernel 2.6.18-53.1.13.9.1.el5xen on an x86_64

localhost.localdomain login: root
Password: <type “ovsroot”>
Last login: Wed Feb 20 14:21:42 from ca-ostest246.us.oracle.com
[root@localhost ~]#
运行网络配置实用程序:
[root@localhost ~]# export TERM=linux 
[root@localhost ~]# system-config-network-tui
使用 system-config-network-tui 设置联网非常容易。配置公共接口(也是与 IP 网络之间的管理接口,可从 Oracle VM 外部看见此接口)由两项操作组成:选择“eth0”和设置 IP 地址、网络掩码、网关等。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise_28
图 28
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_29
图 29
成功配置“eth0”之后,可以配置“eth1”(互连)。只需创建一个新接口,方法是,选择 <New device>,再选择 Ethernet,然后选择您的 IP 联网。对 eth2 (SAN) 重复此步骤。
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_VM_30
图 30
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Oracle_31
图 31
在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群_Enterprise_32
图 32
退出之后,完成网络配置(设置 DNS 解析器、主机名和 MTU 更改):
[root@localhost ~]# echo 'nameserver 10.99.1.1' > /etc/resolv.conf
[root@localhost ~]# cat >  /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac1
<CTRL+D>
[root@localhost ~]# echo “MTU=9000” >> /etc/sysconfig/network-scripts/ifcfg-eth1
[root@localhost ~]# echo “MTU=9000” >> /etc/sysconfig/network-scripts/ifcfg-eth2
[root@localhost ~]# service network restart
Shutting down interface eth0:  [  OK  ]
Shutting down loopback interface:  [  OK  ]
Bringing up loopback interface:  [  OK  ]
Bringing up interface eth0:  [  OK  ]
Bringing up interface eth1:  [  OK  ]
Bringing up interface eth2:  [  OK  ]
[root@localhost ~]#
将以下内容保存为 /etc/hosts 文件:
127.0.0.1     localhost.localdomain localhost
# eth0: public network
10.99.1.91    rac1
10.99.1.92    rac2

# eth1: interconnect
10.97.1.1     rac1-priv
10.97.1.2     rac2-priv

# VIPs
10.99.1.201   rac1-vip
10.99.1.202   rac2-vip

# eth2: iSCSI SAN
10.98.1.101   iscsi1
10.98.1.102   iscsi2

# PUB for openfilers
10.99.1.101   iscsi1-pub
10.99.1.102   iscsi2-pub
为系统设置合适的时区(在本示例中为波兰时区):
[root@localhost ~]# ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
注销并再次登录到 rac1 后,您的 shell 将指出“root@rac1”。另外,务必检查与您的网关之间的连通性。请记得在 rac2 上使用合适的 IP 地址执行相同的操作。
默认情况下,Oracle VM 模板没有 iSCSI 启动器实用程序的用户空间部分。可从 Oracle Enterprise Linux ISO 镜像(几个 GB)中获取该部分,但为了加快此过程,可为改从此处将其下载到您的工作站中。
然后将 iSCSI 启动器的副本复制到两个 RAC 节点上(从您的工作站中):
[vnull@xeno RPMS_el51]$ scp iscsi-initiator-utils*.rpm root@10.99.1.91:.
root@10.99.1.91's password:
iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm           100%  528KB 528.2KB/s   00:00
[vnull@xeno RPMS_el51]$ scp iscsi-initiator-utils*.rpm root@10.99.1.92:.
root@10.99.1.92's password:
iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm           100%  528KB 528.2KB/s   00:00
[vnull@xeno RPMS_el51]$
现在安装 iSCSI 启动器,使用基本配置设置该启动器并启用它(在每个 RAC 节点上;记得更改 rac2 的 InitiatorAlias):
[root@rac1 ~]# rpm -Uhv iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:iscsi-initiator-utils ########################################### [100%]
[root@rac1 ~]# rm iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm
rm: remove regular file `iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm'? y
[root@rac1 ~]#
[root@rac1 ~]# echo "InitiatorAlias=rac1" >> /etc/iscsi/initiatorname.iscsi
[root@rac1 ~]# service iscsid start
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
[root@rac1 ~]# chkconfig iscsid on
[root@rac1 ~]# chkconfig iscsi on
禁用不需要的服务(在每个 RAC 节点上):
[root@rac1 ~]# chkconfig --level 0123456 bluetooth off
[root@rac1 ~]# chkconfig --level 0123456 cups off
[root@rac1 ~]# chkconfig --level 0123456 ip6tables off
[root@rac1 ~]# chkconfig --level 0123456 iptables off
[root@rac1 ~]# chkconfig --level 0123456 o2cb off
[root@rac1 ~]# chkconfig --level 0123456 o2cb off
[root@rac1 ~]# chkconfig --level 0123456 ocfs2 off
[root@rac1 ~]# chkconfig --level 0123456 sendmail off
[root@rac1 ~]# reboot
在其他本地硬盘上为 Oracle 软件挂载点 (/u01) 准备分区(在两个 RAC 节点上):
[root@rac1 ~]# fdisk /dev/hdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
 

The number of cylinders for this disk is set to 1044.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1): <ENTER>
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): <ENTER>
Using default value 1044

Command (m for help): p

Disk /dev/hdd: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdd1 1 1044 8385898+ 83 Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@rac1 ~]#
[root@rac1 ~]# mkfs.ext3 -j /dev/hdd1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1048576 inodes, 2096474 blocks
104823 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@rac1 ~]#
[root@rac1 ~]# mkdir /u01
[root@rac1 ~]# echo -e '/dev/hdd1\t\t/u01\t\t\text3\tdefaults,noatime\t1 2' >> /etc/fstab
[root@rac1 ~]# mount /u01
设置动态设备管理,以便为 iSCSI SAN 创建正确的命名;首先通过执行以下命令创建 /etc/udev/rules.d/55-openiscsi.rules 文件(在每个 RAC 节点上):
[root@rac1 ~]# cat >     /etc/udev/rules.d/55-openiscsi.rules
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b", 
SYMLINK+="iscsi/%c{1}/lun%c{2}/part%n", OWNER="oracle", MODE="0640", GROUP="disk"
<CTRL+D>
[root@rac1 ~]#
udevd 提供一个动态设备目录,此目录只包含实际存在设备的文件。它将在 /dev 目录中创建或删除设备节点文件。udevd 的工作方式是,从内核接收插入系统的所有新设备的 u 事件 (uevent)。对于每个事件,将根据新设备属性检查规则文件。基于此,您可以创建符号链接、更改所有权和访问权限,以及启动外部程序。
此规则文件将为每个新 SCSI 设备启动 iscsidev.sh 脚本,此脚本是通过运行以下命令创建的:
[root@rac2 ~]# mkdir -p     /etc/udev/scripts
[root@rac2 ~]# cat > /etc/udev/scripts/iscsidev.sh
#!/bin/sh
#iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
LUN=`echo ${BUS} | cut -d":" -f4`
file="/sys/class/scsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
target_name=`echo $(cat ${file}) | cut -d":" -f2`
if [ -z "${target_name}" ]; then
  exit 1
fi

echo "${target_name} ${LUN}"
<CTRL+D>
[root@rac2 ~]# chmod 755 /etc/udev/scripts/iscsidev.sh
此脚本确定传递的 SCSI 设备是否真正是 iSCSI,并将有关该设备的信息返回给 udev。配置完 iSCSI 启动器后,可以执行 iSCSI 目标查找,以连接到存储阵列(在每个 RAC 节点上运行):
[root@rac1 ~]# iscsiadm -m     discovery -t sendtargets -p 10.98.1.101
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.asm1
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.ocr
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.voting
[root@rac1 ~]# iscsiadm -m discovery -t sendtargets -p 10.98.1.102
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.asm1
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.ocr
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.voting
[root@rac1 ~]# iscsiadm -m discovery -l
10.98.1.101:3260 via sendtargets
10.98.1.102:3260 via sendtargets
[root@rac2 ~]# iscsiadm -m node | sort
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.asm1
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.ocr
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.voting
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.asm1
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.ocr
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.voting
[root@rac1 ~]#
现在只登录到存储设备(在两个 RAC 节点上):
[root@rac1 ~]# iscsiadm -m node -L all
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.asm1, portal: 10.98.1.102,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.ocr, portal: 10.98.1.102,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.voting, portal: 10.98.1.101,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.ocr, portal: 10.98.1.101,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.asm1, portal: 10.98.1.101,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.voting, portal: 10.98.1.102,3260]
[root@rac1 ~]#
现在应对 iSCSI LUN 进行分区。您将在 iSCSI 检测到的所有设备上为每个 LUN 创建一个大分区。(警告! 这是一个非常危险的脚本;它将删除所有 iSCSI LUN 上的分区表!)
保存以下脚本:
#!/bin/sh
[ -d /dev/iscsi ] || exit 100
for LUN in `find /dev/iscsi -type l`; do
        echo $LUN
        dd if=/dev/zero of=$LUN bs=512 count=1
        echo -en "0,\n;\n;\n;\n" | sfdisk -q $LUN
done
赋予该脚本执行权限并运行它(仅从一个节点!):
[root@rac2 ~]# chmod 700     partit.sh
[root@rac2 ~]# ./partit.sh
[..lots of partitioning output..]
在第一个节点上,必须检测由 rac2 执行的更改:
[root@rac1 ~]# partprobe
之后可以使用 fdisk -l 验证分区。
iSCSI 优化
若要优化性能,需要优化 iSCSI 存储。此操作主要包括 TCP/IP 堆栈优化,因为 iSCSI 协议基于 TCP。在 OpenFilers(iscsi1 和 iscsi2)上编辑 /etc/init.d/iscsi-target,并将 MEM_SIZE 变量设置为 1073741824。这将确保在 iscsi1 和 iscsi2 上启动 iSCSI 目标之前,TCP 网络缓冲区得到正确设置。
然后,将旧的 /etc/ietd.conf 备份到 /etc/ietd.conf.old,并向该文件中添加以下内容:
MaxConnections 1
InitialR2T No
ImmediateData Yes
MaxRecvDataSegmentLength 16776192
MaxXmitDataSegmentLength 16776192
MaxBurstLength 16776192
FirstBurstLength 16776192
MaxOutstandingR2T 16
Wthreads 16
DataDigest None
HeaderDigest None
完成更改后,重新引导 iscsi1 和 iscsi2。
注:请记住,每次添加、重新配置或删除新的 iSCSI LUN 时,都将重新生成此文件。
现在需要重新配置 RAC 节点以获取良好的 iSCSI 性能。在 rac1 和 rac2 节点上编辑 /etc/sysctl.conf,并对以下参数进行适当的更改:
net.core.rmem_max = 1073741824
net.core.wmem_max = 1073741824
net.ipv4.tcp_rmem = 1048576 16777216 1073741824
net.ipv4.tcp_wmem = 1048576 16770216 1073741824
net.ipv4.tcp_mem = 1048576 16770216 1073741824
在两个 RAC 节点上更改 /etc/iscsi/iscsid.conf(iSCSI 启动器配置),最后重新引导以使更改生效(当然,可以重新启动 iSCSI 客户端并执行 sysctl -p):
[root@rac2 ~]# cat >     /etc/iscsi/iscsid.conf
node.startup = automatic
node.session.timeo.replacement_timeout = 120
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 10
node.conn[0].timeo.noop_out_timeout = 15
node.session.initial_login_retry_max = 4
node.session.cmds_max = 128
node.session.queue_depth = 128
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 16776192
node.session.iscsi.MaxBurstLength = 16776192
# the default is 131072
node.conn[0].iscsi.MaxRecvDataSegmentLength = 16776192
# the default is 32768
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 16776192
node.conn[0].iscsi.HeaderDigest = None
node.session.iscsi.FastAbort = No
<CTRL+D>
[root@rac2 ~]# reboot
注:此更改以及以前的更改(针对 OpenFilers)为我们提供了最佳的原始序列化写入 iSCSI 性能(使用 dd 命令直接在 iSCSI LUN 上进行过测试,块大小等于 1MB)。此性能随系统的不同而有差异(取决于所使用的硬件、软件版本和其他因素)。