在VMWare ESX4.1中以Oracle Linux5.5(x64)安装 3 节点 Oracle 11gr2 RAC

时间:2022-03-12 08:17:47

VMWare ESX4.1中以OracleLinux5.5(x64)安装3节点 Oracle11gr2 RAC

(原创:flexitime,转载请注明出处,谢谢)

 

1.规划IP

RAC1 IP 10.1.1.151

RAC1 VIP 10.1.1.161

RAC1 Priv-IP 10.1.0.1

 

RAC2 IP 10.1.1.152

RAC2 VIP 10.1.1.162

RAC2 Priv-IP 10.1.0.2

 

RAC3 IP 10.1.1.153

RAC3 VIP 10.1.1.163

RAC3 Priv-IP 10.1.0.3

 

SCAN IP 10.1.1.170

 

2.设置一个新的虚拟机,设置内存为3G(虚拟机最好不要少于2G内存,不然可能会出些意想不到的问题),硬盘为25G,增加一个网卡后安装Oracle Linux5.5,全部默认安装。关闭SELinux ,关闭防火墙。

 

3.增加组及用户

groupadd -g 1000 oinstall

groupadd -g 1200 dba

useradd -u 1100 -g oinstall -G dba oracle

passwd oracle

 

4.检查rpm

# rpm -qa--queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})/n"|/

egrep"binutils|compat-libstdc++|elfutils-libelf|gcc|glibc|kernel-headers|ksh|libaio|libgcc|libgomp|libstdc|make|sysstat|unixODBC|pdksh"|sort

 

安装rpm包,在VM中连接上Linux 的安装DVD

执行以下命令(注,如所缺的不止这些包,请另行再安装,所要的包可以参考Oracle的标准安装文档)

 

mount -r -t iso9660 /dev/cdrom /media

cd /media/Server

rpm -Uvh binutils-2.*

rpm -Uvh compat-libstdc++-33*

rpm -Uvh elfutils-libelf-0.*

rpm -Uvh elfutils-libelf-devel-*

rpm -Uvh gcc-4.*

rpm -Uvh gcc-c++-4.*

rpm -Uvh glibc-2.*

rpm -Uvh glibc-common-2.*

rpm -Uvh glibc-devel-2.*

rpm -Uvh glibc-headers-2.*

rpm -Uvh ksh-2*

rpm -Uvh libaio-0.*

rpm -Uvh libaio-devel-0.*

rpm -Uvh libgcc-4.*

rpm -Uvh libstdc++-4.*

rpm -Uvh libstdc++-devel-4.*

rpm -Uvh make-3.*

rpm -Uvh sysstat-7.*

rpm -Uvh unixODBC-2.*

rpm -Uvh unixODBC-devel-2.*

 

rpm -Uvh gcc-4* --nodeps

rpm -Uvhelfutils-libelf-devel-0.137-3.el5.x86_64.rpm --nodeps

rpm -Uvh glibc-devel-2.5* --nodeps

rpm -Uvh glibc-headers-2.5* --nodeps

rpm -Uvh gcc-c++-4.* --nodeps

 

# For OEL, use relevant versions of thefollowing packages from your media.

rpm -Uvh oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm/

        oracleasm-support-2.1.3-1.el5.x86_64.rpm/

oracleasmlib-2.0.4-1.el5.x86_64.rpm   #必须注意,这个文件在DVD中没有,如果没有安装这个文件,会在图形界面上找不到ASM盘的。

可以到这个网站上下载:

http://www.oracle.com/technetwork/topics/linux/downloads/rhel5-084877.html

 

进入grid(在Oracle网站上下载)的安装目录,进行rpm目录

rpm -Uvh cvuqdisk*

 

5.编辑/etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost.localdomain   localhost

# Public Network -(eth0)

10.1.1.151   rac1.localdomain        rac1

10.1.1.152   rac2.localdomain        rac2

10.1.1.153   rac3.localdomain        rac3

 

#Private Network -(eht1)

10.1.0.1   rac1-priv.localdomain   rac1-priv

10.1.0.2   rac2-priv.localdomain   rac2-priv

10.1.0.3   rac3-priv.localdomain   rac3-priv

 

#Public Virtual IP -(eth0:1)

10.1.1.161   rac1-vip.localdomain    rac1-vip

10.1.1.162   rac2-vip.localdomain    rac2-vip

10.1.1.163   rac3-vip.localdomain    rac3-vip

 

 

#Note. The SCAN address should not really be defined in the hosts file.

#Instead is should be defined on the DNS to round-robin

#between 3 addresses on the same subnet as the public IPs.

#For this installation, we will compromise and use the hosts file.

#Single Client Access Name(SCAN)

10.1.1.170    rac-scan.localdomain  rac-scan

 

修改网络设置中的DNS>HostName 改为rac1.localdomain

增加ippriv-ip地址

 

6.编辑/etc/sysctl.conf,在文件最后加上(下同)

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 1054504960

kernel.shmmni = 4096

# semaphores: semmsl, semmns, semopm, semmni

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default=262144

net.core.rmem_max=4194304

net.core.wmem_default=262144

net.core.wmem_max=1048586

 

 

 

 

加载上述设置

#/sbin/sysctl -p

 

7.编辑/etc/security/limits.conf

oracle               soft    nproc   2047

oracle               hard    nproc   16384

oracle               soft    nofile  1024

oracle               hard    nofile  65536

 

编辑/etc/pam.d/login

 

session    required     pam_limits.so

 

8.关闭ntpd服务,准备使用Oraclectssd服务进行时间的同步

service ntpd stop

chkconfig ntpd off

mv /etc/ntp.conf /etc/ntp.conf.org

rm /var/run/ntpd.pid

 

9.建立安装目录

mkdir -p /u01/app/11.2.0/grid

mkdir -p /u01/app/oracle/product/11.2.0/db_1

chown -R oracle:oinstall /u01

chmod -R 775 /u01/

 

10.修改Oracle用户配置文件

 

su - oracle

cd ~

nano .bash_profile

 

# Oracle Settings

TMP=/tmp; export TMP

TMPDIR=$TMP; export TMPDIR

 

ORACLE_HOSTNAME=rac1.localdomain; export ORACLE_HOSTNAME

ORACLE_UNQNAME=RAC; export ORACLE_UNQNAME

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME

ORACLE_SID=RAC1; export ORACLE_SID

ORACLE_TERM=xterm; export ORACLE_TERM

PATH=/usr/sbin:$PATH; export PATH

PATH=$ORACLE_HOME/bin:$PATH; export PATH

 

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

 

if [ $USER = "oracle" ]; then

  if [ $SHELL = "/bin/ksh" ]; then

    ulimit -p 16384

    ulimit -n 65536

  else

    ulimit -u 16384 -n 65536

  fi

fi

 

 

11.在图形界面下运行

cd /usr/bin

./vmware-toolbox

在时间同步位置上打勾

 

12.关机,建立共享磁盘

SSH登录ESX Server,如果不知如何打开ssh功能,请参考我blog上的文章

cd /vmfs ..,

直到进行datastore的目录

mkdir RACShare

cd RACShare

 

1、创建磁盘

vmkfstools -d eagerzeroedthick -a lsilogic-c 10G asm1.vmdk

vmkfstools -d eagerzeroedthick -a lsilogic-c 10G asm2.vmdk

(可以增加更多的磁盘,这里只是模拟两个)

 

2、添加到需要的vm上,选择不同的通道,如scsi1:0

3SCSI控制器选择物理(虚拟磁盘可以在不同server上的虚拟机之间共享)。

 

13.起动后,为新增的磁盘分区(如果是分开机器来完成,那么这个步骤只要执行一次)

fdisk /dev/sdb

...fdisk /dev/sdc每次进入命令提示时,依次输入 "n","p", "1", "Return", "Return","p" and "w".

 

(如果是分开机器来完成,那么这个步骤,每台机都要执行一次)

chown oracle:oinstall /dev/sdb1

chown oracle:oinstall /dev/sdc1

chmod 600 /dev/sdb1

chmod 600 /dev/sdc1

 

14.设置oracle asm lib (如果是分开机器来完成,那么这个步骤,每台机都要执行一次)

 

# oracleasm configure -i

Configuring the Oracle ASM library driver.

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

Scan for Oracle ASM disks on boot (y/n) [y]: y

 

加载asm模块

/usr/sbin/oracleasm init

 

15.创建 asm磁盘 (如果是分开机器来完成,那么这个步骤,每台机都要执行一次)

/usr/sbin/oracleasm createdisk DISK1/dev/sdb1

/usr/sbin/oracleasm createdisk DISK2/dev/sdc1

 

(删除可用:/usr/sbin/oracleasmdeletedisk -v DISK5

 

检查asm磁盘(非必要)

/usr/sbin/oracleasm scandisks

 

显示所有asm 磁盘(非必要),必须要保证在每个节点上能显示Disk1, Disk2….

/usr/sbin/oracleasm listdisks

 

16.复制虚拟机

RAC1关机,将RAC1的内容复制到RAC2中,并加载此虚拟机,加载后,进入图形界面,注意要更新网卡的MAC地址。

加载x window,更新mac,修改ippriv-ip dns ->hostname名字:rac2.localdomain

 

进入 提示符

su - oracle

cd ~

nano .bash_profile

修改

ORACLE_SID=RAC2; export ORACLE_SID

ORACLE_HOSTNAME=rac2.localdomain; export ORACLE_HOSTNAME

 

修改RAC1RAC2RAC3VM网卡设置,将RAC1RAC2RAC3eth0配在同一虚拟交换机上,将两者的 eth1配在另一交换机上

 

17.检查网络是否准备好

ping -c 3 rac1

ping -c 3 rac1-priv

ping -c 3 rac2

ping -c 3 rac2-priv

ping -c 3 rac3

ping -c 3 rac3-priv

 

18.配置SSH用户等效性

 

第一步:

在每一台机上用root登录,运行以下脚本

 

su - oracle

mkdir ~/.ssh

chmod 700 ~/.ssh

/usr/bin/ssh-keygen -t rsa  #使用默认值就行了

 

第二步:

RAC1上运行

 

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

scp authorized_keys rac2:/home/oracle/.ssh/

 

RAC2上运行

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

scp authorized_keys rac3:/home/oracle/.ssh/

 

RAC3上运行

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

scp authorized_keys rac1:/home/oracle/.ssh/

scp authorized_keys rac2:/home/oracle/.ssh/

 

注:以上的解释

比如要从node A上的abc用户, sshhost B 上的def用户

那就要在A上的abc用户下面

#ssh-keygen -t rsa

把生成的id_rsa.pub  放到Bdef下的authorized_keys

最好是 >> 而不是cp,这样不会抹掉之前的记录

 

在这里其实就是在RAC1上先产生一个pubrsa密钥,并将其放在RAC2上,这样RAC1的用户登录到RAC2上时就不需要认证了,接着,RAC2也产生一个pubrsa密钥并追加 RAC1刚刚传过来的authorized_keys文件中,同时又将此密钥放到RAC1中。如果用nano打开这个文件,就会看到有两条记录了,如果要做多个的认证,步骤就有点复杂了,但必须保证所有机器上的 authorized_keys内容都一样,且此文件包括所有机的prsa pub key

 

第三步

RAC1

su ~

nano v.sh

#!/bin/bash

ssh rac1 date

ssh rac2 date

ssh rac3 date

ssh rac1.localdomain date

ssh rac2.localdomain date

ssh rac3.localdomain date

ssh rac1-priv date

ssh rac2-priv date

ssh rac3-priv date

ssh rac1-priv.localdomain date

ssh rac2-priv.localdomain date

ssh rac3-priv.localdomain date

scp authorized_keys rac2:/home/oracle/

scp authorized_keys rac3:/home/oracle/

 

在每台机上运行

bash v.sh

exec /usr/bin/ssh-agent $SHELL

/usr/bin/ssh-add

这时会在~/.ssh目录中产生一个known_hosts的文件,里面会有主机的加密串

 

 

验证:

重新开机后(最好是这样),在各节点上能够连续运行以下命令的(不提示输入密码)就算安装成功了

bash v.sh

 

 

19.检查Clusterware 的安装环境是否准备好

下载Oracle 11R2 Grid 软件包,解压后运行

 

./runcluvfy.sh stage -pre crsinst -nrac1,rac2,rac3 -verbose

 

运行上述包时,必须用oracle 用户,不能用 root,同时,运行时可能会报一个 /tmp/bootstrap 不能被删除的错误,用root账号将此目录删除或改名即可。

 

20.下载11Ggrid安装包,准备安装

oracle用户登录,运行

./runInstaller

 

一路选下去,选择典型,

 

下一页

scan 名称那里要填 rac-scan(/etc/hosts文件中对应)

添加一个rac节点

主机名:rac2.localdomain

虚拟主机名:rac2-vip.localdomain

主机名:rac3.localdomain

虚拟主机名:rac3-vip.localdomain

 

下一页

集群注册表储存类型:自动储存管理 (ASM)

软件位置:/u01/app/11.2.0/grid

集群注册表位置:

sysasm口令:123456

osasm组:dba

 

下一页

redunancy(冗余) : external

选全部的磁盘

 

下一页

清单目录:/u01/app/oraInventory

 

下一页

检测等,自行决定修复错误,然后安装

 

安装最后一步后,分别在两台上运行以下脚本

按提示分别在两节点上依次执行脚本

rac1

cd /u01/app/oraInventory/

./orainstRoot.sh

 

rac2

cd /u01/app/oraInventory/

./orainstRoot.sh

 

rac1

cd /u01/app/11.2.0/grid/

./root.sh

 

rac2

cd /u01/app/11.2.0/grid/

./root.sh

 

最后点击OK

//////安装完成后,可能会报错,先不用管它

 

检查 crs

su - oracle

cd /u01/app/11.2.0/grid/bin

 

检查crs状态:

./crsctl check crs

 

检查 Clusterware资源:

./crs_stat -t -v

 

检查集群节点:

./olsnodes -n

 

检查两个节点上的ORACLETNS 监听器进程:

./srvctl status listener

 

使用下面的命令语法来确认当前正在运行已安装的 Oracle ASM

./srvctl status asm -a

 

检查 集群注册表

./ocrcheck

 

检查表决磁盘

./crsctl query css votedisk

 

重启,重新再检查一次是否正常

 

21.安装Oracle软件

用典型,选服务器类,选RAC

典型安装配置页:

软件位置/u01/app/oracle/product/11.2.0/db_1

gobal database name (全局数据库名): RAC.localdomain

storage type Automatic Storage Manager

 

最后需要再用root身份运行脚本

cd /u01/app/oracle/product/11.2.0/db_1/

./root.sh

 

22.检查 RAC

在任一节点上以oracle用户登录

 

1.运行:

srvctl config database -d RAC

 

数据库唯一名称: RAC

数据库名: RAC

Oracle 主目录: /u01/app/oracle/product/11.2.0/db_1

Oracle 用户: oracle

Spfile: +DATA/RAC/spfileRAC.ora

: localdomain

启动选项: open

停止选项:immediate

数据库角色: PRIMARY

管理策略:AUTOMATIC

服务器池: RAC

数据库实例:RAC1,RAC2

磁盘组: DATA

服务:

数据库是管理员管理的

 

2.

$ sqlplus / as sysdba

SQL> SELECT inst_name FROMv$active_instances;

 

INST_NAME

--------------------------------------------------------------------------------

rac1.localdomain:RAC1

rac2.localdomain:RAC2

rac3.localdomain:RAC3

 

3.

https://10.1.1.170:1152/em

https://10.1.1.152:1152/em