搭建oracleRAC详解(裸设备)

为什么80%的码农都做不了架构师?>>>   hot3.png

  理清思路先   设备,一个笔记本,两台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 backing-store /dev/sda5 vendor_id sda5 product_id disk1_100m backing-store /dev/sda6 vendor_id sda6 product_id disk2_100m backing-store /dev/sda7 vendor_id sda7 product_id disk3_2G   服务: 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 backing-store /dev/sda5 vendor_id  sda5 write-cache off   强制关: 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])] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上纯属自己按文档搭建的,可能中间可能会遇到我没有碰到的问题,希望多多提提哦~~~~

转载于:https://my.oschina.net/766/blog/210920

你可能感兴趣的:(数据库,开发工具,运维)