在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
增加ip,priv-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服务,准备使用Oracle的ctssd服务进行时间的同步
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
3、SCSI控制器选择物理(虚拟磁盘可以在不同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,修改ip、priv-ip 及dns ->hostname名字:rac2.localdomain
进入 提示符
su - oracle
cd ~
nano .bash_profile
修改
ORACLE_SID=RAC2; export ORACLE_SID ORACLE_HOSTNAME=rac2.localdomain; export ORACLE_HOSTNAME |
修改RAC1、RAC2及RAC3的VM网卡设置,将RAC1、RAC2、RAC3的eth0配在同一虚拟交换机上,将两者的 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用户, ssh到host B 上的def用户
那就要在A上的abc用户下面
#ssh-keygen -t rsa
把生成的id_rsa.pub 放到B上def下的authorized_keys里
最好是 >> 而不是cp,这样不会抹掉之前的记录
在这里其实就是在RAC1上先产生一个pub的rsa密钥,并将其放在RAC2上,这样RAC1的用户登录到RAC2上时就不需要认证了,接着,RAC2也产生一个pub的rsa密钥并追加 到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.下载11G的grid安装包,准备安装
以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