在 VMWare ESX4.1 中以 Oracle Linux5.5(x64) 安装 3 节点 Oracle 11gr2 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 -Uvh elfutils-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 the following 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/oracleasm deletedisk -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 -n rac1,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
检查两个节点上的 ORACLE TNS 监听器进程:
./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 FROM v$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