资源描述
Oracle 11G R2 RAC安装手册
一、 基础知识
1. RAC是什么
RAC,全称real application clusters,译为“实时应用集群”,是Oracle新版数据库中采取一项新技术,是高可用性一个,也是Oracle数据库支持网格计算环境关键技术。
2. RAC优缺点
l 优点
Oracle RAC支持Oracle9i、10g、11g版本,能够支持24 x 7 有效数据库应用系统,在低成本服务器上构建高可用性数据库系统,而且自由布署应用,无需修改代码。在Oracle RAC环境下,Oracle集成提供了集群软件和存放管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户能够按需扩展系统,以确保系统性能。
(1) 多节点负载均衡;
(2) 提供高可用:故障容错和无缝切换功效,将硬件和软件错误造成影响最小化;
(3) 经过并行实施技术提升事务响应时间----通常见于数据分析系统;
(4) 经过横向扩展提升每秒交易数和连接数----通常对于联机事务系统;
(5) 节省硬件成本,能够用多个廉价PC服务器替换昂贵小型机或大型机,同时节省对应维护成本;
(6) 可扩展性好,能够方便添加删除节点,扩展硬件资源。
l 缺点
(1) 相对单机,管理更复杂,要求更高;
(2) 可能会增加软件成本
3. Oracle RAC原理
在一个应用环境当中,全部服务器使用和管理同一个数据库,目标是为了分散每一台服务器工作量,硬件上最少需要两台以上服务器,而且还需要一个共享存放设备。同时全部服务器上OS全部应该是同一类OS,依据负载均衡配置策略,当一个用户端发送请求到某一台服务listener后,这台服务器依据我们负载均衡策略,会把请求发送给本机RAC组件处理也可能会发送给另外一台服务器RAC组件处理,处理完请求后,RAC会经过集群软件来访问共享存放设备.
逻辑结构上看:
l 每一个参与集群节点有一个独立instance,这些instance访问同一个数据库。
l 每一个节点linstance全部有自己SGA。
l 每一个节点linstance全部有自己background process。
l 每一个节点linstance全部有自己redo logs。
l 每一个节点instance全部有自己undo表空间。
l 全部节点全部共享一份datafiles和controlfiles。
三类Resource:
l VIP - 虚拟IP地址(Virtual IP)
l OCR - Oracle Cluster Registry(集群注册文件),统计每个节点相关信息
l Voting Disk,仲裁机制用于仲裁多个节点向共享节点同时写行为,这么 做是为了避免发生冲突。
二、 RAC环境设计
1. 服务器配置
操作系统
主机名
内存
网卡
Redhat Enterprise Linux 5.4
rac1
2G
eth0(Public)
eth1(Prive)
Redhat Enterprise Linux 5.4
rac2
2G
eth0(Public)
eth1(Prive)
2. 用户组计划
GroupName
GroupID
说明
HOST
oinstall
501
Oracle清单和软件全部者
rac1,rac2
asmadmin
504
Oracle自动存放管理组
rac1,rac2
asmdba
506
ASM数据库管理员组
rac1,rac2
asmopen
507
ASM操作员组
rac1,rac2
dba
502
数据库管理员
rac1,rac2
3. 用户计划
UserID
UserName
Group
说明
HOST
口令
501
grid
oinstall
dba
asmadmin
asmdba
asmoper
Oracle Cluster用户
rac1
rac2
grid123
502
oracle
oinstall
dba
asmdba
Oracle数据库管理员
rac1
rac2
oracle123
4. IP计划
主机名
公用IP
私有IP
虚拟IP
rac1
172.16.1.211
10.10.10.211
172.16.1.111
rac2
172.16.1.212
10.10.10.212
172.16.1.112
ScanIP
172.16.1.100
5. 存放计划
存放组件
Block Device
ASMlib Name
Size
OCR
/dev/sdb
OCR_VOL1
1G
/dev/sdc
OCR_VOL2
1G
/dev/sdd
OCR_VOL3
1G
数据文件
/dev/sde
DATA_VOL1
10G
文件备份
/dev/sdf
BACK_VOL1
5G
三、 Oracle RAC搭建
1. 配置共享存放(ASM依靠)
l 方法一:vmware workstation 9虚拟共享存放
(1) 在VM安装目录\VMware Workstation下实施命令:
#vmware-vdiskmanager.exe -c -s 1GB -a lsilogic -t 2 D:\racDisk\db01.vmdk
#vmware-vdiskmanager.exe -c -s 1GB -a lsilogic -t 2 D:\racDisk\db02.vmdk
#vmware-vdiskmanager.exe -c -s 1GB -a lsilogic -t 2 D:\racDisk\db03.vmdk
#vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 D:\racDisk\db04.vmdk
#vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 D:\racDisk\db05.vmdk
(2) 修改rac1和rac2下.vmx文件,在最终一行添加以下内容:
diskLib.dataCacheMaxSize=0
diskLib.dataCacheMaxReadAheadSize=0
diskLib.dataCacheMinReadAheadSize=0
diskLib.dataCachePageSize=4096
diskLib.maxUnsyncedWrites = "0"
disk.locking = "FALSE"
scsi1.sharedBus = "virtual"
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:0.present = "TRUE"
scsi1:0.fileName = "D:\racDisk\db01.vmdk"
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "D:\racDisk\db02.vmdk"
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "D:\racDisk\db03.vmdk"
scsi1:3.mode = "independent-persistent"
scsi1:3.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.fileName = "D:\racDisk\db04.vmdk"
scsi1:4.mode = "independent-persistent"
scsi1:4.deviceType = "disk"
scsi1:4.present = "TRUE"
scsi1:4.fileName = "D:\racDisk\db05.vmdk"
(3) 重新打开虚拟机,并开启。
(4) 磁盘分区,在rac1实施
#fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or
OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): p
Disk /dev/sdb: 1048 MB, bytes
64 heads, 32 sectors/track, 1000 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1000, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1000, default 1000):
Using default value 1000
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#fdisk /dev/sdc …反复上面操作
#fdisk /dev/sdd …反复上面操作
#fdisk /dev/sde …反复上面操作
#fdisk /dev/sdf …反复上面操作
l 方法二:Linux mount挂载(待处理)
2. 安装依靠包
#yum install -y expect* iscsi* binutils* compat-libstdc++* expat* elfutils-libelf* gcc* glibc* ksh* libgcc*
#yum install -y pdksh* libgomp* compat-db* libXp* libaio* cpp* setarch* sysstat* libstdc++* make-3*
#yum install -y unixODBC
#yum install -y unixODBC-devel
3. 查看依靠包安装情况
#rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \
elfutils-libelf \
elfutils-libelf \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel
实施结果…
binutils-2.17.50.0.6-26.el5(x86_64)
elfutils-libelf-0.137-3.el5(x86_64)
elfutils-libelf-0.137-3.el5(i386)
elfutils-libelf-0.137-3.el5(x86_64)
elfutils-libelf-0.137-3.el5(i386)
expat-1.95.8-11.el5_8(x86_64)
expat-1.95.8-11.el5_8(i386)
gcc-4.1.2-54.el5(x86_64)
gcc-c++-4.1.2-54.el5(x86_64)
glibc-2.5-118.el5_10.2(i686)
glibc-2.5-118.el5_10.2(x86_64)
glibc-common-2.5-118.el5_10.2(x86_64)
glibc-devel-2.5-118.el5_10.2(x86_64)
glibc-devel-2.5-118.el5_10.2(i386)
glibc-headers-2.5-118.el5_10.2(x86_64)
ksh-0621-18.el5(x86_64)
libaio-0.3.106-5(x86_64)
libaio-0.3.106-5(i386)
libaio-devel-0.3.106-5(i386)
libaio-devel-0.3.106-5(x86_64)
libgcc-4.1.2-54.el5(x86_64)
libgcc-4.1.2-54.el5(i386)
libstdc++-4.1.2-54.el5(x86_64)
libstdc++-4.1.2-54.el5(i386)
libstdc++-devel-4.1.2-54.el5(x86_64)
libstdc++-devel-4.1.2-54.el5(i386)
make-3.81-3.el5(x86_64)
pdksh-5.2.14-37.el5_8.1(x86_64)
sysstat-7.0.2-12.el5(x86_64)
unixODBC-2.2.11-10.el5(i386)
unixODBC-2.2.11-10.el5(x86_64)
unixODBC-devel-2.2.11-10.el5(x86_64)
unixODBC-devel-2.2.11-10.el5(i386)
4. 网络配置
(1) 修改rac1和rac2network
#vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac1 #此处为主机名
GATEWAY=172.16.1.254
#vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac2
GATEWAY=172.16.1.254
(2) 修改rac1和rac2hosts
#vi /etc/hosts
###eth0-Public IP###
172.16.1.211 rac1
172.16.1.212 rac2
###eth1–PRIVATE IP###
10.10.10.211 rac1-priv
10.10.10.212 rac2-priv
###VIP###
172.16.1.111 rac1-vip
172.16.1.112 rac2-vip
###SCAN###
172.16.1.100 rac-cluster-scan
(3) 重启rac1和rac2网络服务
#service network restart
(4) 配置虚拟IP
#ifconfig eth0:0 172.16.1.111 netmask 255.255.0.0 up
#ifconfig eth0:0 172.16.1.112 netmask 255.255.0.0 up
*注:虚拟IP在重启网络服务会被卸载,需要重新设置。
5. 配置NTPD服务
NTPD服务为Grid检验项,提供时间同时服务。
(1) 修改NTPD参数文件(rac1,rac2)
#vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
(2) 修改rac1ntpd.conf文件,删除原有内容录入以下内容
#cp /etc/ntp.conf /etc/ntp.conf.bak
#vi /etc/ntp.conf
restrict 0.0.0.0 mask 0.0.0.0 nomodify
server 127.127.1.0
fudge 127.127.1.0 stratum 10
restrict 127.127.1.0
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
authenticate no
keys /etc/ntp/keys
(3) 清空rac1ntpservers原有内容
#cp /etc/ntp/ntpservers /etc/ntp/ntpservers.bak
#vi /etc/ntp/ntpservers
(4) 编辑rac1step-tickers,添加一行
#cp /etc/ntp/step-tickers /etc/ntp/step-tickers.bak
#vi /etc/ntp/step-tickers
127.127.1.0
(5) 修改rac2ntpd.conf文件,删除原有内容录入以下内容
#cp /etc/ntp.conf /etc/ntp.conf.bak
#vi /etc/ntp.conf
restrict 0.0.0.0 mask 0.0.0.0 nomodify
server 127.127.1.0
server 172.16.1.211
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
authenticate no
keys /etc/ntp/keys
(6) 清空rac2ntpservers原有内容
#cp /etc/ntp/ntpservers /etc/ntp/ntpservers.bak
#vi /etc/ntp/ntpservers
(7) 编辑rac2step-tickers,添加一行
#cp /etc/ntp/step-tickers /etc/ntp/step-tickers.bak
#vi /etc/ntp/step-tickers
172.16.1.211 #rac1ip地址
(8) rac1节点重启NTPD服务
#service ntpd restart
(9) rac2节点停止NTPD服务,rac1重启NTPD服务后5、6分钟再实施
#service ntpd stop
#ntpdate rac1
#service ntpd start
(10) NTPD启用自动加载(rac1,rac2)
#chkconfig ntpd on
6. 关闭服务
关闭rac1和rac2无用sendmail和cups服务,加紧开机速度。
#chkconfig sendmail off
#chkconfig cups off
7. 用户、用户组
(1) 创建用户和用户组
#groupadd -g 501 oinstall
#groupadd -g 502 dba
#groupadd -g 504 asmadmin
#groupadd -g 506 asmdba
#groupadd -g 507 asmoper
#useradd -u 501 -g oinstall -G dba,asmadmin,asmdba,asmoper grid
#useradd -u 502 -g oinstall -G dba,asmdba oracle
#id oracle
#id grid
(2) 修改用户密码
#passwd oracle
#passwd grid
8. 文件夹及权限
#mkdir -p /u01/app/grid/
#mkdir -p /u01/app/11.2.0/grid/product/db_1
#mkdir -p /u01/app/oraInventory
#chown -R grid:oinstall /u01/app
#mkdir -p /u01/app/oracle/product/11.2.0/db_1
#chown -R oracle:oinstall /u01/app/oracle
#chmod -R 775 /u01
9. 修改系统参数
(1) 修改rac1和rac2limits.conf
#vi /etc/security/limits.conf
###ORACLE SETTING
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
(2) 修改rac1和rac2/etc/pam.d/login
#vi /etc/pam.d/login
###ORACLE SETTING
session required pam_limits.so
(3) 修改rac1和rac2/etc/sysctl.conf
#vi /etc/sysctl.conf
###ORACLE SETTING
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax =
kernel.shmmni = 4096
kernel.sem = 250 3 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
(4) 实施命令(rac1、rac2)
#sysctl -p
(5) 修改rac1和rac2profile,在末尾添加
#vi /etc/profile
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
(6) 实施命令(rac1、rac2)
#source /etc/profile
(7) 修改rac1和rac2/etc/csh.login
#vi /etc/csh.login
if ( $USER = "oracle" || $USER = "grid" ) then
limit maxproc 16384
limit descriptors 65536
endif
EOFCSH
(8) 修改grid用户环境变量
#su - grid
$cd /home/grid/
$vi .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_SID=+ASM1; export ORACLE_SID
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/11.2.0/grid/product/db_1; export ORACLE_HOME
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
THREADS_FLAG=native; export THREADS_FLAG
PATH=$ORACLE_HOME/bin:$PATH; export PATH
THREADS_FLAG=native; export THREADS_FLAG
PATH=$ORACLE_HOME/bin:$PATH; export PATH
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
#su - grid
$cd /home/grid/
$vi .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_SID=+ASM2; export ORACLE_SID
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/11.2.0/grid/product/db_1; export ORACLE_HOME
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
THREADS_FLAG=native; export THREADS_FLAG
PATH=$ORACLE_HOME/bin:$PATH; export PATH
THREADS_FLAG=native; export THREADS_FLAG
PATH=$ORACLE_HOME/bin:$PATH; export PATH
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
(9) 实施命令(rac1、rac2)
$source .bash_profile
(10) 修改oracle用户环境变量
#su - oracle
$cd /home/oracle/
$vi .bash_profile
# Oracle Settings oracle
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=orcl1; 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
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
#su - grid
$cd /home/grid/
$vi .bash_profile
# Oracle Settings oracle
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=orcl2; 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
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
(11) 实施命令(rac1、rac2)
$source .bash_profile
10. 配置用户等效性
(1) 使用Oracle用户,在全部节点实施
#su - oracle
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
be:8b:34:fd:c9:34:a7:2f:d2:f7:d9:30:1f:2e:48:d6 oracle@rac1
$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:
4f:bc:4b:9a:a6:cd:1c:15:e7:67:92:94:a2:cd:50:14 oracle@rac1
(2) 使用Oracle用户,在节点rac1实施
$cat /home/oracle/.ssh/*.pub >> /home/oracle/.ssh/authorized_keys
$ssh rac2 cat /home/oracle/.ssh/*.pub >> /home/oracle/.ssh/authorized_keys
$scp /home/oracle/.ssh/authorized_keys rac2:/home/oracle/.ssh/authorized_keys
(3) 验证O
展开阅读全文