RHEL6下的RAC - 11gR2超详细配置文档(ASM) - 图文

更新时间:2024-02-29 17:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验环境

***鉴于生产环境均采用64位系统和数据库软件,本实验也将采用这个标准***

采用vmware workstation 7(版本随意,我用的7)虚拟机软件作为安装平台

对于真机的要求:CPU:INTEL:CORE I3级别或以上 AMD :4核心CPU或以上 内存:最少6G,建议8G 系统:WIN7 64位/WINDOWS SERVER 2003/2008 64位 硬盘:虚拟机所在分区剩余空间50G以上,固态硬盘最好 ***硬件不满足上述条件者,建议做好心理准备,很可能在实验途中机器会很卡甚至死机***

虚拟机系统: RHEL6.5(64位) 存储: RHEL6.5(64位) 数据库版本: Oracle 11gR2 11.2.0.3 (64位)

基础要求:安装好两台系统为RHEL6.5(64位)的虚拟机

每台机器两块网卡,根分区尽量多给点,50G足够,别小气。

物理内存2G,SWAP最少3G(硬性需求,不然后期脚本检测会报错)

实验拓补图:

由于采用虚拟机实验,请无视图中的路由器和交换机,保证node1和node2能PING通即可, DNS服务将搭建在node1和node2上。(做DNS主从) 模拟80.8.29.0网段为eth0网卡(vmnet2),模拟10.20.89.0网段为eth1网卡(vmnet3)

安装软件前的系统配置

一:安装、配置存储和两个节点。 RHEL6.5(64位) 1:虚拟机配置:

存储分配1G内存,80G硬盘,一块网卡eth0 vmnet2 (后期按照需求为ASM磁盘组添加若干块新硬盘)

每个节点分配2G内存,80G硬盘,两块网卡,eth0 vmnet2、eth1 vmnet3 分区:存储:boot分区200M,根分区20G,swap分区2G,剩余备用。

两个节点:boot分区200M,根分区50G,swap分区3G,剩余备用。

需要注意的是根分区不要给小了,反正也是虚拟机,不要那么吝啬, swap分区最低要求3G,不然安装检查脚本会报错!

安装过程:需要注意的就是要安装英文版,不要启用UTC时间,选上海时间,软件包的选择默认就好,添加中文支持,禁用防火墙和SELINUX,具体步骤就不截图了

2:安装结束后,分别对storage、node1和node2进行一些基础配置 storage:

/etc/sysconfig/network-scripts/ifcfg-eth0:注意一定配置24位子网掩码!

/etc/sysconfig/network:

/etc/hosts:

node1:

注意:NM_CONTROLLED一定要设置为no,即不使用NetworkManager管理网络设备 /etc/sysconfig/network-scripts/ifcfg-eth0:注意一定配置24位子网掩码!

/etc/sysconfig/network-scripts/ifcfg-eth1:注意一定配置24位子网掩码!

/etc/sysconfig/network:

特别注意:配置完网卡后,一定要关闭NetworkManager服务并设置开机不自启,因为这个服务会跟/etc/resolv.conf文件有冲突,每次重启服务器或者重启NetworkManager服务都会导致/etc/resolv.conf文件内容被清空!

[root@node1 ~]# /etc/init.d/NetworkManager stop

Stopping NetworkManager daemon: [ OK ] [root@node1 ~]# chkconfig NetworkManager off

node2:

注意:NM_CONTROLLED一定要设置为no,即不使用NetworkManager管理网络设备 /etc/sysconfig/network-scripts/ifcfg-eth0:注意一定配置24位子网掩码!

/etc/sysconfig/network-scripts/ifcfg-eth1:注意一定配置24位子网掩码!

/etc/sysconfig/network:

特别注意:配置完网卡后,一定要关闭NetworkManager服务并设置开机不自启,因为这个服务会跟/etc/resolv.conf文件有冲突,每次重启服务器或者重启NetworkManager服务都会导致/etc/resolv.conf文件内容被清空!

[root@node2 ~]# /etc/init.d/NetworkManager stop

Stopping NetworkManager daemon: [ OK ] [root@node2 ~]# chkconfig NetworkManager off

node1 & node2: /etc/hosts:

注意:scan ip可以一个也可以多个,设一个就在/ec/hosts配置,设多个就在DNS配置,需要在DNS中为SCAN注册3个IP地址,以轮循方式解析为域名。

当配置3个scan ip时,不要在/etc/hosts配置文件中注册SCAN名称,因为如果这样做,就不允许SCAN用3个不同IP地址进行解析了,并且在装grid时会报错

node1 & node2: /etc/resolv.conf:

storage & node1 & node2: 配置yum:

先在虚拟机中加载系统镜像 mkdir /mnt/cdrom cd /etc/yum.repos.d/ rm -rf *

vim local.repo :

storage & node1 & node2:

vim /etc/fstab :需要改变tmpfs大小为2048M,安装软件需要(storage端不需要改这个参数)

[root@node1 etc]# mount -o remount /dev/shm/ [root@node1 etc]# df -h /dev/shm/

Filesystem Size Used Avail Use% Mounted on tmpfs 2.0G 0 2.0G 0% /dev/shm

[root@node1 etc]# mount -a

[root@node1 etc]# yum list 测试一下

基本配置结束,重启storag & node1 & node2,准备配置系统环境变量等参数

3:分别在node1、node2上配置DNS主、从服务器 在node1上配置DNS主服务器:

[root@node1 /]# yum install bind bind-chroot -y [root@node1 /]# cd /etc/

[root@node1 etc]# cp -p named.conf named.conf.bak

把原来的named.conf文件备份一份,cp一定要加-p参数,不然会有权限问题 [root@node1 etc]# vim named.conf options {

listen-on port 53 { any; };

directory \ allow-query { any; }; allow-query-cache { any; }; recursion no; };

zone \

type hint;

file \};

zone \ type master;

file \};

zone \ type master;

file \};

zone \ type master;

file \};

保存退出

[root@node1 etc]# cd /var/named/

[root@node1 named]# cp -p named.localhost cty.com.zone

拷贝样例文件named.localhost进行编辑,作为主配置文件,cp一定要加-p参数,不然会有权限问题

[root@node1 named]# vim cty.com.zone $TTL 1D

@ IN SOA cty.com. root.cty.com. (

0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS dns.cty.com. node1 IN A 80.8.29.1 node2 IN A 80.8.29.2 node1-vip IN A 80.8.29.3 node2-vip IN A 80.8.29.4 rac-scan IN A 80.8.29.7 rac-scan IN A 80.8.29.8 rac-scan IN A 80.8.29.9 node1-priv IN A 10.20.89.1 node2-priv IN A 10.20.89.2 dns IN A 80.8.29.1

注意dns那条A记录要放在后面,不然后面装软件时会与node1的A记录冲突

[root@node1 named]# cp -p cty.com.zone 80.8.29.local [root@node1 named]# vim 80.8.29.local $TTL 1D

@ IN SOA cty.com. root.cty.com. (

0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS dns.cty.com. 1 IN PTR node1.cty.com. 2 IN PTR node2.cty.com. 3 IN PTR node1-vip.cty.com. 4 IN PTR node2-vip.cty.com. 7 IN PTR rac-scan.cty.com. 8 IN PTR rac-scan.cty.com. 9 IN PTR rac-scan.cty.com. 保存退出

[root@node1 named]# cp -p 80.8.29.local 10.20.89.local [root@node1 named]# vim 10.20.89.local $TTL 1D

@ IN SOA cty.com. root.cty.com. (

0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS dns.cty.com.

1 IN PTR node1-priv.cty.com. 2 IN PTR node2-priv.cty.com. 保存退出

[root@node1 named]# /etc/init.d/named restart

Stopping named: [ OK ] Starting named: [ OK ] [root@ node1 named]# chkconfig named on

在node2上配置DNS从服务器:

[root@node2 ~]# yum install bind bind-chroot -y [root@node2 ~]# cd /etc/

[root@node2 etc]# cp -p named.conf named.conf.bak

把原来的named.conf文件备份一份,cp一定要加-p参数,不然会有权限问题 [root@node2 etc]# vim named.conf options {

listen-on port 53 { any; };

directory \ allow-query { any; }; allow-query-cache { any; }; recursion no; };

zone \

type hint;

file \};

zone \ type slave;

file \ masters { 80.8.29.1; }; };

zone \ type slave;

file \ masters { 80.8.29.1; }; };

zone \ type slave;

file \ masters { 80.8.29.1; }; };

保存退出

[root@node2 etc]# /etc/init.d/named restart [root@node2 etc]# cd /var/named/slaves/ [root@node2 slaves]# ls

10.20.89.local 80.8.29.local cty.com.zone

如上,能看到主DNS服务器上的区域文件,则证明从DNS服务器配置成功 [root@ node2 slaves]# chkconfig named on

DNS配置结束,在所有节点上用nslookup命令测试一下正向,反向解析是否成功

4:配置NTP服务器 (node1作为服务端,node2作为客户端) node1上:

[root@node1 ~]# vim /etc/ntp.conf

如图,去掉原来第18行的注释,把网段改为80.8.29.0,注释掉22~25行,添加26,27行的内容,保存退出

注:26,,27行的内容是让NTP Server和其自身保持同步,非常重要,不加上不好使!

[root@node1 ~]# vim /etc/sysconfig/ntpd

如图,修改第2行,添加-x参数。在最下面添加一行SYNC_HWCLOCK=yes。保存退出 [root@node1 ~]# /etc/init.d/ntpd restart (会报错,只要最后一条是OK就行) [root@node1 ~]# chkconfig ntpd on

node2上:

[root@node2 ~]# vim /etc/ntp.conf

如图,注释掉第22~25行,添加26,27行的内容,然后在第28行添加NTP服务器地址:server 80.8.29.1

注:26,,27行的内容是让NTP Server和其自身保持同步,非常重要,不加上不好使!

[root@node2 ~]# vim /etc/sysconfig/ntpd

如图,修改第2行,添加-x参数。在最下面添加一行SYNC_HWCLOCK=yes。保存退出 [root@node2 ~]# /etc/init.d/ntpd restart [root@node2 ~]# chkconfig ntpd on

注意!NTP服务器不是刚搭好,客户端就能马上同步成功的,需要在node1上运行命令 ntpq -p 查看reach值,当该值达到17以上时候,ntp客户端再运行/etc/init.d/ntpd restart 就能同步成功了,这里可以选择继续进行下面的操作,在安装软件之前别忘了同步一下就好。

5:创建相关的用户和组 (node1和node2) groupadd -g 1100 oinstall groupadd -g 1200 dba groupadd -g 1300 oper

groupadd -g 2100 asmadmin groupadd -g 2200 asmdba groupadd -g 2300 asmoper

useradd -u 777 -g oinstall -G dba,oper,asmadmin,asmdba -d /home/oracle -s /bin/bash -c \Software Owner\

echo \

useradd -u 888 -g oinstall -G dba,asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash -c \Infrastructure Owner\

echo \

6:配置grid用户和oracle用户的环境变量 (node1和node2上分别配置,注意区别!) [root@node1 ~]# su - oracle

[oracle@node1 ~]$ vim .bash_profile 添加如下内容: export PATH

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_HOSTNAME=node1.cty.com (node2上改为node2.cty.com) export ORACLE_SID=racdb1 (node2上改为 racdb2) export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_UNQNAME=racdb (node1&node2一定要保持一致) export TNS_ADMIN=$ORACLE_HOME/network/admin export ORACLE_TERM=xterm export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$PATH

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

export

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export EDITOR=vi export LANG=en_US

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss' umask 022

保存退出,用source .bash_profile重读一下配置文件

[root@node1 ~]# su - grid

[grid@node1 ~]$ vim .bash_profile 添加如下内容: export PATH

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_SID=+ASM1 (node2上改为 +ASM2) export ORACLE_BASE=/u01/app/grid

export ORACLE_HOME=/u01/app/11.2.0/grid export ORACLE_TERM=xterm

export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss' export TNS_ADMIN=$ORACLE_HOME/network/admin export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$PATH

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

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export EDITOR=vi export LANG=en_US

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 umask 022

保存退出,用source .bash_profile重读一下配置文件

7:创建所需的目录及赋予相应的权限 (node1和node2,root用户) mkdir -p /u01/app/grid

mkdir -p /u01/app/11.2.0/grid mkdir -p /u01/app/oracle chown -R oracle:oinstall /u01

chown -R grid:oinstall /u01/app/grid chown -R grid:oinstall /u01/app/11.2.0 chmod -R 775 /u01 查看:

[root@node1 ~]# ll /u01 -d

drwxrwxr-x 3 oracle oinstall 4096 Apr 16 14:06 /u01 [root@node1 ~]# ll /u01/app total 12

drwxrwxr-x 3 grid oinstall 4096 Apr 16 14:06 11.2.0 drwxrwxr-x 2 grid oinstall 4096 Apr 16 14:06 grid drwxrwxr-x 2 oracle oinstall 4096 Apr 16 14:06 oracle

8:编辑/etc/security/limits.conf文件,在下面添加如下内容: (node1和node2) [root@node1 ~]# vim /etc/security/limits.conf oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 grid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 65536 保存退出

9:编辑/etc/pam.d/login文件,添加下面两行: (node1和node2) [root@node1 ~]# vim /etc/pam.d/login session required /lib/security/pam_limits.so session required pam_limits.so

10:编辑/etc/profile文件,添加如下参数: (node1和node2) [root@node1 ~]# vim /etc/profile

if [ $USER = \ if [ $SHELL = \ ulimit -p 16384 ulimit -n 65536 else

ulimit -u 16384 -n 65536 fi fi

保存退出,用source /etc/profile重读一下配置文件

11:编辑/etc/sysctl.conf文件,编辑/修改下列参数,原则是文件原本的参数如果大于下面列出的,就不改,小于的,照下面改,没有的,就添加。 (node1和node2) [root@node1 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0

kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536

kernel.shmmax = 4294967295 kernel.shmall = 268435456 kernel.shmmni = 4096 fs.aio-max-nr = 1048576 fs.file-max = 6815744

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 = 1048576

net.ipv4.tcp_wmem = 262144 262144 262144 net.ipv4.tcp_rmem = 4194304 4194304 4194304

保存退出,之后别忘了用sysctl -p 命令使参数生效 12:配置两个节点间的ssh互相信任: (node1 & node2,分别在grid和oracle用户上都要做!) oracle用户: node1上:

[root@node1 ~]# su - oracle

[oracle@node1 ~]$ ssh-keygen -t rsa (一路回车,默认空密码) [oracle@node1 ~]$ ssh-keygen -t dsa (一路回车,默认空密码)

[oracle@node1 ~]$ cd /home/oracle/.ssh/ (.ssh目录需要先运行上面的命令才会生成) [oracle@node1 .ssh]$ ls

id_dsa id_dsa.pub id_rsa id_rsa.pub

node2上:

[root@node2 ~]# su - oracle

[oracle@node2 ~]$ ssh-keygen -t rsa (一路回车,默认空密码) [oracle@node2 ~]$ ssh-keygen -t dsa (一路回车,默认空密码)

[oracle@node2 ~]$ cd /home/oracle/.ssh/ (.ssh目录需要先运行上面的命令才会生成) [oracle@node2 .ssh]$ ls

id_dsa id_dsa.pub id_rsa id_rsa.pub

node1上:

[oracle@node1 .ssh]$ cat id_rsa.pub >> authorized_keys (把node1自己的rsa密钥导入authorized_keys文件中) [oracle@node1 .ssh]$ cat id_dsa.pub >> authorized_keys (把node1自己的dsa密钥导入authorized_keys文件中)

[oracle@node1 .ssh]$ ssh 80.8.29.2 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys (把node2的rsa密钥导入node1的authorized_keys文件中)

[oracle@node1 .ssh]$ ssh 80.8.29.2 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys (把node2的rsa密钥导入node1的authorized_keys文件中)

[oracle@node1 .ssh]$ scp authorized_keys 80.8.29.2:/home/oracle/.ssh/authorized_keys

(此时的authorized_keys文件中已经包含了所有节点,即node1,node2的密钥信息,将它scp给node2的对应目录下即可)

测试,所有节点的oracle和grid用户必须都做,最终目的是下列所有的操作,都不需要yes/no确认! (其实个人觉得测试时不加date,效果看得明显点)

node1上:

[oracle@node1 .ssh]$ ssh 80.8.29.1 date [oracle@node1 .ssh]$ ssh 80.8.29.2 date [oracle@node1 .ssh]$ ssh 10.20.89.1 date [oracle@node1 .ssh]$ ssh 10.20.89.2 date [oracle@node1 .ssh]$ ssh node1 date [oracle@node1 .ssh]$ ssh node2 date

[oracle@node1 .ssh]$ ssh node1.cty.com date [oracle@node1 .ssh]$ ssh node2.cty .com date [oracle@node1 .ssh]$ ssh node1-priv date [oracle@node1 .ssh]$ ssh node2-priv date

[oracle@node1 .ssh]$ ssh node1-priv.cty.com date [oracle@node1 .ssh]$ ssh node2-priv.cty.com date [oracle@node1 .ssh]$ ls

authorized_keys id_dsa id_dsa.pub id_rsa id_rsa.pub known_hosts

node2上:

[oracle@node2 .ssh]$ ssh 80.8.29.1 date [oracle@node2 .ssh]$ ssh 80.8.29.2 date [oracle@node2 .ssh]$ ssh 10.20.89.1 date [oracle@node2 .ssh]$ ssh 10.20.89.2 date [oracle@node2 .ssh]$ ssh node1 date [oracle@node2 .ssh]$ ssh node2 date

[oracle@node2 .ssh]$ ssh node1.cty.com date [oracle@node2 .ssh]$ ssh node2.cty.com date [oracle@node2 .ssh]$ ssh node1-priv date [oracle@node2 .ssh]$ ssh node2-priv date

[oracle@node2 .ssh]$ ssh node1-priv.cty.com date [oracle@node2 .ssh]$ ssh node2-priv.cty.com date [oracle@node2 .ssh]$ ls

authorized_keys id_dsa id_dsa.pub id_rsa id_rsa.pub known_hosts

grid用户:

node1上:

[root@node1 ~]# su - grid

[grid@node1 ~]$ ssh-keygen -t rsa (一路回车,默认空密码) [grid@node1 ~]$ ssh-keygen -t dsa (一路回车,默认空密码) [grid@node1 ~]$ cd /home/grid/.ssh/ (.ssh目录需要先运行上面的命令才会生成) [grid@node1 .ssh]$ ls

id_dsa id_dsa.pub id_rsa id_rsa.pub

node2上:

[root@node2 ~]# su - grid

[grid@node2 ~]$ ssh-keygen -t rsa (一路回车,默认空密码) [grid@node2 ~]$ ssh-keygen -t dsa (一路回车,默认空密码) [grid@node2 ~]$ cd /home/grid/.ssh/ (.ssh目录需要先运行上面的命令才会生成) [grid@node2 .ssh]$ ls

id_dsa id_dsa.pub id_rsa id_rsa.pub

node1上:

[grid@node1 .ssh]$ cat id_rsa.pub >> authorized_keys

(把node1自己的rsa密钥导入authorized_keys文件中) [grid@node1 .ssh]$ cat id_dsa.pub >> authorized_keys

(把node1自己的dsa密钥导入authorized_keys文件中)

[grid@node1 .ssh]$ ssh 80.8.29.2 cat /home/grid/.ssh/id_rsa.pub >> authorized_keys (把node2的rsa密钥导入node1的authorized_keys文件中)

[grid@node1 .ssh]$ ssh 80.8.29.2 cat /home/grid/.ssh/id_dsa.pub >> authorized_keys (把node2的rsa密钥导入node1的authorized_keys文件中)

[grid@node1 .ssh]$ scp authorized_keys 80.8.29.2:/home/grid/.ssh/authorized_keys

(此时的authorized_keys文件中已经包含了所有节点,即node1,node2的密钥信息,将它scp给node2的对应目录下即可)

测试,所有节点的grid和grid用户必须都做,最终目的是下列所有的操作,都不需要yes/no确认! (其实个人觉得测试时不加date,效果看得明显点)

node1上:

[grid@node1 .ssh]$ ssh 80.8.29.1 date [grid@node1 .ssh]$ ssh 80.8.29.2 date [grid@node1 .ssh]$ ssh 10.20.89.1 date [grid@node1 .ssh]$ ssh 10.20.89.2 date [grid@node1 .ssh]$ ssh node1 date [grid@node1 .ssh]$ ssh node2 date

[grid@node1 .ssh]$ ssh node1.cty.com date [grid@node1 .ssh]$ ssh node2.cty .com date [grid@node1 .ssh]$ ssh node1-priv date

[grid@node1 .ssh]$ ssh node2-priv date

[grid@node1 .ssh]$ ssh node1-priv.cty.com date [grid@node1 .ssh]$ ssh node2-priv.cty.com date [grid@node1 .ssh]$ ls

authorized_keys id_dsa id_dsa.pub id_rsa id_rsa.pub known_hosts

node2上:

[grid@node2 .ssh]$ ssh 80.8.29.1 date [grid@node2 .ssh]$ ssh 80.8.29.2 date [grid@node2 .ssh]$ ssh 10.20.89.1 date [grid@node2 .ssh]$ ssh 10.20.89.2 date [grid@node2 .ssh]$ ssh node1 date [grid@node2 .ssh]$ ssh node2 date

[grid@node2 .ssh]$ ssh node1.cty.com date [grid@node2 .ssh]$ ssh node2.cty.com date [grid@node2 .ssh]$ ssh node1-priv date [grid@node2 .ssh]$ ssh node2-priv date

[grid@node2 .ssh]$ ssh node1-priv.cty.com date [grid@node2 .ssh]$ ssh node2-priv.cty.com date [grid@node2 .ssh]$ ls

authorized_keys id_dsa id_dsa.pub id_rsa id_rsa.pub known_hosts

保证以上所有的ssh测试都不需要yes/no确认后,ssh的配置就算完成了,这个步骤很重要,不难,但是折腾人,一定认真做。

13:这个时候,去node1上运行ntpq -p 命令查看一下reach值: [root@node1 ~]# ntpq -p

remote refid st t when poll reach delay offset jitter ============================================================== *LOCAL(0) .LOCL. 10 l 39 64 377 0.000 0.000 0.000 OK,reach值早已超过17,此时可以去node2上同步时间了 [root@node2 ~]# /etc/init.d/ntpd restart

Shutting down ntpd: [ OK ] Starting ntpd: [ OK ]

[root@node2 ~]# ntpq -p

remote refid st t when poll reach delay offset jitter

====================================================================== *LOCAL(0) .LOCL. 10 l 1 64 1 0.000 0.000 0.000 node1.cty.com LOCAL(0) 11 u 36 64 1 0.192 1.618 0.000

OK,时间同步配置结束

14:配置存储,导出ASM磁盘组所需的共享磁盘:

首先,关闭storage端,如下图,为ASM磁盘组添加1块大小为50G的新硬盘:

然后,启动storage端,准备把新添加的磁盘导出成为共享存储。

[root@storage ~]# yum install scsi-target-utils -y

[root@storage ~]# vim /etc/tgt/targets.conf 编辑配置文件如下:

如上图,参照38-40行,写出42-47行的内容,其中的initiator-address参数设置的是访问控制列表,使指定的存储只能被指定的客户机发现。(重要!)

[root@storage ~]# /etc/init.d/tgtd restart 重启服务

Stopping SCSI target daemon: [ OK ] Starting SCSI target daemon: Starting target framework daemon

查看导出的存储:

[root@storage ~]# tgtadm --lld iscsi --mode target --op show Target 1: iqn.2014-05.cty.com:rac_disk System information: Driver: iscsi

State: ready

I_T nexus information: LUN information: LUN: 0

Type: controller

SCSI ID: IET 00010000 SCSI SN: beaf10

Size: 0 MB, Block size: 1 Online: Yes

Removable media: No Prevent removal: No Readonly: No

Backing store type: null Backing store path: None Backing store flags: LUN: 1

Type: disk

SCSI ID: IET 00010001 SCSI SN: beaf11

Size: 53687 MB, Block size: 512 Online: Yes

Removable media: No Prevent removal: No Readonly: No

Backing store type: rdwr Backing store path: /dev/sdb Backing store flags: Account information: ACL information: 80.8.29.1 80.8.29.2

如上,Target 1中的LUN: 1即为导出的存储

[root@storage ~]# chkconfig tgtd on 最后不要忘了这步

15:导入存储 (node1和node2)

[root@node1 ~]# yum install iscsi-initiator-utils -y [root@node1 ~]# rm -rf /var/lib/iscsi/* [root@node1 ~]# /etc/init.d/iscsid start

[root@node1 ~]# iscsiadm -m discovery -t sendtargets -p 80.8.29.10:3260 Starting iscsid: [ OK ] 80.8.29.10:3260,1 iqn.2014-05.cty.com:rac_disk 发现storage端导出的存储

[root@node1 ~]# iscsiadm -m node -T iqn.2014-05.cty.com:rac_disk -p 80.8.29.10:3260 -l 导入为RAC提供的存储

Logging in to [iface: default, target: iqn.2014-05.cty.com:rac_disk, portal: 80.8.29.10,3260] (multiple)

Login to [iface: default, target: iqn.2014-05.cty.com:rac_disk, portal: 80.8.29.10,3260] successful. [root@node1 ~]# chkconfig iscsi on [root@node1 ~]# chkconfig iscsid on

然后别忘了在node2上也执行以上操作导入存储!

16:绑定udev (node1和node2)

首先用fdisk -l命令查看一下导入的存储: [root@node1 ~]# fdisk -l

Disk /dev/sda: 85.9 GB, 85899345920 bytes 255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b0f9b

Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary.

/dev/sda2 26 6400 51200000 83 Linux

/dev/sda3 6400 6922 4194304 82 Linux swap / Solaris

Disk /dev/sdb: 53.7 GB, 53687091200 bytes 64 heads, 32 sectors/track, 51200 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000

如上,/dev/sdb为导入的存储

然后用scsi_id -g -u -d 命令获取/dev/sdb的wwid [root@node1 ~]# scsi_id -g -u -d /dev/sdb 1IET_00010001

如上,1IET开头的即为该设备的wwid

[root@node1 ~]# cd /etc/udev/rules.d/

[root@node1 rules.d]# vim 99-iscsi.rules 新建一个rules文件99-iscsi.rules,内容如下: KERNEL==\BUS==\ENV{ID_SERIAL}==\SYMLINK+=\

保存退出,然后把这个文件scp给node2到/etc/udev/rules.d/目录下即可

[root@node1 rules.d]# scp 99-iscsi.rules 80.8.29.2:/etc/udev/rules.d/ 然后分别在node1和node2上: [root@node1 rules.d]# start_udev

Starting udev: [ OK ] [root@node2 rules.d]# start_udev

Starting udev: [ OK ]

注意:在这里发现RHEL6比较怪异,这个时候用fdisk -l命令居然看不到/dev/sdb了,不过重启之后,就一切正常了

注意:既然绑定了udev,那么今后对于这个存储进行分区、查看、绑定等操作时,要使用该存储的udev别名。

17:分区 (只在node1上做)

首先用fdisk -l /dev/rac_disk命令查看当前的分区状态:

如图所示,能够看到名为/dev/rac_disk的共享存储,那么开始进行分区: fdisk /dev/rac_disk

n→e→1(数字1)→回车→回车 (把整个存储作为扩展分区) 然后在这个扩展分区上创建所需的逻辑分区: n→l(字母l)→回车→ +2G 添加一个大小为2G的逻辑分区 n→l(字母l)→回车→ +2G 添加一个大小为2G的逻辑分区 n→l(字母l)→回车→ +2G 添加一个大小为2G的逻辑分区 n→l(字母l)→回车→ +30G 添加一个大小为30G的逻辑分区 n→l(字母l)→回车→ +10G 添加一个大小为10G的逻辑分区 w 保存分区表

分区结束后,分别在node1,node2上运行命令fdisk -l 测试是否能够查看到该分区表: [root@node1 ~]# fdisk -l /dev/rac_disk

说明: disk5、disk6、disk7是分别用来做ocr和voting disk的

disk8是用来装数据库的

disk9是用来做闪回恢复区的

之后再运行ll /dev/rac_disk* 查看udev绑定的对应关系:

如上图,对应关系非常明确,非常容易辨认

最后,运行partprobe /dev/rac_disk (这一步在node1,node2上都要做,重要!)

分完区后一定重启一下虚拟机!来验证一下能否自动挂载导入的存储和UDEV。

至此,安装软件之前的所有系统配置结束

18:配置ASM (1)装包:

下面3个rpm包需要自己下载并安装,是RHEL6专用的,这3个包并没有要求与系统内核版本相对应的要求,就上网找一模一样的包名下载就可以了,这里我提供一个网址,但是不保证一直有效:http://www.itpub.net/thread-1831197-1-1.html

注:如果系统是OEL6的话,只装oracleasmlib和oracleasm-support两个包就可以了

[root@node1 ~]# rpm -ivh kmod-oracleasm-2.0.6.rh1-2.el6.x86_64.rpm --nodeps --force [root@node1 ~]# rpm -ivh oracleasm* --nodeps --force (注意后面两个参数前面都是两个减号,不加参数的话会报错,有依赖关系,node2上也装!)

(2) 运行配置脚本:

oracleasm 命令的默认路径为 /usr/sbin。以前版本中使用的 /etc/init.d 路径并未被弃用,但该路径下的 oracleasm 二进制文件现在一般用于内部命令。如果输入 oracleasm configure 命令时不带 -i 参数,则显示当前配置。 node1:

[root@node1 ~]# oracleasm configure ORACLEASM_ENABLED=false ORACLEASM_UID= ORACLEASM_GID=

ORACLEASM_SCANBOOT=true ORACLEASM_SCANORDER=\ORACLEASM_SCANEXCLUDE=\

ORACLEASM_USE_LOGICAL_BLOCK_SIZE=\node2:

[root@node2 ~]# oracleasm configure ORACLEASM_ENABLED=false ORACLEASM_UID= ORACLEASM_GID=

ORACLEASM_SCANBOOT=true ORACLEASM_SCANORDER=\ORACLEASM_SCANEXCLUDE=\

ORACLEASM_USE_LOGICAL_BLOCK_SIZE=\

输入oracleasm configure -i 命令,运行 oracleasm 初始化脚本:(node1 & node2) node1:

[root@node1 ~]# oracleasm configure -i Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values

will be shown in brackets ('[]'). Hitting without typing an answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: grid 手动输入 Default group to own the driver interface []: asmadmin Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration: done 查看:

[root@node1 ~]# oracleasm configure ORACLEASM_ENABLED=true ORACLEASM_UID=grid

ORACLEASM_GID=asmadmin ORACLEASM_SCANBOOT=true ORACLEASM_SCANORDER=\ORACLEASM_SCANEXCLUDE=\

ORACLEASM_USE_LOGICAL_BLOCK_SIZE=\node2:

[root@node2 ~]# oracleasm configure -i Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting without typing an answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: grid 手动输入 Default group to own the driver interface []: asmadmin Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration: done 查看:

[root@node2 ~]# oracleasm configure ORACLEASM_ENABLED=true ORACLEASM_UID=grid

ORACLEASM_GID=asmadmin ORACLEASM_SCANBOOT=true ORACLEASM_SCANORDER=\ORACLEASM_SCANEXCLUDE=\

ORACLEASM_USE_LOGICAL_BLOCK_SIZE=\该脚本(oracleasm configure -i)完成以下任务: 创建 /etc/sysconfig/oracleasm 配置文件 创建 /dev/oracleasm 挂载点

挂载 ASMLib 驱动程序文件系统

(3) 加载 oracleasm 内核模块: (node1 & node2) node1:

[root@node1 ~]# oracleasm init

Creating /dev/oracleasm mount point: /dev/oracleasm Loading module \

Mounting ASMlib driver filesystem: /dev/oracleasm node2:

[root@node2 ~]# oracleasm init

Creating /dev/oracleasm mount point: /dev/oracleasm Loading module \

Mounting ASMlib driver filesystem: /dev/oracleasm

(4) 为oracle创建ASM磁盘:

创建 ASM 磁盘只需在 RAC 集群中的一个节点上以 root 用户身份执行。我将在node1上运行这些命令。在node2上,将需要执行oracleasm scandisks 以识别新磁盘。 node1:

[root@node1 ~]# oracleasm createdisk ovdata1 /dev/rac_disk5 Writing disk header: done Instantiating disk: done

[root@node1 ~]# oracleasm createdisk ovdata2 /dev/rac_disk6 Writing disk header: done Instantiating disk: done

[root@node1 ~]# oracleasm createdisk ovdata3 /dev/rac_disk7 Writing disk header: done Instantiating disk: done

[root@node1 ~]# oracleasm createdisk data /dev/rac_disk8 Writing disk header: done Instantiating disk: done

[root@node1 ~]# oracleasm createdisk fra /dev/rac_disk9 Writing disk header: done Instantiating disk: done

命令解释:oracleasm createdisk:创建ASM磁盘,ovdata1:自定义的ASM磁盘名,/dev/rac_disk*:该设备的UDEV别名。

node2:

[root@node2 ~]# oracleasm scandisks 扫描,识别新的ASM磁盘 Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... Instantiating disk \TA1\Instantiating disk \TA2\Instantiating disk \TA3\Instantiating disk \

Instantiating disk \

(5) 最后在两个节点上验证一下,是否成功创建ASM磁盘: node1:

[root@node1 ~]# oracleasm listdisks DATA FRA

OVDATA1 OVDATA2 OVDATA3 node2:

[root@node2 ~]# oracleasm listdisks DATA FRA

OVDATA1 OVDATA2 OVDATA3

至此,安装软件之前的所有系统配置结束

开始安装软件(grid,database)

一:安装grid 1:安装前的检测 (安装软件的整个过程都只在主节点node1上做,不需要安装到node2上)

首先装包:yum install compat-libstdc++-33 compat-libcap1 gcc gcc-c++ libgomp elfutils-libelf-devel glibc-devel glibc-headers libaio-devel libstdc++-devel sysstat unixODBC unixODBC-devel -y

注:RHEL6.5装包的时候不要装ksh,并且额外安装pdksh-5.2.14-30.x86_64.rpm这个包,需要自己去下载,不然报错,而OEL6.5刚好相反,yum安装的时候直接把ksh加上就可以。 (node1和node2都装)

这些包不提前装的话检测脚本会报错,这些包都是试出来的,如果操作系统与实验环境不同,可能还需要其他的包,具体问题具体分析吧。

然后挂载oracle11gR2_x64镜像或者使用下载好的压缩文件,应该是三个压缩包,前两个是database的压缩包,第三个是grid的压缩包,把三个包都解压到/usr/local/src目录下。 [root@node1 ~]# cd /usr/local/src/ [root@node1 src]# ls database grid

开始检测之前,需要装一个rpm包 (该包是刚才解压出来的,需要scp给node2一份) [root@node1 ~]# cd /usr/local/src/grid/rpm

[root@node1 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm

[root@node1 rpm]# scp cvuqdisk-1.0.9-1.rpm node2:/tmp

(将cvuqdisk-1.0.9-1.rpm文件scp给node2,然后在node2上也安装) [root@node2 tmp]# rpm -ivh cvuqdisk-1.0.9-1.rpm

两个节点都装完后,回到node1执行安装前的检测脚本, 这个脚本要用grid用户执行! [root@node1 rpm]# su - grid

[grid@node1 ~]$ cd /usr/local/src/grid [grid@node1 grid]$ ls

doc install response rpm runcluvfy.sh runInstaller sshsetup stage welcome.html runcluvfy.sh就是检测脚本,用下面的命令格式执行该脚本,并输出到/tmp/result.txt

[grid@node1 grid]# ./runcluvfy.sh stage -pre crsinst -n node1.cty.com,node2.cty.com -fixup -verbose > /tmp/result.txt

(此时可以打开另一个终端,使用命令tail -f /tmp/result.txt实时监测result.txt) 脚本执行完毕后,查看results.txt,

最后一行显示“Pre-check for cluster services setup was successful.”则证明检测成功。

如果这里报错,则查看哪里显示failed进行排错。通常都是缺少某个软件包,某个服务配置失败之类的错误,具体问题具体分析。 只要实验环境完全符合之前的要求,并且按照之前的文档操作无误,这里就不会有任何报错。

2:开始安装grid (只在node1上) [root@node1 ~]# xhost +

access control disabled, clients can connect from any host [root@node1 grid]# su - grid (必须用grid用户进行安装) [grid@node1 ~]$ cd /usr/local/src/grid/ [grid@node1 grid]$ ls

doc install response rpm runcluvfy.sh runInstaller sshsetup stage welcome.html [grid@node1 grid]$ ./runInstaller 开始安装:

选择Skip software updates,Next

选第一项,为一个Cluster安装,Next

选第二项,高级安装,Next

添加简体中文支持,Next

设置Cluster Name和SCAN Name,取消复选Configure GNS,Next

这时安装程序不会自动识别node2的信息,需要点Add进行手动添加

如图添加好node2,Next

设置哪块网卡为公网或私网,如图设置即可,Next

选ASM,Next

如图,为OCR&&VOTING DISK创建ASM磁盘组,冗余模式选择Normal,Next

科普一:

Oracle Cluster Registry (OCR) 用于解决集群中的健忘症的问题。

健忘是由于某个节点更新了OCR中的内容,而集群中的另外一些节点此时处于关闭,维护或重启阶段,OCR Master进程来不及将其信息更新到这些异常节点缓存而导致的不一致。

譬如,在A节点发出了添加ocr镜像的命令,在这个时候B节点处于重启阶段。重启后A已经更新完毕,而此时B并不知道已经为ocr增加了一个新的镜像磁盘,这时就会造成配置丢失,也就是所谓的“健忘症”。

VOTEDISK是用于解决脑裂(Split Brain)的问题。

在集群中,节点间通过某种机制(心跳)了解彼此的健康状态,以确保各节点协调工作。 假设只有\心跳\出现问题, 各个节点还在正常运行, 这时,每个节点都认为其他的节点宕机了,自己是整个集群环境中的\唯一健在者\,自己应该获得整个集群的\控制权\。 在集群环境中,存储设备都是共享的,这就意味着数据灾难,这种情况就是\脑裂\。

科普二:ASM的三种冗余模式 高冗余(High):asm使用3份镜像存储,以提高性能和数据的安全,最少需要三块磁盘(三个failure group);有效磁盘空间是所有磁盘设备 大小之和的1/3,虽然冗余级别高了,但是硬件的代价也最高。

常规冗余(Normal):asm使用2份镜像存储,以提高性能和数据的安全,最少需要两块磁盘(两个failure group);有效磁盘空间是所有磁盘设备 大小之和的1/2,一般用常规冗余就ok。

外部冗余(External):asm不对数据库文件镜像,可以通过raid磁盘镜像;所用磁盘最少,有效磁盘空间是所有磁盘设备的大小之和。

补充:1、如果是用来放置ocr/voting disk的diskgroup,那么external,normal,high 分别至少需要1,3,5个disk。

2、如果是用来放置data file的diskgroup,那么external,normal,high 分别至少需要1,2,3个disk。

选择使用同一个ASM密码,密码强度要求必须有字母大小写和数字组合,不然会有提示,(可忽略)为了便于记忆,我这里设置为oracleasm,Next

选择不使用IPMI,Next

默认即可,Next

默认即可,Next

默认即可,Next

等待安装前检测

没发现报错,点Install,如有报错,根据提示排错。

等待安装过程,时间较长

分别在node1,node2上执行这两个脚本,顺序是node1上执行第1个脚本→node2上执行第1个脚本→node1上执行第2个脚本(执行成功后)→ node2上执行第2个脚本。 新打开一个终端,该脚本需要用root用户执行

如图,第1个脚本执行成功, 不要忘了在node2上也要执行第1个脚本

开始执行第2个脚本,时间较长,等待......

如图,最后看到“Configure ... succeeded” 则代表第2个脚本执行成功。 之后不要忘了在node2上也要执行第2个脚本。

两个节点的脚本都执行成功后,点OK

点Close,grid安装结束。

二:验证oracle clusterware的安装:

以grid身份运行以下命令: (node1 & node2都做一下验证) (1) 检查crs状态:

[grid@node1 ~]$ crsctl check crs

(2) 检查 Clusterware 资源: [grid@node1 ~]$ crs_stat -t

(3) 检查集群节点:

[grid@node1 ~]$ olsnodes -n

(4) 检查两个节点上的 Oracle TNS 监听器进程: [grid@node1 ~]$ srvctl status listener

(5) 确认针对 Oracle Clusterware 文件的 Oracle ASM 功能:

如果在 Oracle ASM 上安装了 OCR 和表决(仲裁)磁盘文件,则以 Grid Infrastructure 安装所有者的身份,使用下面的命令语法来确认当前正在运行已安装的 Oracle ASM: [grid@node1 ~]$ srvctl status asm -a

(6) 检查 Oracle 集群注册表 (OCR): [grid@node1 ~]$ ocrcheck

(7) 检查表决磁盘:

[grid@node1 ~]$ crsctl query css votedisk

验证工作结束,不要忘了在node2上也进行上述验证!

三:配置ASM,为数据和快速恢复区创建 ASM 磁盘组: (只在node1做) [root@node1 ~]# su - grid (配置ASM需要在grid用户下进行) [grid@node1 ~]$ asmca

点击Disk Groups选项卡,然后点下面的Create选项创建一个磁盘组

如图,设置磁盘组名为DATA,冗余模式选择External,选中DATA,点OK

正在创建,稍等

创建成功,点OK

创建成功后,可以在这里看到。(如果发现后面的MOUNTED是1of2,则选中该项,点下面的Mount All), 然后继续点Create创建闪回恢复区所需的磁盘组

如图,设置磁盘组名为FRA,模式选择External,选中FRA,点OK

本文来源:https://www.bwwdw.com/article/1kja.html

Top