服务器 频道

在linux上单机模拟Oracle 10g RAC集群一

  【IT168 服务器学院】一、简介
  
  熟悉 Oracle 真正应用集群 (RAC) 10g 技术的最有效方法之一是访问一个实际的 Oracle RAC 10g 集群。没有什么方法比直接体验它们能够更好地理解其好处的了 — 包括容错、安全性、负载均衡和可伸缩性。
  
  Oracle RAC 的核心是共享磁盘子系统。集群中的所有节点必须能够访问集群中所有节点的所有数据、重做日志文件、控制文件和参数文件。数据磁盘必须在全局范围内可用,以便允许所有节点访问数据库。每个节点拥有自己的重做日志和控制文件,但是其他节点必须能够访问这些文件,以便在系统故障时恢复该节点。
  
  希望本文能对一些手头上只有一台PC而没有真正的双机环境的朋友提供一个参考。
  
  二、本文实践环境
  
  1、PC主要配置:
  
  Celeron(R) CPU 1.80GHz
  
  Maxtor 6E040L0, ATA DISK drive 40G
  
  RelTek 8139C 网卡 一块
  
  内存DDR333 512MB * 2
  
  显示卡:ATI [Radeon 9200 SE]
  
  操作系统:White Box Enterprise Linux 3 (本文同样适用于RedHat企业版,不同之处是WBEL3目前可以免费运用于商业)
  
  远程终端一台,装有windowsXP和远程X-server软件
  
  2、服务器分区方案
  
  Oracle 数据库文件
  
  RAC节点名
  
  实例名
  
  数据库名
  
  $ORACLE_BASE
  
  文件系统
  
  dbrac
  
  orcl1
  
  orcl
  
  /home/oracle
  
  ASM
  
  Oracle CRS 共享文件
  
  文件类型
  
  文件名
  
  分区
  
  挂载点
  
  文件系统
  
  oracle集群注册表
  
  /u01/orcl/orcfile
  
  /dev/hda8
  
  /u01
  
  OCFS
  
  CRS表决磁盘
  
  /u01/orcl/cssfile
  
  /dev/hda8
  
  /u01
  
  OCFS
  
  3、所涉及软件
  
  1)oracle 10g 数据库软件
  
  hip.db.lnx32.cpio.gz
  
  2)oracle 10g 集群服务软件
  
  hip.crs.lnx32.cpio.gz
  
  3)OCFS文件系统支持
  
  ocfs-2.4.21-EL-1.0.14-1.i686.rpm
  
  ocfs-support-1.0.10-1.i386.rpm
  
  ocfs-tools-1.0.10-1.i386.rpm
  
  4)ASMlib驱动程序
  
  oracleasm-2.4.21-EL-1.0.3-1.i686.rpm
  
  oracleasm-support-1.0.3-1.i386.rpm
  
  oracleasmlib-1.0.0-1.i386.rpm
  
  以上软件包均可以从oracle官方网站下载
  
  WBEL linux下载地址:http://www.whiteboxlinux.org/download.html
  

  三、基础操作
  
  1、安装linux
  
  安装过程中一些需要注意的地方:
  
  1)磁盘分区:swap分区大小建议是内存的2倍,这里是2048MB,划出一些系统必要的分区根分区/,var分区/var,usr分区 /usr,home分区/home,临时文件分区/tmp。注意:这里不要把所有的硬盘空间划分进操作系统,留下一半给后面安装oarcle集群磁盘使用,本文示例
  
  2)文件系统   容量 挂载点
  
  /dev/hda1     1012M /
  
  /dev/hda2     7.7G  /home
  
  /dev/hda7     1012M  /tmp
  
  /dev/hda3     5.8G  /usr
  
  /dev/hda5     2.0G  /var
  
  3)组件选取:一定要选上delvelopment tools和X-windows两项,为了节省空间其他可以不要
  
  4)防火墙:最好不要
  
  5)网络设置:eth0
  
  取消选中 [Configure using DHCP] 复选项
  
  选中 [Activate on boot]
  
  IP 地址:192.168.22.44
  
  网络掩码: 255.255.255.0
  
  6)主机名:dbrac
  
  2、.安装完成后检查必需的 RPM
  
  3、必须安装以下程序包(或更高版本):
  
  make-3.79.1
  
  gcc-3.2.3-34
  
  glibc-2.3.2-95.20
  
  glibc-devel-2.3.2-95.20
  
  glibc-headers-2.3.2-95.20
  
  glibc-kernheaders-2.4-8.34
  
  cpp-3.2.3-34
  
  compat-db-4.0.14-5
  
  compat-gcc-7.3-2.96.128
  
  compat-gcc-c++-7.3-2.96.128
  
  compat-libstdc++-7.3-2.96.128
  
  compat-libstdc++-devel-7.3-2.96.128
  
  openmotif-2.2.2-16
  
  etarch-1.3-1
  

  四、设置
  
  1、更改/etc/hosts
  
  vi /etc/hosts
  
  127.0.0.1        localhost.localdomain localhost
  
  192.168.22.44  dbrac int-dbrac
  
  192.168.22.244 vip-dbrac
  
  确保RAC节点名没有出现在回送地址中。
  
  此处设置相当重要,不能跳过,一定按照此设置,IP和主机别名可以自己定
  
  oracle 10g RAC中 使用了虚拟IP(VIP)技术,这是一个令人心动的高可用性、多机无缝切换的解决方案,但在单机模拟环境中仅仅是个形式而已,为了以后的顺利安装,不得不配置它
  
  2、调整内核网络设置参数
  
  编辑/etc/sysctl.conf,增加下面的设置:
  
  vi /etc/sysctl.conf
  
  # Default setting in bytes of the socket receive buffer
  
  et.core.rmem_default=262144
  
  # Default setting in bytes of the socket send buffer
  
  et.core.wmem_default=262144
  
  # Maximum socket receive buffer size which may be set by using
  
  # the SO_RCVBUF socket option
  
  et.core.rmem_max=262144
  
  # Maximum socket send buffer size which may be set by using
  
  # the SO_SNDBUF socket option
  
  et.core.wmem_max=262144
  
  3、添加模块选项:
  
  将下列行添加到 /etc/modules.conf 中:
  
  options sbp2 sbp2_exclusive_login=0
  
  4、创建“oracle”用户和目录
  
  $su -
  
  #groupadd dba
  
  #useradd -g dba -m oracle
  
  #passwd oracle
  
  5、编辑.bash_profile文件,增加oracle环境变量
  
  $vi .bash_profile
  
  export PATH
  
  unset USERNAME
  
  export LANG=zh_CN.EUC
  
  ORACLE_BASE=/home/oracle;export ORACLE_BASE
  
  export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
  
  export ORA_CRS_HOME=$ORACLE_BASE/product/10.1.0/crs_1
  
  export ORACLE_SID=rac1
  
  export NLS_LANG=''SIMPLIFIED CHINESE_CHINA.ZHS16GBK''
  
  PATH=$ORACLE_HOME/bin:/bin:/sbin:/usr/bin:/usr/ccs/bin:/usr/local/bin:/usr/ucb;export PATH
  
  LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:$ORACLE_HOME
/oracm/lib:/usr/local/lib:/usr/lib;export LD_LIBRARY_PATH
  
  export ORACLE_TERM=xterm
  
  export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME
/rdbms/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
  
  export THREADS_FLAG=native
  
  export TEMP=/tmp
  
  export TMPDIR=/tmp
  
  export LD_ASSUME_KERNEL=2.4.1
  
  6、创建CRS分区和数据文件分区
  
  1)先建立CRS分区挂载点
  
  mkdir /u01
  
  chown oracle:dba /u01
  
  2)接着创建CRS分区和共享数据文件分区
  
  fdisk /dev/hda
  
  CRS分区只要500M就够了,剩下的全部划分给数据文件分区,这里为数据文件只分了1个区/dev/hda9
  
  CRS分区为/dev/hda8
  
  [root@dbrac root]# fdisk /dev/hda
  
  The number of cylinders for this disk is set to 4997.
  
  [root@dbrac root]# fdisk /dev/hda
  
  The number of cylinders for this disk is set to 4997.
  
  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)
  
  Command (m for help): p
  
  Disk /dev/hda: 41.1 GB, 41109061120 bytes
  
  255 heads, 63 sectors/track, 4997 cylinders
  
  Units = cylinders of 16065 * 512 = 8225280 bytes
  
  Device Boot  Start    End  Blocks  Id System
  
  /dev/hda1  *     1    131  1052226  83 Linux
  
  /dev/hda2      132   1151  8193150  83 Linux
  
  /dev/hda3     1152   1916  6144862+ 83 Linux
  
  /dev/hda4     1917   4998 24756165  f Win95 Ext''d (LBA)
  
  /dev/hda5     1917   2177  2096451  83 Linux
  
  /dev/hda6     2178   2438  2096451  82 Linux swap
  
  /dev/hda7     2439   2569  1052226  83 Linux
  
  Command (m for help): n
  
  First cylinder (2570-4998, default 2570):
  
  Using default value 2570
  
  Last cylinder or +size or +sizeM or +sizeK (2570-4998, default 4998): +500M
  
  Command (m for help): n
  
  First cylinder (2632-4998, default 2632):
  
  Using default value 2632
  
  Last cylinder or +size or +sizeM or +sizeK (2632-4998, default 4998): +15000M
  
  Command (m for help): p
  
  Disk /dev/hda: 41.1 GB, 41109061120 bytes
  
  255 heads, 63 sectors/track, 4997 cylinders
  
  Units = cylinders of 16065 * 512 = 8225280 bytes
  
  Device Boot  Start    End  Blocks  Id System
  
  /dev/hda1  *     1    131  1052226  83 Linux
  
  /dev/hda2      132   1151  8193150  83 Linux
  
  /dev/hda3     1152   1916  6144862+ 83 Linux
  
  /dev/hda4     1917   4998 24756165  f Win95 Ext''d (LBA)
  
  /dev/hda5     1917   2177  2096451  83 Linux
  
  /dev/hda6     2178   2438  2096451  82 Linux swap
  
  /dev/hda7     2439   2569  1052226  83 Linux
  
  /dev/hda8     2570   2631  497983+ 83 Linux
  
  /dev/hda9     2632   4456 14659281  83 Linux
  
  Command (m for help): w
  
  The partition table has been altered!
  
  Calling ioctl() to re-read partition table.
  
  WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
  
  The kernel still uses the old table.
  
  The new table will be used at the next reboot.
  
  Syncing disks.
  
  7、编辑/etc/sysctl.conf,增加下面2行以设置系统共享内存大小和文件句柄
  
  kernel.shmmax=2147483648
  
  kernel.sem=250 32000 100 128
  
  本文涉及到的linux操作系统的内核参数默认设置大多符合oracle安装所需,不需要做更大的改动
  
  8、配置 hangcheck-timer 内核模块
  
  在/etc/modules.conf中增加下面一行
  
  options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
  
  为了确保系统每次重新启动的时候都能自动加载hangcheck-timer 模块,需要在/etc/rc.local文件中增加下面一行
  
  echo “modprobe hangcheck-timer” >> /etc/rc.local
  
  重启系统并检查hangcheck-timer模块是否已经加载
  
  [root@dbrac root]# lsmod | grep hangcheck-timer
  
  hangcheck-timer     2616  0 (unused)
  
  9、配置 RAC 节点以进行远程访问
  
  在 RAC 节点上运行 Oracle Universal Installer 时,它将使用 rsh 、rcp或scp命令将 Oracle 软件复制到 RAC 集群中的所有其他节点。虽然是单机模拟,但仍然要配置,无法跳过,从oracle 10g开始已经支持ssh协议,本文将首先尝试使用它
  
  使用oracle用户创建ssh公共密匙:
  
  [oracle@dbrac oracle]$ ssh-keygen -t dsa
  
  Generating public/private dsa key pair.
  
  Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
  
  Enter passphrase (empty for no passphrase):
  
  Enter same passphrase again:
  
  Your identification has been saved in /home/oracle/.ssh/id_dsa.
  
  Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
  
  The key fingerprint is:
  
  2d:09:9a:c0:40:c7:99:46:ea:43:0d:22:4b:d0:a0:26 oracle@dbrac
  
  复制公匙到其他节点(这里是单机)
  
  [oracle@dbrac oracle]$ cp -v .ssh/id_dsa.pub .ssh/authorized_keys
  
  测试密匙是否生效
  
  [oracle@dbrac oracle]$ ssh dbrac
  
  The authenticity of host ''dbrac (192.168.22.44)'' can''t be established.
  
  RSA key fingerprint is e7:ff:ce:5e:92:ac:c4:96:a8:ca:3e:20:2e:5c:75:ae.
  
  Are you sure you want to continue connecting (yes/no)? yes
  
  Warning: Permanently added ''dbrac,192.168.22.44'' (RSA) to the list of known hosts.
  
  [oracle@dbrac oracle]$
  
  无需密码即可登陆表示密匙已经生效
  
  10、安装和配置 OCFS
  
  OCFS是Oracle 集群文件系统 (OCFS),由 Oracle 开发,用于消除数据库管理员和系统管理员管理原始设备这一负担,它提供了与通常的文件系统相同的功能和用法。尽量不要在OCFS文件系统上使用linux二进制文件系统操作命令
  
  在目前的版本1种支持以下文件类型:
  
  Oracle 数据库文件
  
  联机重做日志文件
  
  归档重做日志文件
  
  控制文件
  
  服务器参数文件 (SPFILE)
  
  Oracle 集群注册表 (OCR) 文件
  
  CRS 表决磁盘。
  
  安装和配置
  
  1)上传ocfs-2.4.21-EL-1.0.14-1.i686.rpm,ocfs-support-1.0.10-1.i386.rpm,ocfs-tools-1.0.10-1.i386.rpm到/home/oracle/install/rac/ocfs目录
  
  2)执行rpm -ivh ocfs*.rpm 开始安装
  
  [oracle@dbrac oracle]$ su -
  
  Password:
  
  [root@dbrac root]# cd /home/oracle/install/rac/ocfs
  
  [root@dbrac ocfs]# rpm -ivh ocfs*.rpm
  
  Preparing...        ########################################### [100%]
  
  1:ocfs-support      ########################################### [ 33%]
  
  2:ocfs-2.4.21-EL     ########################################### [ 67%]
  
  3:ocfs-tools       ########################################### [100%]
  
  3)生成并配置/etc/ocfs.conf文件
  
  root@dbrac ocfs]# ocfstool &
  
  4)使用 ocfstool GUI 工具执行以下步骤:
  
  5)选择 [Task] - [Generate Config]
  
  在“OCFS Generate Config”对话框中,输入专用互连的接口和 DNS 名。
  
  验证所有节点上的所有值正确之后,请退出应用程序
  
  6)检查/etc/ocfs.conf
  
  [root@dbrac ocfs]# cat /etc/ocfs.conf
  
  #
  
  # ocfs config
  
  # Ensure this file exists in /etc
  
  #
  
  node_name = dbrac
  
  ip_address = 192.168.22.44
  
  ip_port = 7000
  
  comm_voting = 1
  
  guid = B907DC7945D81C0A2C8C000D61EB0166
  
  注意guid在集群中唯一对应一个节点,如果要更换网卡,请使用ocfs_uid_gen -c 命令重新创建
  
  7)重新启动系统并确认ocfs模块已经正确加载
  
  [oracle@dbrac oracle]$ lsmod | grep ocfs
  
  ocfs         299104  0 (unused)
  
  创建 OCFS 文件系统
  
  [oracle@dbrac oracle]$ id
  
  uid=500(oracle) gid=500(dba) groups=500(dba)
  
  [oracle@dbrac oracle]$ su -
  
  Password:
  
  [root@dbrac root]# mkfs.ocfs -F -b 128 -L crs -m /u01 -u ''500'' -g ''500'' -p 0775 /dev/hda8
  
  Cleared volume header sectors
  
  Cleared node config sectors
  
  Cleared publish sectors
  
  Cleared vote sectors
  
  Cleared bitmap sectors
  
  Cleared data block
  
  Wrote volume header
  
  注意-u和-g 是oracle用户的id和dba组的id,一定要填写正确,-p是设置/u01目录的访问权限,如果要设置dba组用户有权管理集群注册文件的话,请设置0775
  
  9)载入 OCFS 文件系统
  
  $ su -
  
  # mount -t ocfs /dev/hda8 /u01
  
  10)将 OCFS分区配置为在启动时自动载入
  
  11)将以下条目添加到/etc/fstab 文件中
  
  /dev/hda8  /u01   ocfs  _netdev  0 0
  
  12)重新启动服务器并检查CRS分区已经正确安装
  
  [root@dbrac root]# mount | grep ocfs
  
  /dev/hda8 on /u01 type ocfs (rw)
  
  如果没有被自动加载,请执行如下命令echo “mount -t ocfs /dev/hda8 /u01” >> /etc/rc.local,然后重新启动
  
  也可用使用oracle官方为我们提供的打过补丁的linux内核来解决此问题
0
相关文章