整理: 王日友
时间:2006-1-11
1. 引子:
熬了整整一周,总算是安装,配置好了oracle10g的RAC。心里有好多感慨,,烦躁,无奈。 最近又没有钱吃饭,孤苦,无助,最近也没有想别的女人,寂寞,无聊。。在装完rac后真真的欣喜了一晚,就上了chinaunix 发了水贴。 不想这么多兄弟需要这篇文档,还是好好的认真的整理一下吧,还算权威,因为是真真实践出来的文档 也因为在这个过程中我请教过好多oracle的专家,这里我真的很感谢他们。还有我们同事给予我的大力帮助,谢谢! 因为俺的文采很烂,在加上懒,有些是我直接从参考文档copy的,念起来很顺的就是copy的啦,呵呵,是不是很恶心。如果你看了文档,还是搞不定的话,可以联系我,我可以帮你想想你是什么问题,不过这样的话,你的请我吃饭了,嘿嘿。联系方式,
例如: msn [ wangriyou@hotmail.com 海参 ]
QQ [ 34991198 海参 ]
Email [ realismer@163.com ]
2. 概述:
oracle官方文档给出支持oracle10gRAC的操作系统:
这是在 Linux 上安装 Oracle 数据库 10g 软件主要组件,详细介绍了 Linux 的认证的英语发行版本(RHEL4-AS-update2)。指南逐步演示了主要 Oracle 10g 产品而在硬件上进行安装和配置的过程。 本文档的最终目的是帮助我以后安装和配置 Oracle 10g 网格的所有组件,也可以给大家做个扔砖的例子。
本指南将提供最权威的方法来完成任务。该方法通常意味着所选择的配置将只适用于我自己,呵呵。因此,本指南既适用于构建生产品质的环境,反映最佳实践。不过环境各异,问题多多,有问题只能好好想,慢慢去解决。不能扔鸡蛋给我。
参考文档有五个已通过 Oracle 数据库 10g 认证的 Linux 发行版本是:
The five Linux distributions certified for Oracle Database
而我用的是Red Hat Enterprise Linux 4 (RHEL4-AS-update2),而且建议用RHEL4U2搭配oracle
Oracle RAC
图1(oracle-RAC)
具体拓扑结构:
直接引用参考资料的拓扑,在加上我的具体配置,例如:
1. 我的环境:
ü 硬件:2台Hp-DL360服务器[Xeon
现命名:db1,db3 服务器
mySAN 盘阵
ü Network:2*10-100
现命名:
db1: eth0,eth1
db3: eth0,eth1
db1: eth0 [ 192.168.10.71] eth1 [192.168.100.71]
db3: eth0 [ 192.168.10.73] eth1 [192.168.100.73]
有两个虚拟ip,必须在公网网段,但不能绑在实际网卡上,这俩个ip是在安装rac时数据库自己配置的,用来解决实际公网ip有障碍问题:
db1:eth0-vip [192.168.10.171]
db3:eth0-vip [192.168.10.173]
具体方法:用ifconfig 命令改网络接口ip
例如:
#su - root
#ifconfig eth0 192.168.10.71
ü 软件:oracle
ü 操作系统: Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
所有的包全装上(重要)
#uname –a
Linux db1
2. 安装配置 linux:
4. 1 工具包的安装
装配置系统也很关键,安装的时候我把包全部选装了,防火墙先不要安装;
尽量用新刻录的安装盘去安装,我用的安装盘划的比较厉害,结果ssh包装的有问题,找错误把我差点找死。 :)
最骑马的包:
make-3.80-5
gcc-
compat-db-
你的有,可以通过命令来查看有没有,如果没有就重来吧!在所有节点执行以下命令
#rpm -q make gcc compat-db
make-3.80-5
gcc-
compat-db-
4.2 为oracle配置 linux
创建 Oracle 组和用户帐户
接下来我们将创建用于安装和维护 Oracle
例如:
# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
#/usr/sbin/groupadd oinstall
#/usr/sbin/groupadd dba
#/usr/sbin/groupadd oper
#/usr/sbin/useradd -m -g oinstall -G dba,oper oracle
#id oracle
uid=500(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)
用户 ID 和组 ID 在所有集群主机上必须相同。 使用从 id oracle 命令得到的信息,在其余集群主机上创建 Oracle 组和用户帐户:
#/usr/sbin/groupadd -g 501 oinstall
#/usr/sbin/groupadd -g 502 dba
#/usr/sbin/groupadd -g 503 oper
#/usr/sbin/useradd -m -u 501 -g oinstall -G dba,oper oracle
每个节点设置oracle用户密码,设置为强密码:
例如:
#passwd oracle
Changing password for user wangry.
New password: [kill*m77e]
Retype new password: [kill*m77e]
passwd: all authentication tokens updated successfully.
4.3 创建挂载点
现在创建存储 Oracle
以 root 用户身份在所有节点执行以下命令:
app挂载点
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
例如:
# mkdir -p /u01/app/oracle
# chown -R oracle:oinstall /u01/app/oracle
# chmod -R 775 /u01/app/oracle
rac挂载点
mkdir -p /u01/crs/oracle
chown -R oracle:oinstall /u01/crs/oracle
chmod -R 775 /u01/crs/oracle
例如:
#mkdir -p /u01/crs/oracle
#chown -R oracle:oinstall /u01/crs/oracle
#chmod -R 775 /u01/crs/oracle
4.4 配置内核参数
以 root 用户身份登录并在每个主机上配置 Linux 内核参数。
查内存配置:
例如:
# free
total used free shared buffers cached
Mem: 2074964 1058512 1016452 0 55520 773880
-/+ buffers/cache: 229112 1845852
Swap: 4194232 0 4194232
配置内核参数:
cat >> /etc/sysctl.conf <<EOF
kernel.shmall = 2097152
kernel.shmmax = 1052397568[你机器内存的一半]
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
EOF
#/sbin/sysctl –p
配置.bash_profile,给每个节点的oracle,root的bash_profile添加如下代码
if [ -t 0 ]; then
stty intr ^C
fi
umask 022
例如:
#vi /home/oracle/.bash_profile
#vi /root/.bash_profile
4.5 配置 Hangcheck 计时器
所有节点 RHEL 版本:
modprobe hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
cat >> /etc/rc.d/rc.local << EOF
modprobe hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
EOF
4.6 配置 /etc/hosts
有些 Linux 发行版本将主机名与回送地址 (127.0.0.1) 相关联。 如果出现这种情况,则从回送地址中删除主机名, 每个节点上配置相同的hosts。
例如:我刚装好机器 hosts 文件内容:
127.0.0.1 localhost.localdomain db1 localhost
把db1删掉象下面我配置好的一样!
用于此指南的 /etc/hosts 文件:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.10.71 db1 # 公网
192.168.10.73 db3 # 公网
192.168.100.71 db1-priv # 内网
192.168.100.73 db3-priv # 内网
192.168.10.171 db1-vip # 虚拟
192.168.10.173 db3-vip # 虚拟
对/etc/hosts文件的说明, db1,db3 在公网段 网卡eth0上,db1-priv, db3-priv内网段 网卡eth1上,db1-vip, db3-vip 虚拟网段上,虚拟网段也在公网网段上,这两个ip地址不指定网卡,由oracle自己配置。内网和公网是物理隔离的,目前我是把内网段直接接在另外一个交换机上。但是一定要保证他们是相通的,可以用ping来测试。也可以用一个交换机做,在交换机上划出vlan 使得公网个内网隔离(时间很急,我还没有查资料)。
4.7 为用户等效性配置 SSH
在安装 Oracle RAC
第一步是生成 SSH 的公共密钥和专用密钥。 SSH 协议有两个版本;版本 1 使用 RSA,版本 2 使用 DSA,因此我们将创建这两种类型的密钥,以确保 SSH 能够使用任一版本。 ssh-keygen 程序将根据传递给它的参数生成任一类型的公共密钥和专用密钥。
当您运行 ssh-keygen 时,将提示输入一个用于保存密钥的位置。 当提示时只需按 Enter 接受默认值。 随后将提示输入一个口令短语。 输入能记住的口令,而我直接回车,然后再次输入该口令进行确认。 当完成以下步骤后,在 ~/.ssh 目录中将会有四个文件: id_rsa、id_rsa.pub、id_dsa 和 id_dsa.pub。 id_rsa 和 id_dsa 文件是的专用密钥,千万不要告诉任何人。 id_rsa.pub 和 id_dsa.pub 文件是公共密钥,必须将其复制到集群中其他每个主机上。
在每个主机上,以 oracle 用户身份登录:
mkdir ~/.ssh
chmod 755 ~/.ssh
/usr/bin/ssh-keygen -t rsa
分别剪切和粘贴以下各行:
/usr/bin/ssh-keygen -t dsa
例如:
$ mkdir ~/.ssh
$ chmod 755 ~/.ssh
$ /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
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:
4b:df:76:77:72:ba:31:cd:c4:e2:
$ /usr/bin/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:
af:37:ca:69:
现在,必须将每个主机上的公共密钥文件 id_rsa.pub 和 id_dsa.pub 的内容复制到其他每个主机的 ~/.ssh/authorized_keys 文件中。 使用 ssh 将每个文件的内容复制到 ~/.ssh/authorized_keys 文件。 请注意,当您使用 ssh 第一次访问远程主机时,其 RSA 密钥将是未知的,从而将提示您确认是否希望连接该主机。 SSH 将记录该远程主机的 RSA 密钥,并在以后连接该主机时不再做出相关提示。
只需在第一个主机上,以 oracle 用户身份登录(复制本地帐户的密钥,以便连接本地主机的 ssh 能够起作用):
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ssh oracle@db3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(如果您要剪切和粘贴这些命令,则分别运行它们。 SSH 每次会提示输入 oracle 的口令,如果同时粘贴这些命令,则第一个命令在提示输入口令之前刷新输入缓冲区,从而导致其他命令将会丢失。)
ssh oracle@db3 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys
例如:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ ssh oracle@db3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'db3 (192.168.10.73)' can't be established. RSA key fingerprint is d1:23:a7:df:c5:fc:4e:10:d2:83:60:49:25:e8:eb:11. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'db3,192.168.10.73' (RSA) to the list of known hosts. oracle@db3's password: $ ssh oracle@db3 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys oracle@db3's password:$ chmod 644 ~/.ssh/authorized_keys
现在对第二个主机做同样的处理。 请注意,这次 SSH 会提示您输入在创建密钥时所使用的口令短语而非 oracle 的口令。 这是因为第一个主机 (db1) 现在知道了第二个主机的公共密钥,而 SSH 现在使用的是一种不同的认证协议。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh oracle@db1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh oracle@db1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys
例如:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys $ ssh oracle@db1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys The authenticity of host 'ds1 (192.168.10.71)' can't be established.RSA key fingerprint is bd:0e:39:2a :23:2d:ca:f9:ea:71:f5:3d:d3:dd:3b:65.