Oracle中的RAC技术是一门很高深的艺术,RAC是real application cluster的英文缩写,中文翻译为真实应用集群。oracle的集群为多个数据库实例对应一个数据库,因而需要使用到共享存储,也就是所谓的盘阵(一盘多机),在本文中使用ISCSI共享存储实现;RAC的安装是个繁琐的过程,需要一定的linux或者unix系统基础,因而笔者将会整理一个RAC在centos4.8的上安装系列教程,本节为教程的第一讲 ———— 安装前的环境准备。

本节总的内容包括以下几个要点:
1:安装linux操作系统,配置IP和主机名
2:调整系统参数
3:配置共享存储
4:配置raw设备
5:配置ASM

环境介绍:
操作系统:Centos4.8  64位(节点)
节点1主机名:rac1.766.com  
节点1IP地址:192.168.50.191/192.168.122.191 
节点2主机名:rac2.766.com
节点2IP地址:192.168.50.192/192.168.122.192

一:安装操作系统

   
   
   
   
  1. 1:这里采取PXE自动方式进行push安装,安装所有的软件包,可参考:http://ylw6006.blog.51cto.com/470441/587303  
  2.  
  3. 2:配置hosts文件,两个节点应当一致,rac1-vip所对应的ip可以不存在  
  4. [root@rac1 ~]# cat /etc/hosts  
  5. # Do not remove the following line, or various programs  
  6. # that require network functionality will fail.  
  7. 127.0.0.1               localhost.localdomain localhost  
  8.  
  9. 192.168.50.191          rac1.766.com          rac1  
  10. 192.168.122.191         rac1-priv.766.com     rac1-priv  
  11. 10.0.0.1                rac1-vip.766.com      rac1-vip  
  12.  
  13.  
  14. 192.168.50.192          rac2.766.com          rac2  
  15. 192.168.122.192         rac2-priv.766.com     rac2-priv  
  16. 10.0.0.2                rac2-vip.766.com      rac2-vip  
  17.  
  18. 3:关闭selinux  
  19. [root@rac1 ~]# getenforce   
  20. Disabled  
  21.  
  22. 4:创建 Oracle 组和用户帐户,两个节点的oracle用户的uid,gid应当保持一致  
  23. [root@rac1 ~]# groupadd  oinstall  
  24. [root@rac1 ~]# groupadd  dba  
  25. [root@rac1 ~]# useradd -g oinstall -G dba oracle  
  26. [root@rac1 ~]# echo "oracle" |passwd --stdin oracle  
  27. Changing password for user oracle.  
  28. passwd: all authentication tokens updated successfully.  
  29.  
  30. [root@rac1 ~]# id oracle  
  31. uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba) 

二:调整系统参数

   
   
   
   
  1. 1:修改内核和系统参数  
  2. [root@rac2 ~]# id oracle  
  3. uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)  
  4.  
  5. [root@rac1 ~]# cat >> /etc/sysctl.conf <<EOF 
  6. > kernel.shmall = 2097152 
  7. > kernel.shmmax = 2147483648 
  8. > kernel.shmmni = 4096 
  9. > kernel.sem = 250 32000 100 128  
  10. > fs.file‐max = 65536 
  11. > net.ipv4.ip_local_port_range = 1024 65000  
  12. > net.core.rmem_default = 262144 
  13. > net.core.rmem_max = 262144 
  14. > net.core.wmem_default = 262144 
  15. > net.core.wmem_max = 262144 
  16. > EOF  
  17.  
  18. [root@rac1 ~]# sysctl -p  
  19. [root@rac1 ~]# cat >> /etc/security/limits.conf <<EOF 
  20. > oracle soft nproc 2047  
  21. > oracle hard nproc 16384  
  22. > oracle soft nofile 1024  
  23. > oracle hard nofile 65536  
  24. > EOF  
  25.  
  26. [root@rac1 ~]# cat >> /etc/pam.d/login <<EOF 
  27. > session required /lib/security/pam_limits.so  
  28. > EOF  
  29.  
  30. [root@rac1 ~]# cat >> /etc/modprobe.conf <<EOF 
  31. > options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 
  32. > EOF  
  33.  
  34. [root@rac1 ~]# modprobe -v hangcheck-timer  
  35. insmod /lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko hangcheck_tick=30 hangcheck_margin=180 
  36.  
  37. 2:修改oracle用户环境变量,节点2的ORACLE_SID变量需要改成racdb2  
  38. [root@rac1 ~]# su - oracle  
  39. [oracle@rac1 ~]$ cat .bash_profile   
  40. # .bash_profile  
  41.  
  42. # Get the aliases and functions  
  43. if [ -f ~/.bashrc ]; then  
  44.         . ~/.bashrc  
  45. fi  
  46.  
  47. # User specific environment and startup programs  
  48.  
  49. PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/root/bin  
  50.  
  51. export EDITOR=vim 
  52. export ORACLE_SID=racdb1 
  53. export ORACLE_BASE=/u01/app/oracle  
  54. export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1  
  55. export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs_1  
  56. export LD_LIBRARY_PATH=/lib  
  57. alias sqlplus='/usr/local/rlwrap/bin/rlwrap sqlplus' 
  58. alias rman='/usr/local/rlwrap/bin/rlwrap rman' 
  59. export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' 
  60. export NLS_LANG=american_america.UTF8  
  61. export PATH=$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:$PATH
  62. umask 022  
  63.  
  64.  
  65. 3:创建相关目录  
  66. [oracle@rac1 ~]$ mkdir -p $ORACLE_BASE/admin  
  67. [oracle@rac1 ~]$ mkdir -p $ORACLE_HOME  
  68. [oracle@rac1 ~]$ mkdir -p $ORA_CRS_HOME  
  69.  
  70. 4:配置oracle用户等效性  
  71. [oracle@rac1 ~]$ ssh-keygen -t rsa  
  72. Generating public/private rsa key pair.  
  73. Enter file in which to save the key (/home/oracle/.ssh/id_rsa):   
  74. Created directory '/home/oracle/.ssh'.  
  75. Enter passphrase (empty for no passphrase):   
  76. Enter same passphrase again:   
  77. Your identification has been saved in /home/oracle/.ssh/id_rsa.  
  78. Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.  
  79. The key fingerprint is:  
  80. 99:4c:75:0b:3a:81:11:6a:e8:71:74:9e:94:89:00:d4 [email protected]  
  81. [oracle@rac1 ~]$ ssh-keygen -t dsa  
  82. Generating public/private dsa key pair.  
  83. Enter file in which to save the key (/home/oracle/.ssh/id_dsa):   
  84. Enter passphrase (empty for no passphrase):   
  85. Enter same passphrase again:   
  86. Your identification has been saved in /home/oracle/.ssh/id_dsa.  
  87. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.  
  88. The key fingerprint is:  
  89. df:f6:c0:ab:7f:84:91:af:d8:d8:e0:fd:76:77:74:f2 [email protected]  
  90.  
  91. [oracle@rac1 ~]$ cat .ssh/id_dsa.pub  >> .ssh/authorized_keys   
  92. [oracle@rac1 ~]$ cat .ssh/id_rsa.pub  >> .ssh/authorized_keys   
  93. [oracle@rac1 ~]$ scp /home/oracle/.ssh/authorized_keys [email protected]:/home/oracle/.ssh/  
  94.  
  95. 验证:不需要密码登录  
  96. 在rac1节点上面分别ssh rac1;ssh rac1.766.com ; ssh rac2; ssh rac2.766.com   
  97. 在rac2节点上面分别ssh rac1;ssh rac1.766.com ; ssh rac2; ssh rac2.766.com   

三:配置共享存储

   
   
   
   
  1. 服务器IP:192.168.50.4   
  2. 操作系统:RHEL6 64位  
  3.  
  4. 1:服务器端,详细配置步骤可参考http://ylw6006.blog.51cto.com/470441/580568  
  5. [root@rhel6 ~]# lvcreate -n sharedisk -L 80G VolGroup00  
  6.   Logical volume "sharedisk" created  
  7. [root@rhel6 ~]# yum -y install scsi-target-utils.x86_64  
  8. [root@rhel6 ~]# service tgtd start  
  9. [root@rhel6 ~]# service tgtd restart  
  10. Stopping SCSI target daemon: [  OK  ]  
  11. Starting SCSI target daemon: [  OK  ]  
  12. [root@rhel6 ~]# chkconfig --add tgtdrules   
  13. [root@rhel6 ~]# service tgtdrules start  
  14. Starting Tgtdrules Server:  
  15.  
  16. [root@rhel6 ~]# service tgtdrules status  
  17. Target 1: iqn.2011-06-01.com.766.rac:shareddisk  
  18.     System information:  
  19.         Driver: iscsi  
  20.         State: ready  
  21.     I_T nexus information:  
  22.     LUN information:  
  23.         LUN: 0  
  24.             Type: controller  
  25.             SCSI ID: IET     00010000  
  26.             SCSI SN: beaf10  
  27.             Size: 0 MB  
  28.             Online: Yes  
  29.             Removable media: No  
  30.             Backing store type: rdwr  
  31.             Backing store path: None  
  32.         LUN: 1  
  33.             Type: disk  
  34.             SCSI ID: IET     00010001  
  35.             SCSI SN: beaf11  
  36.             Size: 85899 MB  
  37.             Online: Yes  
  38.             Removable media: No  
  39.             Backing store type: rdwr  
  40.             Backing store path: /dev/VolGroup00/sharedisk  
  41.     Account information:  
  42.     ACL information:  
  43.         192.168.50.191  
  44.         192.168.50.192  
  45.  
  46.  
  47.  
  48. 2:配置共享存储客户端,centos4和rhel5以及rhel6的配置略微有点不同  
  49. [root@rac1 ~]# wget ftp://ftp.is.co.za/mirror/centos/4.8/os/x86_64/CentOS/RPMS/iscsi-initiator-utils-4.0.3.0-8.x86_64.rpm  
  50. [root@rac1 ~]# rpm -ivh iscsi-initiator-utils-4.0.3.0-8.x86_64.rpm   
  51. warning: iscsi-initiator-utils-4.0.3.0-8.x86_64.rpm: V3 DSA signature: NOKEY, key ID 443e1821  
  52. Preparing...                ########################################### [100%]  
  53.    1:iscsi-initiator-utils  ########################################### [100%]  
  54.      
  55. [root@rac1 ~]# grep -v '^#' /etc/iscsi.conf  |grep -v '^$'  
  56. DiscoveryAddress=192.168.50.4  
  57. TargetName=iqn.2011-06-01.com.766.rac:shareddisk  
  58. Enabled=yes    
  59.      
  60. [root@rac1 ~]# service iscsi start  
  61. Checking iscsi config:  [  OK  ]  
  62. Loading iscsi driver:  [  OK  ]  
  63. Starting iscsid: [  OK  ]  
  64.  
  65. [root@rac1 ~]# iscsi-ls  
  66. *******************************************************************************  
  67. SFNet iSCSI Driver Version ...4:0.1.11-7(14-Apr-2008)  
  68. *******************************************************************************  
  69. TARGET NAME             : iqn.2011-06-01.com.766.rac:shareddisk  
  70. TARGET ALIAS            :   
  71. HOST ID                 : 0  
  72. BUS ID                  : 0  
  73. TARGET ID               : 0  
  74. TARGET ADDRESS          : 192.168.50.4:3260,1  
  75. SESSION STATUS          : ESTABLISHED AT Sun Jun 19 07:23:36 CST 2011  
  76. SESSION ID              : ISID 00023d000001 TSIH 100  
  77. *******************************************************************************  
  78.  
  79. [root@rac1 ~]# fdisk -l  
  80. Disk /dev/sda: 85.8 GB, 85899345920 bytes  
  81. 255 heads, 63 sectors/track, 10443 cylinders  
  82. Units = cylinders of 16065 * 512 = 8225280 bytes  
  83. Disk /dev/sda doesn't contain a valid partition table 

四:配置raw设备

   
   
   
   
  1. 1:将共享存储/dev/sda分成8个分区,前5个分区sda5-9分别为2G,sda10-12分别为20G  
  2. [root@rac1 ~]# fdisk -l  
  3. Disk /dev/sda: 85.8 GB, 85899345920 bytes  
  4. 255 heads, 63 sectors/track, 10443 cylinders  
  5. Units = cylinders of 16065 * 512 = 8225280 bytes  
  6.  
  7.    Device Boot      Start         End      Blocks   Id  System  
  8. /dev/sda1               1       10443    83883366    5  Extended  
  9. /dev/sda5               1         244     1959867   83  Linux  
  10. /dev/sda6             245         488     1959898+  83  Linux  
  11. /dev/sda7             489         732     1959898+  83  Linux  
  12. /dev/sda8             733         976     1959898+  83  Linux  
  13. /dev/sda9             977        1220     1959898+  83  Linux  
  14. /dev/sda10           1221        3653    19543041   83  Linux  
  15. /dev/sda11           3654        6086    19543041   83  Linux  
  16. /dev/sda12           6087        8519    19543041   83  Linux  
  17. [root@rac1 ~]#   
  18.  
  19. 2:将sda5-9绑定为裸设备,节点2上需要做相同的配置  
  20. [root@rac1 ~]# cat /etc/sysconfig/rawdevices   
  21. # This file and interface are deprecated.  
  22. # Applications needing raw device access should open regular  
  23. # block devices with O_DIRECT.  
  24. # raw device bindings  
  25. # format:  <rawdev> <major> <minor> 
  26. #          <rawdev> <blockdev> 
  27. # example: /dev/raw/raw1 /dev/sda1  
  28. #          /dev/raw/raw2 8 5  
  29. /dev/raw/raw5    /dev/sda5  
  30. /dev/raw/raw6    /dev/sda6  
  31. /dev/raw/raw7    /dev/sda7  
  32. /dev/raw/raw8    /dev/sda8  
  33. /dev/raw/raw9    /dev/sda9  
  34.  
  35. [root@rac1 ~]# service rawdevices restart  
  36. [root@rac1 ~]# raw -qa  
  37. /dev/raw/raw5:  bound to major 8, minor 5  
  38. /dev/raw/raw6:  bound to major 8, minor 6  
  39. /dev/raw/raw7:  bound to major 8, minor 7  
  40. /dev/raw/raw8:  bound to major 8, minor 8  
  41. /dev/raw/raw9:  bound to major 8, minor 9  
  42.  
  43. [root@rac1 ~]# ll /dev/raw/raw*  
  44. crw-rw----  1 oracle oinstall 162,  5 Jun 19 08:10 /dev/raw/raw5  
  45. crw-rw----  1 oracle oinstall 162,  6 Jun 19 08:10 /dev/raw/raw6  
  46. crw-rw----  1 oracle oinstall 162,  7 Jun 19 08:10 /dev/raw/raw7  
  47. crw-rw----  1 oracle oinstall 162,  8 Jun 19 08:10 /dev/raw/raw8  
  48. crw-rw----  1 oracle oinstall 162,  9 Jun 19 08:10 /dev/raw/raw9  
  49. [root@rac1 ~]# chkconfig rawdevices on 

五:配置ASM

   
   
   
   
  1. 1:从oracle网站下载并安装相应的包,节点2上需要做相同的配置  
  2. [root@rac1 ~]# cat down.txt   
  3. http://oss.oracle.com/projects/oracleasm-support/dist/files/RPMS/rhel4/amd64/2.1.3/oracleasm-support-2.1.3-1.el4.x86_64.rpm    
  4. http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.4-1.el4.x86_64.rpm    
  5. http://oss.oracle.com/projects/oracleasm/dist/files/RPMS/rhel4/amd64/2.0.5/2.6.9-89.EL/oracleasm-2.6.9-89.EL-debuginfo-2.0.5-1.el4.x86_64.rpm  
  6. http://oss.oracle.com/projects/oracleasm/dist/files/RPMS/rhel4/amd64/2.0.5/2.6.9-89.EL/oracleasm-2.6.9-89.EL-2.0.5-1.el4.x86_64.rpm   
  7. [root@rac1 ~]# wget -i down.txt  
  8. [root@rac1 ~]# rpm -ivh *.rpm  
  9. warning: oracleasm-2.6.9-89.EL-2.0.5-1.el4.x86_64.rpm: V3 DSA signature: NOKEY, key ID b38a8516  
  10. Preparing...                ########################################### [100%]  
  11.    1:oracleasm-support      ########################################### [ 25%]  
  12.    2:oracleasm-2.6.9-89.EL  ########################################### [ 50%]  
  13.    3:oracleasm-2.6.9-89.EL-d########################################### [ 75%]  
  14.    4:oracleasmlib           ########################################### [100%]  
  15.  
  16. 2:配置asm,节点2上需要做相同的配置   
  17. [root@rac1 ~]# /etc/init.d/oracleasm configure  
  18. Configuring the Oracle ASM library driver.  
  19.  
  20. This will configure the on-boot properties of the Oracle ASM library  
  21. driver.  The following questions will determine whether the driver is  
  22. loaded on boot and what permissions it will have.  The current values  
  23. will be shown in brackets ('[]').  Hitting <ENTER> without typing an  
  24. answer will keep that current value.  Ctrl-C will abort.  
  25.  
  26. Default user to own the driver interface []: oracle  
  27. Default group to own the driver interface []: oinstall  
  28. Start Oracle ASM library driver on boot (y/n) [n]: y  
  29. Scan for Oracle ASM disks on boot (y/n) [y]: y  
  30. Writing Oracle ASM library driver configuration: done  
  31. Initializing the Oracle ASMLib driver: [  OK  ]  
  32. Scanning the system for Oracle ASMLib disks: [  OK  ]    
  33.  
  34. 3:创建ASM磁盘  
  35. [root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sda10  
  36. Marking disk "VOL1" as an ASM disk: [  OK  ]  
  37. [root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sda11  
  38. Marking disk "VOL2" as an ASM disk: [  OK  ]  
  39. [root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sda12  
  40. Marking disk "VOL3" as an ASM disk: [  OK  ]  
  41. [root@rac1 ~]# /etc/init.d/oracleasm listdisks  
  42. VOL1  
  43. VOL2  
  44. VOL3  
  45.  
  46. 3:在节点2上应该可以看到同样的结果  
  47. [root@rac2 ~]# /etc/init.d/oracleasm  enable  
  48. Writing Oracle ASM library driver configuration: done  
  49. Initializing the Oracle ASMLib driver: [  OK  ]  
  50. Scanning the system for Oracle ASMLib disks: [  OK  ]  
  51. [root@rac2 ~]# /etc/init.d/oracleasm listdisks  
  52. VOL1  
  53. VOL2  
  54. VOL3