搭建RHCS+Oracle高可用集群

本文详细介绍了在RHEL5.864bit环境下,通过配置YUM源、安装Cluster包、实现iscsi存储、安装与配置Oracle数据库、部署集群服务等步骤,完成Oracle数据库的集群部署与管理过程。
OS:RHEL 5.8 64bit
DB:Oracle 11.2.0.4

两节点双网卡,一个Public,一个连IP SAN存储

点击(此处)折叠或打开

  1. [root@node1 ~]# cat /etc/hosts
  2. # Do not remove the following line, or various programs
  3. # that require network functionality will fail.
  4. 127.0.0.1 localhost.localdomain localhost
  5. ::1 localhost6.localdomain6 localhost6
  6. 192.168.217.11 node1.demo.com node1
  7. 192.168.217.12 node2.demo.com node2
配置YUM

点击(此处)折叠或打开

  1. [root@node1 ~]# cat /etc/yum.repos.d/cdrom.repo
  2. [rhel-cdrom]
  3. name=Red Hat Enterprise Linux $releasever - $basearch - Debug
  4. baseurl=file:///mnt/cdrom/Server
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

  8. [Cluster]
  9. name=RHEL5 ISO Cluster
  10. baseurl=file:///mnt/cdrom/Cluster
  11. enabled=1
  12. gpgcheck=0
YUM安装Cluster包

点击(此处)折叠或打开

  1. yum -y install cman rgmanager system-config-cluster luci ricci

安装Oracle,不安装Database,两节点都在各自的文件系统上安装



配置iscsi,不要在/etc/fstab上添加条目。
http://blog.itpub.net/22621861/viewspace-1357900/

在两个节点上分别netca分别创建监听器

创建DB

在其中一个节点上配置共享磁盘,包括分区,创建文件系统,并在其上用DBCA创建DB。

在另一节点上复制文件并创建目录,否则在这一节点上无法正常启动数据库


点击(此处)折叠或打开

  1. [oracle@node1 ~]$ cd $ORACLE_HOME/dbs
  2. [oracle@node1 dbs]$ ls
  3. hc_rhcsdb.dat init.ora lkRHCSDB orapwrhcsdb spfilerhcsdb.ora
  4. [oracle@node1 dbs]$ scp * node2:$ORACLE_HOME/dbs
并创建audit_file_dest和各种dump目录,并配置正确的owner和权限。

配置Oracle启停脚本。

vi /etc/init.d/dbora


点击(此处)折叠或打开

  1. #!/bin/bash
  2. #
  3. # /etc/init.d/dbora
  4. #
  5. # chkconfig: 2345 02 98
  6. # description: oracle is meant to run under Linux Oracle Server
  7. # Source function library.
  8. . /etc/rc.d/init.d/functions
  9.  
  10. ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
  11. ORACLE_SID=rhcsdb
  12. ORACLE_NAME=oracle
  13. LOCKFILE="$ORACLE_HOME/.oracle.lock"
  14. RESTART_RETRIES=3
  15. DB_PROCNAMES="pmon"
  16. LSNR_PROCNAME="tnslsnr"
  17.  
  18. #RETVAL=0
  19. #Start the oracle Server
  20.  
  21. #The following command assumes that the oracle login will not prompt the password
  22. start() {
  23.  
  24.         echo "Starting Oracle10g Server... "
  25.         tmpfile=/home/oracle/`basename $0`-start.$$
  26.         logfile=/home/oracle/`basename $0`-start.log
  27.         #
  28.         # Set up our sqlplus script. Basically, we're trying to
  29.         # capture output in the hopes that it's useful in the case
  30.         # that something doesn't work properly.
  31.         #
  32.         echo "startup" > $tmpfile
  33.         echo "quit" >> $tmpfile
  34.  
  35.         su - $ORACLE_NAME -c "sqlplus \"/ as sysdba\" < $tmpfile &> $logfile"
  36.         if [ $? -ne 0 ]; then
  37.                 echo "ORACLE_HOME Incorrectly set?"
  38.                 echo "See $logfile for more information."
  39.                 return 1
  40.         fi
  41.  
  42.         #
  43.         # If we see:
  44.         # ORA-.....: failure, we failed
  45.         #
  46.         rm -f $tmpfile
  47.         grep -q "failure" $logfile
  48.         if [ $? -eq 0 ]; then
  49.                 rm -f $tmpfile
  50.                 echo "ORACLE_SID Incorrectly set?"
  51.                 echo "See $logfile for more information."
  52.                 return 1
  53.         fi
  54.  
  55.          echo "Starting listener..."
  56.          ((su - $ORACLE_NAME -c "$ORACLE_HOME/bin/lsnrctl start") >> $logfile
  57. 2>&1) || return 1
  58.          #return $?
  59.         if [ -n "$LOCKFILE" ]; then
  60.                 touch $LOCKFILE
  61.         fi
  62. #/usr/local/tomcat/bin/catalina.sh start
  63.         return 0
  64. }
  65.  
  66. stop() {
  67.         echo "Shutting down Oracle10g Server..."
  68.  
  69.         declare tmpfile
  70.         declare logfile
  71.  
  72.         tmpfile=/home/oracle/`basename $0`-stop.$$
  73.         logfile=/home/oracle/`basename $0`-stop.log
  74.         if [ -z "$LOCKFILE" ] || [ -f $LOCKFILE ]; then
  75.           echo
  76.          else
  77.           echo "oracle is not run"
  78.           return 0
  79.         fi
  80.  
  81.         # Setup for Stop ...
  82.         echo "shutdown abort" > $tmpfile
  83.         echo "quit" >> $tmpfile
  84.  
  85.         su - $ORACLE_NAME -c "sqlplus \"/ as sysdba\" < $tmpfile &> $logfile"
  86.         if [ $? -ne 0 ]; then
  87.                 echo "ORACLE_HOME Incorrectly set?"
  88.                 echo "See $logfile for more information."
  89.                 return 1
  90.         fi
  91.  
  92.         #
  93.         # If we see 'failure' in the log, we're done.
  94.         #
  95.         rm -f $tmpfile
  96.         grep -q failure $logfile
  97.         if [ $? -eq 0 ]; then
  98.                 echo
  99.                 echo "Possible reason: ORACLE_SID Incorrectly set."
  100.                 echo "See $logfile for more information."
  101.                 return 1
  102.         fi
  103.  
  104.         status $LSNR_PROCNAME
  105.         if [ $? -ne 0 ] ; then
  106.           if [ -n "$LOCKFILE" ]; then
  107.              rm -f $LOCKFILE
  108.           fi
  109.              return 0 # Listener is not running
  110.         fi
  111.  
  112.         ((su - $ORACLE_NAME -c "$ORACLE_HOME/bin/lsnrctl stop") >> $logfile
  113. 2>&1) || return 1
  114.  
  115.         if [ -n "$LOCKFILE" ]; then
  116.              rm -f $LOCKFILE
  117.         fi
  118.         return 0
  119. }
  120.  
  121. get_lsnr_status()
  122. {
  123.         declare -i subsys_lock=$1
  124.  
  125.         status $LSNR_PROCNAME
  126.         if [ $? == 0 ] ; then
  127.                 return 0 # Listener is running fine
  128.         elif [ $subsys_lock -ne 0 ]; then
  129.                 return 3
  130.         elif [ $? -ne 0 ] ; then
  131.                return 1
  132.         fi
  133. }
  134.  
  135. get_db_status()
  136. {
  137.         declare -i subsys_lock=$1
  138.         declare -i i=0
  139.         declare -i rv=0
  140.         declare ora_procname
  141.  
  142.         for procname in $DB_PROCNAMES ; do
  143.  
  144.                 ora_procname="ora_${procname}_${ORACLE_SID}"
  145.  
  146.                 status $ora_procname
  147.                 if [ $? -eq 0 ] ; then
  148.                         # This one's okay; go to the next one.
  149.                         continue
  150.                 elif [ $subsys_lock -ne 0 ]; then
  151.                         return 3
  152.                 elif [ $? -ne 0 ] ; then
  153.                         return 1
  154.                 fi
  155.  
  156.         done
  157. }
  158.  
  159. update_status()
  160. {
  161.         declare -i old_status=$1
  162.         declare -i new_status=$2
  163.  
  164.         if [ -z "$2" ]; then
  165.                 return $old_status
  166.         fi
  167.  
  168.         if [ $old_status -ne $new_status ]; then
  169.                 return 1
  170.         fi
  171.         return $old_status
  172. }
  173. status_ias()
  174. {
  175.         declare -i subsys_lock=1
  176.         declare -i last
  177.         #
  178.         # Check for lock file. Crude and rudimentary, but it works
  179.         #
  180.         if [ -z "$LOCKFILE" ] || [ -f $LOCKFILE ]; then
  181.                 subsys_lock=0
  182.         fi
  183.  
  184.         # Check database status
  185.         get_db_status $subsys_lock
  186.         update_status $? # Start
  187.         last=$?
  188.  
  189.         # Check & report listener status
  190.         get_lsnr_status $subsys_lock
  191.         update_status $? $last
  192.         last=$?
  193.  
  194.         # Check & report opmn / opmn-managed process status
  195.         #get_opmn_status $subsys_lock
  196.         #update_status $? $last
  197.         #last=$?
  198.  
  199.         #
  200.         # No lock file, but everything's running. Put the lock
  201.         # file back. XXX - this kosher?
  202.         #
  203.         if [ $last -eq 0 ] && [ $subsys_lock -ne 0 ]; then
  204.                 touch $LOCKFILE
  205.         fi
  206.         return $last
  207. }
  208.  
  209. restart() {
  210.          echo -n "Restart Oracle10g Server"
  211.            stop
  212.              start
  213. echo
  214. }
  215.  
  216. case "$1" in
  217. start)
  218.     start
  219.     exit $?
  220.     ;;
  221. stop)
  222.      stop
  223.     exit $?
  224. ;;
  225. status)
  226.     status_ias
  227.     exit $?
  228. ;;
  229. restart|reload)
  230.     stop
  231.     start
  232. ;;
  233. *)
  234. echo "Usage: $0 {start|stop|reload|restart|status}"
  235. exit 1
  236. ;;
  237. esac
  238. exit 0
这是可以用该脚本分别在两节点测试效果。


进入system-config-cluster配置集群

参考:
http://book.51cto.com/art/201006/206590.htm

注意:文件系统资源要用分区名/dev/sdc1,不是/dev/sdc



服务的资源顺序和附属关系如下图,否则经测试浮动IP无法正常启动




配置完成后,点右上角"Send to Cluster“,分发到全部集群节点。或复制/etc/cluster/cluster.conf到其他节点相同路径下。

启动集群服务(两节点)

点击(此处)折叠或打开

  1. service cman start
  2. service rgmanager start
  3. chkconfig cman on
  4. chkconfig rgmanager on
可以使用system-config-cluster管理集群。




检查浮动IP


点击(此处)折叠或打开

  1. [root@node2 ~]# ip addr list
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 scope host lo
  5.     inet6 ::1/128 scope host
  6.        valid_lft forever preferred_lft forever
  7. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  8.     link/ether 00:0c:29:84:35:a2 brd ff:ff:ff:ff:ff:ff
  9.     inet 192.168.217.12/24 brd 192.168.217.255 scope global eth0
  10.     inet 192.168.217.13/24 scope global secondary eth0
  11.     inet6 fe80::20c:29ff:fe84:35a2/64 scope link
  12.        valid_lft forever preferred_lft forever
  13. 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  14.     link/ether 00:0c:29:84:35:ac brd ff:ff:ff:ff:ff:ff
  15.     inet 192.168.135.12/24 brd 192.168.135.255 scope global eth1
  16.     inet6 fe80::20c:29ff:fe84:35ac/64 scope link
  17.        valid_lft forever preferred_lft forever
  18. 4: sit0: <NOARP> mtu 1480 qdisc noop
  19.     link/sit 0.0.0.0 brd 0.0.0.0









来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22621861/viewspace-1772904/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22621861/viewspace-1772904/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值