搭建oracleRAC详解(裸设备)

  • A+
所属分类:Oracle

 

理清思路先

 

设备,一个笔记本,两台redhat5的虚拟机(32bit),两个虚拟机都安装过oracle,配置好一些安装的必要条件了,需要的包官网下。

 

1。选择2台主机,同平台的,保证网络互通

2。设计和配置ip地址,每台主机3个ip,配置2个,预留一个

私有IP:在独立的网段,双机内部通信???? 10.10.10.1

公有IP:维护的IP,在工作网段??????????????????????????? 192.168.1.11

虚IP:一定和公有IP在相同的网段,在crs启动后由oracle管理????????? 192.168.1.101

3。时间同步和双机对等关系(AB互相执行脚本,登录无缝)

4。配置iscsi存储,2个100m的,一个2g的

5。安装crs,验证:crs_stat -t

6。安装数据库的软件

7。建立并行的集群asm实例,dbca

8。建立磁盘组

9。建立集群数据库,在asm磁盘组

10。管理维护rac,配置网络,备份,恢复,建立表空间

 

 

 

1。2。配置网络

两台虚拟机,rac1? rac2

rac1:

rac1.ting.com

私有IP:10.10.58.1

公有IP:192.168.58.1

/etc/hosts

10.10.58.1??????? rac1

10.10.58.2??????? rac2

192.168.58.1?? rac1-priv

192.168.58.2?? rac2-priv

192.168.58.100??????? rac1-vip

192.168.58.200??????? rac2-vip

rac2:

rac2.ting.com

私有IP:10.10.58.2

公有IP:192.168.58.2

/etc/hosts

10.10.58.1??????? rac1

10.10.58.2??????? rac2

192.168.58.1?? rac1-priv

192.168.58.2?? rac2-priv

192.168.58.100??????? rac1-vip

192.168.58.200??????? rac2-vip

3。时间同步

rac1,rac2?? 打开time-stream服务???? /etc/xinet.d/time-stream

rac2

crontab -e

*/1 * * * * rdate -s 10.10.58.1

建立等效用户

rac1:

groupadd oinstall

groupadd dba

useradd -G oinstall -g dba oracle

passwd oracle

rac2:

groupadd oinstall

groupadd dba

useradd -G oinstall -g dba oracle

passwd oracle

双机对等

rac1:

su - oracle

[oracle@rac1 ~]$ mkdir ~/.ssh

[oracle@rac1 ~]$ chmod 700 ~/.ssh

[oracle@rac1 ~]$ ssh-keygen -t rsa

[oracle@rac1 ~]$ ssh-keygen -t dsa

rac2:

su - oracle

[oracle@rac2 ~]$ mkdir ~/.ssh

[oracle@rac2 ~]$ chmod 700 ~/.ssh

[oracle@rac2 ~]$ ssh-keygen -t rsa

[oracle@rac2 ~]$ ssh-keygen -t dsa

切换回 rac1,接着执行:

[oracle@raw1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[oracle@raw1 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

提示:下列命令会提示你输入 rac2 的 oracle 密码,按照提示输入即可,如果

失败可重新尝试执行命令。

Rac1 节点:

[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

Rac2 节点:

[oracle@rac2 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[oracle@rac2 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

[oracle@rac2 ~]$? scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys

4) 确保 2 个 node 都有相互的结点信息。两机相互执行。

[oracle@rac1 ~]$ ssh rac1 date

[oracle@rac1~]$ ssh rac2 date

[oracle@rac1 ~]$ ssh rac1-priv date

[oracle@rac1 ~]$ ssh rac2-priv date

切换至 rac2 执行

[oracle@rac2 ~]$ ssh rac1 date

[oracle@rac2~]$ ssh rac2 date

[oracle@rac2 ~]$ ssh rac1-priv date

[oracle@rac2 ~]$ ssh rac2-priv date

配置 hangcheck-timer 模块,2 个节点都要执行Hangcheck-timer 是 Linux 提供的一个内核级的 IO-Fencing 模块, 这个模块会监控 Linux 内核运行状态, 如果长时间挂起,

这个模块会自动重启系统。 这个模块在 Linux 内核空间运行, 不会受系统负载的影响。 这个模块会使用 CPU 的 Time Stamp Counter(TSC) 寄存器,这个寄存器的值会在每个时钟

周期自动增加, 因此使用的是硬件时间,所以精度更高。??? 配置这个模块需要 2 个参数: hangcheck_tick 和 hangcheck_margin。 hangcheck_tick 用于定义多长时间检查一次,缺省值是 30 秒。

有可能内核本身很忙, 导致这个检查被推迟, 该模块还允许定义一个延迟上限,就是 hangcheck_margin, 它的缺省值是 180 秒。??? Hangcheck-timer 模块会根据 hangcheck_tick 的设置,

定时检查内核。只要 2 次检查的时间间隔小于 hangcheck_tick + hangchec_margin, 都会认为内核运行正常,否则就意味着运行异常,这个模块会自动重启系统。CRS 本身还有一个 MissCount 参数,

可以通过 crsctl get css miscount 命令查看。

当 RAC 结点间的心跳信息丢失时, Clusterware 必须确保在进行重构时,故障结点确实是 Dead 状态,否则结点仅是临时负载过高导致心跳丢失,然后其他结点开始重构,但是结点没有重启,

这样会损坏数据库。 因此 MissCount 必须大于 hangcheck_tick+hangcheck_margin 的和。

 

1) 查看模块位置:

[root@rac1 ~]#? find /lib/modules -name "hangcheck-timer.ko"

/lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko

/lib/modules/2.6.18-164.el5xen/kernel/drivers/char/hangcheck-timer.ko

2) 配置系统启动时自动加载模块,在/etc/rc.d/rc.local 中添加如下内容

[root@rac1 ~]# modprobe hangcheck-timer

[root@rac1 ~]# vi /etc/rc.d/rc.local

modprobe hangcheck-timer

3) 配置 hangcheck-timer 参数, 在/etc/modprobe.conf 中添加如下内容:

[root@rac1 ~]# vi /etc/modprobe.conf

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

4) 确认模块加载成功:

[root@rac1 ~]# grep Hangcheck /var/log/messages | tail -2

Sep? 7 19:53:03 rac1 kernel: Hangcheck: starting hangcheck timer 0.9.

0 (tick is 180 seconds, margin is 60 seconds).

Sep? 7 19:53:03 rac1 kernel: Hangcheck: Using monotonic_clock().

 

 

4。配置iscsi

 

用本机作存储:

192.168.58.58

2个100m的,一个2g的

 

本机target端:

yum install scsi-target-utils

vim /etc/tgt/targets.conf

<target iqn.20111215.com.ting:server.sda5>

backing-store /dev/sda5

vendor_id sda5

product_id disk1_100m

</target>

<target iqn.20111215.com.ting:server.sda6>

backing-store /dev/sda6

vendor_id sda6

product_id disk2_100m

</target>

<target iqn.20111215.com.ting:server.sda7>

backing-store /dev/sda7

vendor_id sda7

product_id disk3_2G

</target>

 

服务:

chkconfig tgtd on

/etc/init.d/tgtd start

tgtadm --lld iscsi --mode target --op show??????????????? 并写入rc.local中

 

rac1:

yum install iscsi-initiator-utils

chkconfig iscsid on

chkconfig iscsi on

/etc/init.d/iscsid start

iscsiadm -m discovery -t st -p 192.168.58.58

/etc/init.d/iscsi start

fdisk -l??????????????? ---> 发现设备

vim /etc/udev/scripts/iscsidev.sh

----------------------------------------

#!/bin/bash

BUS=${1}

HOST=${BUS%%:*}

[ -e /sys/class/iscsi_host ] || exit 1

file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"

target_name=$(cat ${file})

if [ -z "${target_name}" ] ; then

exit 1

fi

echo "${target_name##*:}"

----------------------------------------

 

chmod +x /etc/udev/scripts/iscsidev.sh

 

vi /etc/udev/rules.d/55-openiscsi.rules? --服务器和客户端的该文件内容要一致!

-----------------------------------------------

KERNEL=="sd*",BUS=="scsi",PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c"

 

 

rac2:

yum install iscsi-initiator-utils

chkconfig iscsid on

chkconfig iscsi on

/etc/init.d/iscsid start

iscsiadm -m discovery -t st -p 192.168.58.58

/etc/init.d/iscsi start

fdisk -l??????????????? ---> 发现设备

vim /etc/udev/scripts/iscsidev.sh

----------------------------------------

#!/bin/bash

BUS=${1}

HOST=${BUS%%:*}

[ -e /sys/class/iscsi_host ] || exit 1

file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"

target_name=$(cat ${file})

if [ -z "${target_name}" ] ; then

exit 1

fi

echo "${target_name##*:}"

----------------------------------------

 

chmod +x /etc/udev/scripts/iscsidev.sh

 

vi /etc/udev/rules.d/55-openiscsi.rules? --服务器和客户端的该文件内容要一致!

-----------------------------------------------

KERNEL=="sd*",BUS=="scsi",PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c"

 

 

rac1:

分区:sdb1 sdc1 sdd1

partprobe /dev/sdb? /dev/sdc? /dev/sdd

vi /etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add", KERNEL=="sdd", RUN+="/bin/raw /dev/raw/raw3 %N"??????????????????????????????? ---->? 指定的是大的

KERNEL=="raw[1]", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw[2]", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw[3]", MODE="0660", GROUP="oinstall", OWNER="oracle"

start_udev

ls /dev/raw/????????????? ---> 有raw1,2,3

rac2:

分区:sdb1 sdc1 sdd1

partprobe /dev/sdb? /dev/sdc? /dev/sdd????????????????????????????????????????? ----->? rac1执行后,rac2也要执行

vi /etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="sdb", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add", KERNEL=="sdd", RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add", KERNEL=="sdc", RUN+="/bin/raw /dev/raw/raw3 %N"

KERNEL=="raw[1]", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw[2]", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw[3]", MODE="0660", GROUP="oinstall", OWNER="oracle"

start_udev

ls /dev/raw/????????????? ---> 有raw1,2,3

 

 

注意:解决节点无法关机

 

target端:

vim /etc/tgt/targets.conf

<target iqn.20111216.com.ting:server.sda5>

backing-store /dev/sda5

vendor_id? sda5

write-cache off

</target>

 

强制关:

tgt-admin --update ALL --force

 

 

 

设置环境变量:

rac1:

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01

chmod -R 777 /u01

vim /etc/sysctl.conf

net.core.rmem_default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_max = 262144

kernel.shmall = 131072000

kernel.shmmax = 544288000 -官网提供的 524288000. 这个值小了。检查时通不过

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

sysctl -p

设置用户资源限制,2 个节点都要执行

vi /etc/sysconfig/limits.conf

oracle soft memlock 5242880

oracle hard memlock 524280

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 65536

oracle hard nofile 65536

将下面一行添加到/etc/pam.d/login 文件中:

session required /lib/security/pam_limits.so

在每个 node 上配置 Oracle 的 profile 文件

vim .bash_profile

export PATH

unset USERNAME

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db

export ORA_CRS_HOME=$ORACLE_BASE/product/crs

export NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_SID=rac1

export ORACLE_TERM=xterm

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export PATH=$CRS_HOME/bin:$ORACLE_HOME/bin:$PATH

 

 

 

 

软件包检查

for i in binutils compat-gcc-34 compat-libstdc++-296 control-center \

gcc gcc-c++ glibc glibc-common glibc-devel libaio libgcc \

libstdc++ libstdc++-devel libXp make openmotif22 setarch

do

rpm -q $i &>/dev/null || F="$F $i"

done ;echo $F;unset F

 

rac2:

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01

chmod -R 777 /u01

vim /etc/sysctl.conf

net.core.rmem_default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_max = 262144

kernel.shmall = 131072000

kernel.shmmax = 544288000 -官网提供的 524288000. 这个值小了。检查时通不过

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

sysctl -p

设置用户资源限制,2 个节点都要执行

vi /etc/sysconfig/limits.conf

oracle soft memlock 5242880

oracle hard memlock 524280

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 65536

oracle hard nofile 65536

将下面一行添加到/etc/pam.d/login 文件中:

session required /lib/security/pam_limits.so

在每个 node 上配置 Oracle 的 profile 文件

vim .bash_profile

export PATH

unset USERNAME

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db

export ORA_CRS_HOME=$ORACLE_BASE/product/crs

export NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_SID=rac2

export ORACLE_TERM=xterm

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export PATH=$CRS_HOME/bin:$ORACLE_HOME/bin:$PATH

 

 

软件包检查

for i in binutils compat-gcc-34 compat-libstdc++-296 control-center \

gcc gcc-c++ glibc glibc-common glibc-devel libaio libgcc \

libstdc++ libstdc++-devel libXp make openmotif22 setarch

do

rpm -q $i &>/dev/null || F="$F $i"

done ;echo $F;unset F

 

 

5。安装crs,验证:crs_stat -t

使用CVU校验集群安装可行性:(要在两个节点上都通过)

 

1>

rac1作验证:

su - oracle

/home/oracle/clusterware/cluvfy/runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

 

如果报错如下:

执行 群集服务设置 的预检查

 

正在检查节点的可访问性...

rac1.ting.com: rac1.ting.com

 

检查: 节点 "null" 的节点可访问性

目标节点????????????????????????????????? 是否可访问?

------------------------------------? ------------------------

rac2????????????????????????????????? 否

rac1????????????????????????????????? 否

结果:节点 "null" 的节点可访问性检查失败。

 

 

ERROR:

无法访问任何节点。

验证无法继续。

 

在所有节点上预检查 群集服务设置 失败。

 

修改:hostname 和 /etc/hosts中主机名一致

 

找相对应的不通过原因修正

 

同样rac2也作验证:

 

2>

rac1:

/home/oracle/clusterware/runInstaller.sh

注意:修改程序安装路径db_1 ==> crs_1

如果:报错缺少模块就安装模块

界面显示不正常,安装:ttfonts-zh_CN-2.14-6.noarch

图形安装:添加???? rac2?? 添加裸设备

 

提示要执行脚本时:

先更改:

/home/oracle/oracle/product/10.2.0/crs/bin/vipca

在123行 fi 后新添加一行:

unset LD_ASSUME_KERNEL

/home/oracle/oracle/product/10.2.0/crs/bin/srvctl

在export LD_ASSUME_KERNEL这一行后加

unset LD_ASSUME_KERNEL

执行:提示的两个脚本:

/home/oracle/oraInventory/orainstRoot.sh

/home/oracle/oracle/product/10.2.0/crs/root.sh

 

在最后一个节点运行root.sh如果出现下面错误,请按下面蓝色字体部分解决!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Running vipca(silent) for configuring nodeapps

Error 0(Native: listNetInterfaces:[3])

[Error 0(Native: listNetInterfaces:[3])]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上纯属自己按文档搭建的,可能中间可能会遇到我没有碰到的问题,希望多多提提哦~~~~

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论


目前评论:3   其中:访客  3   博主  0

    • 小杨 9

      这个文档写的一点都不细致啊,我粗略的看啦,感觉不容易看懂啊,不是尔等能领悟的啊

        • 邓贇 7

          @小杨 退群的小杨?

            • 小杨 9

              @邓贇 是啊,时时彩计划软件公式:株洲-小杨