Monday, October 13, 2014

OBIEE 11g High Availability Active/Passive Architecture Implementation


Introduction 

We have successfully implemented Active/Passive Topology design for OBIEE 11g application. 

Software/OS version used: 

OBIEE 11g 111.1.1.5.0 (single instance database 11.2.0.3.0) running on top of Oracle 11g 11.2.0.3.0 CRS (aka integrated with GNS/DHCP/dynamic SCAN configuration). Linux : RHEL 5.6 and SAN storage used. 

Technical briefing: 
1. Used 2 shared storage devices : 1 for ASM(Vote/OCR) and 1 for OBIEE fusion middleware
2. 2 Virtual IP used – 1 for database listener and 1 for OBIEE  application.
3. 2 hosts used – in first host (say OMIPRI) database will be actively running and OBIEE will be in standby mode. In 2nd host(OMISEC), OBIEE will be active and Database will be in standby mode.
So if  OMIPRI crashes, Database will move to OIMSEC or if OMISEC crashes, OBIEE will migrate to OMIPRI. So in net , at any point in time, OBIEE application will be active.
All the 3 (A,B and C) managed via CRS.

4.OBIEEVIP, Database VIP, GNS, SCAN addresses resolved via DNS. This configuration supports both HA and scaling. When both nodes up and running, HA is 100% and it drops to 0% HA when there is only one node  is active at any point in time.





When both nodes are active: Database running on OIMPRI and OBIEE running on OIMSEC
----------------------------------------------------------------------------------

[root@oimpri ~]# ps -ef|grep tns
oracle    5707     1  0 09:31 ?        00:00:00 /dbfiles/app/oracle/product/11.2.0/db/bin/tnslsnr LISTENER -inherit
oracle    6047     1  0 09:32 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN2 -inherit
oracle    6076     1  0 09:32 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN3 -inherit
root      9999 26162  0 11:22 pts/4    00:00:00 grep tns
[root@oimpri ~]# ps -ef|grep pmon
oracle    4892     1  0 09:29 ?        00:00:00 asm_pmon_+ASM1
oracle    5987     1  0 09:32 ?        00:00:00 ora_pmon_oimap
root     10001 26162  0 11:22 pts/4    00:00:00 grep pmon
[root@oimpri ~]#

Name                         Type                Target     State
-----------------------------------------------------------------------------------
ora.scan2.vip                Other               ONLINE     ONLINE on oimpri
ora.oimsec.vip               Other               ONLINE     ONLINE on oimsec
ora.LISTENER_SCAN3.lsnr      Other               ONLINE     ONLINE on oimpri
ora.oc4j                     Other               ONLINE     ONLINE on oimpri
ora.gsd                      Other               OFFLINE    OFFLINE
ora.asdb.cfcdb               Database Instance   ONLINE     OFFLINE
ora.oimsec.ASM2.asm          Other               ONLINE     ONLINE on oimsec
ora.asdblsnr.cfcdblsnr       Database Listener   ONLINE     ONLINE on oimpri
ora.obieevip.cfcvip          Virtual IP          ONLINE     ONLINE on oimsec
ora.LISTENER_SCAN2.lsnr      Other               ONLINE     ONLINE on oimpri
ora.obieeserver1.cfcas       Opmn Instance       ONLINE     ONLINE on oimsec
ora.oimap.db                 Other               ONLINE     ONLINE on oimpri
ora.obieeserver.cfcas        WebLogic Domain     ONLINE     ONLINE on oimsec
ora.oimsec.gsd               Other               OFFLINE    OFFLINE
ora.LISTENER_SCAN1.lsnr      Other               ONLINE     ONLINE on oimsec
ora.dbvip.cfcvip             Virtual IP          ONLINE     ONLINE on oimpri
ora.gns.vip                  Other               ONLINE     ONLINE on oimpri
ora.oimpri.ons               Other               ONLINE     ONLINE on oimpri
ora.asm                      Other               ONLINE     ONLINE on oimpri
ora.gns                      Other               ONLINE     ONLINE on oimpri
ora.DATA.dg                  Other               ONLINE     ONLINE on oimpri
ora.net1.network             Other               ONLINE     ONLINE on oimpri
ora.cvu                      Other               ONLINE     ONLINE on oimpri
ora.oimsec.ons               Other               ONLINE     OFFLINE
ora.scan3.vip                Other               ONLINE     ONLINE on oimpri
ora.scan1.vip                Other               ONLINE     ONLINE on oimsec
ora.dbdisk.cfcdisk           Shared Disk         ONLINE     ONLINE on oimpri
ora.registry.acfs            Other               ONLINE     ONLINE on oimpri
ora.ons                      Other               ONLINE     ONLINE on oimpri
ora.obieedisk.cfcdisk        Shared Disk         ONLINE     ONLINE on oimsec
ora.oimpri.ASM1.asm          Other               ONLINE     ONLINE on oimpri
ora.oimpri.vip               Other               ONLINE     ONLINE on oimpri
ora.oimpri.gsd               Other               OFFLINE    OFFLINE

  1* select username,machine,count(*) from v$session where username is not null group by username,machine
SQL> /

USERNAME                       MACHINE                                                            COUNT(*)
------------------------------ ---------------------------------------------------------------- ----------
SYS                            oimpri                                                                    5
DEV_MDS                        oimsec                                                                    16


SQL>




After the Database node (OIMPRI) crash: Database switched to OIMSEC. Now both database and OBIEE running on the same node: OIMSEC
-------------------------------------------------------------------------------------------------


On OIMSEC Node After the Database Failover:


[oracle@oimsec bin]$ ps -ef|grep  tns
oracle     775     1  0 08:13 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
oracle    1058     1  0 08:13 ?        00:00:00 /dbfiles/app/oracle/product/11.2.0/db/bin/tnslsnr LISTENER -inherit
oracle   16112     1  0 07:45 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN3 -inherit
oracle   16121     1  0 07:45 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN2 -inherit

[oracle@oimsec bin]$ ps -ef|grep pmon
oracle    1279     1  0 08:13 ?        00:00:00 ora_pmon_oimap
oracle    4742     1  0 07:04 ?        00:00:00 asm_pmon_+ASM2

Name                         Type                Target     State
-----------------------------------------------------------------------------------
ora.scan2.vip                Other               ONLINE     ONLINE on oimsec
ora.oimsec.vip               Other               ONLINE     ONLINE on oimsec
ora.LISTENER_SCAN3.lsnr      Other               ONLINE     ONLINE on oimsec
ora.oc4j                     Other               ONLINE     ONLINE on oimsec
ora.gsd                      Other               OFFLINE    OFFLINE
ora.asdb.cfcdb               Database Instance   ONLINE     ONLINE on oimsec
ora.oimsec.ASM2.asm          Other               ONLINE     ONLINE on oimsec
ora.asdblsnr.cfcdblsnr       Database Listener   ONLINE     ONLINE on oimsec
ora.obieevip.cfcvip          Virtual IP          ONLINE     ONLINE on oimsec
ora.LISTENER_SCAN2.lsnr      Other               ONLINE     ONLINE on oimsec
ora.obieeserver1.cfcas       Opmn Instance       ONLINE     ONLINE on oimsec
ora.oimap.db                 Other               ONLINE     OFFLINE
ora.obieeserver.cfcas        WebLogic Domain     ONLINE     ONLINE on oimsec
ora.oimsec.gsd               Other               OFFLINE    OFFLINE
ora.LISTENER_SCAN1.lsnr      Other               ONLINE     ONLINE on oimsec
ora.dbvip.cfcvip             Virtual IP          ONLINE     ONLINE on oimsec
ora.gns.vip                  Other               ONLINE     ONLINE on oimsec
ora.asm                      Other               ONLINE     ONLINE on oimsec
ora.gns                      Other               ONLINE     ONLINE on oimsec
ora.DATA.dg                  Other               ONLINE     ONLINE on oimsec
ora.net1.network             Other               ONLINE     ONLINE on oimsec
ora.cvu                      Other               ONLINE     ONLINE on oimsec
ora.oimsec.ons               Other               ONLINE     ONLINE on oimsec
ora.scan3.vip                Other               ONLINE     ONLINE on oimsec
ora.scan1.vip                Other               ONLINE     ONLINE on oimsec
ora.dbdisk.cfcdisk           Shared Disk         ONLINE     ONLINE on oimsec
ora.registry.acfs            Other               ONLINE     ONLINE on oimsec
ora.ons                      Other               ONLINE     ONLINE on oimsec
ora.obieedisk.cfcdisk        Shared Disk         ONLINE     ONLINE on oimsec
ora.oimpri.vip               Other               ONLINE     ONLINE on oimsec

 1* select username,machine,count(*) from v$session where username is not null group by username,machine
SQL> /

USERNAME                       MACHINE                                                            COUNT(*)
------------------------------ ---------------------------------------------------------------- ----------
SYS                                     oimpri                                                                    5
DEV_MDS                        oimsec                                                                    4






After the OBIEE node (OIMSEC) crash: OBIEE and Database switched to OIMPRI. OMIPRI is already up without any servicing running.
-------------------------------------------------------------------------------------------------

On oimpri Node After the Database Failover:


[oracle@oimpri bin]$ ps -ef|grep  tns
oracle     775     1  0 08:13 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
oracle    1058     1  0 08:13 ?        00:00:00 /dbfiles/app/oracle/product/11.2.0/db/bin/tnslsnr LISTENER -inherit
oracle   16112     1  0 07:45 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN3 -inherit
oracle   16121     1  0 07:45 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN2 -inherit

[oracle@oimpri bin]$ ps -ef|grep pmon
oracle    1279     1  0 08:13 ?        00:00:00 ora_pmon_oimap
oracle    4742     1  0 07:04 ?        00:00:00 asm_pmon_+ASM2

Name                         Type                Target     State
-----------------------------------------------------------------------------------
ora.scan2.vip                Other               ONLINE     ONLINE on oimpri
ora.oimpri.vip               Other               ONLINE     ONLINE on oimpri
ora.LISTENER_SCAN3.lsnr      Other               ONLINE     ONLINE on oimpri
ora.oc4j                     Other               ONLINE     ONLINE on oimpri
ora.gsd                      Other               OFFLINE    OFFLINE
ora.asdb.cfcdb               Database Instance   ONLINE     ONLINE on oimpri
ora.oimpri.ASM2.asm          Other               ONLINE     ONLINE on oimpri
ora.asdblsnr.cfcdblsnr       Database Listener   ONLINE     ONLINE on oimpri
ora.obieevip.cfcvip          Virtual IP          ONLINE     ONLINE on oimpri
ora.LISTENER_SCAN2.lsnr      Other               ONLINE     ONLINE on oimpri
ora.obieeserver1.cfcas       Opmn Instance       ONLINE     ONLINE on oimpri
ora.oimap.db                 Other               ONLINE     OFFLINE
ora.obieeserver.cfcas        WebLogic Domain     ONLINE     ONLINE on oimpri
ora.oimpri.gsd               Other               OFFLINE    OFFLINE
ora.LISTENER_SCAN1.lsnr      Other               ONLINE     ONLINE on oimpri
ora.dbvip.cfcvip             Virtual IP          ONLINE     ONLINE on oimpri
ora.gns.vip                  Other               ONLINE     ONLINE on oimpri
ora.asm                      Other               ONLINE     ONLINE on oimpri
ora.gns                      Other               ONLINE     ONLINE on oimpri
ora.DATA.dg                  Other               ONLINE     ONLINE on oimpri
ora.net1.network             Other               ONLINE     ONLINE on oimpri
ora.cvu                      Other               ONLINE     ONLINE on oimpri
ora.oimpri.ons               Other               ONLINE     ONLINE on oimpri
ora.scan3.vip                Other               ONLINE     ONLINE on oimpri
ora.scan1.vip                Other               ONLINE     ONLINE on oimpri
ora.dbdisk.cfcdisk           Shared Disk         ONLINE     ONLINE on oimpri
ora.registry.acfs            Other               ONLINE     ONLINE on oimpri
ora.ons                      Other               ONLINE     ONLINE on oimpri
ora.obieedisk.cfcdisk        Shared Disk         ONLINE     ONLINE on oimpri
ora.oimpri.vip               Other               ONLINE     ONLINE on oimpri

 1* select username,machine,count(*) from v$session where username is not null group by username,machine
SQL> /

USERNAME                       MACHINE                                                            COUNT(*)
------------------------------ ---------------------------------------------------------------- ----------
SYS                                   oimpri                                                                    5
DEV_MDS                        oimpri                                                                    7




Maintenance o OMISEC is completed, so that OBIEE resources manually switched to OIMSEC
---------------------------------------------------------------------------------------

[root@oimpri ~]# ps -ef|grep tns
oracle    5707     1  0 09:31 ?        00:00:00 /dbfiles/app/oracle/product/11.2.0/db/bin/tnslsnr LISTENER -inherit
oracle    6047     1  0 09:32 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN2 -inherit
oracle    6076     1  0 09:32 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN3 -inherit
root      9999 26162  0 11:22 pts/4    00:00:00 grep tns
[root@oimpri ~]# ps -ef|grep pmon
oracle    4892     1  0 09:29 ?        00:00:00 asm_pmon_+ASM1
oracle    5987     1  0 09:32 ?        00:00:00 ora_pmon_oimap
root     10001 26162  0 11:22 pts/4    00:00:00 grep pmon
[root@oimpri ~]#

Name                         Type                Target     State
-----------------------------------------------------------------------------------
ora.scan2.vip                Other               ONLINE     ONLINE on oimpri
ora.oimsec.vip               Other               ONLINE     ONLINE on oimsec
ora.LISTENER_SCAN3.lsnr      Other               ONLINE     ONLINE on oimpri
ora.oc4j                     Other               ONLINE     ONLINE on oimpri
ora.gsd                      Other               OFFLINE    OFFLINE
ora.asdb.cfcdb               Database Instance   ONLINE     OFFLINE
ora.oimsec.ASM2.asm          Other               ONLINE     ONLINE on oimsec
ora.asdblsnr.cfcdblsnr       Database Listener   ONLINE     ONLINE on oimpri
ora.obieevip.cfcvip          Virtual IP          ONLINE     ONLINE on oimsec
ora.LISTENER_SCAN2.lsnr      Other               ONLINE     ONLINE on oimpri
ora.obieeserver1.cfcas       Opmn Instance       ONLINE     ONLINE on oimsec
ora.oimap.db                 Other               ONLINE     ONLINE on oimpri
ora.obieeserver.cfcas        WebLogic Domain     ONLINE     ONLINE on oimsec
ora.oimsec.gsd               Other               OFFLINE    OFFLINE
ora.LISTENER_SCAN1.lsnr      Other               ONLINE     ONLINE on oimsec
ora.dbvip.cfcvip             Virtual IP          ONLINE     ONLINE on oimpri
ora.gns.vip                  Other               ONLINE     ONLINE on oimpri
ora.oimpri.ons               Other               ONLINE     ONLINE on oimpri
ora.asm                      Other               ONLINE     ONLINE on oimpri
ora.gns                      Other               ONLINE     ONLINE on oimpri
ora.DATA.dg                  Other               ONLINE     ONLINE on oimpri
ora.net1.network             Other               ONLINE     ONLINE on oimpri
ora.cvu                      Other               ONLINE     ONLINE on oimpri
ora.oimsec.ons               Other               ONLINE     OFFLINE
ora.scan3.vip                Other               ONLINE     ONLINE on oimpri
ora.scan1.vip                Other               ONLINE     ONLINE on oimsec
ora.dbdisk.cfcdisk           Shared Disk         ONLINE     ONLINE on oimpri
ora.registry.acfs            Other               ONLINE     ONLINE on oimpri
ora.ons                      Other               ONLINE     ONLINE on oimpri
ora.obieedisk.cfcdisk        Shared Disk         ONLINE     ONLINE on oimsec
ora.oimpri.ASM1.asm          Other               ONLINE     ONLINE on oimpri
ora.oimpri.vip               Other               ONLINE     ONLINE on oimpri
ora.oimpri.gsd               Other               OFFLINE    OFFLINE

  1* select username,machine,count(*) from v$session where username is not null group by username,machine
SQL> /

USERNAME                       MACHINE                                                            COUNT(*)
------------------------------ ---------------------------------------------------------------- ----------
SYS                                    oimpri                                                                    5
DEV_MDS                        oimsec                                                                    3




All resource dependency trees
-------------------------------------------------

  ora.scan2.vip
  ora.oimsec.vip
  ora.LISTENER_SCAN3.lsnr
  ora.oc4j
  ora.gsd
  ora.asdb.cfcdb
    |
    +->ora.asdblsnr.cfcdblsnr
    |    |
    |    +->ora.dbvip.cfcvip
    |    |
    |    +->ora.dbdisk.cfcdisk
    |
    +->ora.dbdisk.cfcdisk
  ora.oimsec.ASM2.asm
  ora.LISTENER_SCAN2.lsnr
  ora.obieeserver1.cfcas
    |
    +->ora.obieevip.cfcvip
    |
    +->ora.obieedisk.cfcdisk
  ora.oimap.db
  ora.obieeserver.cfcas
    |
    +->ora.obieevip.cfcvip
    |
    +->ora.obieedisk.cfcdisk
  ora.oimsec.gsd
  ora.LISTENER_SCAN1.lsnr
  ora.gns.vip
  ora.asm
  ora.gns
  ora.DATA.dg
  ora.net1.network
  ora.cvu
  ora.oimsec.ons
  ora.scan3.vip
  ora.scan1.vip
  ora.registry.acfs
  ora.ons
  ora.oimpri.vip


Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       oimpri
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       oimsec
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       oimsec
ora.asdb.cfcdb
      1        ONLINE  ONLINE       oimsec
ora.asdblsnr.cfcdblsnr
      1        ONLINE  ONLINE       oimsec
ora.cvu
      1        ONLINE  ONLINE       oimsec
ora.dbdisk.cfcdisk
      1        ONLINE  ONLINE       oimsec
ora.dbvip.cfcvip
      1        ONLINE  ONLINE       oimsec
ora.gns
      1        ONLINE  ONLINE       oimsec
ora.gns.vip
      1        ONLINE  ONLINE       oimsec
ora.obieedisk.cfcdisk
      1        ONLINE  ONLINE       oimsec
ora.obieeserver.cfcas
      1        ONLINE  ONLINE       oimsec
ora.obieeserver1.cfcas
      1        ONLINE  OFFLINE
ora.obieevip.cfcvip
      1        ONLINE  ONLINE       oimsec
ora.oc4j
      1        ONLINE  ONLINE       oimsec
ora.oimap.db
      1        ONLINE  OFFLINE
ora.oimpri.vip
      1        ONLINE  ONLINE       oimpri
ora.oimsec.vip
      1        ONLINE  ONLINE       oimsec
ora.scan1.vip
      1        ONLINE  ONLINE       oimpri
ora.scan2.vip
      1        ONLINE  ONLINE       oimsec
ora.scan3.vip
      1        ONLINE  ONLINE       oimsec

Database cluster resource ora.asdb.cfcdb dependency tree
--------------------------------------------------------


  Basic information
------------------------+------------------------
  Name                  |  ora.asdb.cfcdb
  Type                  |  Database Instance
  Target state          |  ONLINE
  Resource state        |  ONLINE on oimpri
  Restart count         |  0
  Failure count         |  0
  Hosting members       |  oimpri, oimsec
------------------------+------------------------

  Common CRS parameters
------------------------+------------------------
  Auto start            | Yes
  Check interval        | 120 sec
  Failover delay        | 30 sec
  Failure interval      | 700 sec
  Failure threshold     | 5
  Restart attempts      | 4
  Script timeout        | 300 sec
  Start timeout         | 300 sec
  Stop timeout          | 300 sec
------------------------+------------------------

  Resource specific parameters
------------------------+------------------------
  Database component    | dbinstance
  ORACLE_HOME           | /dbfiles/app/oracle/product/11.2.0/db
  ORACLE_SID            | oimap
  pfile                 | Database default
------------------------+------------------------

  Resource dependency tree(s)
-------------------------------------------------
  ora.asdb.cfcdb
    |
    +->ora.asdblsnr.cfcdblsnr
    |    |
    |    +->ora.dbvip.cfcvip
    |    |
    |    +->ora.dbdisk.cfcdisk
    |
    +->ora.dbdisk.cfcdisk


Database cluster resource ora.obieeserver.cfcas dependency tree
--------------------------------------------------------

  Basic information
------------------------+------------------------
  Name                  |  ora.obieeserver.cfcas
  Type                  |  WebLogic Domain
  Target state          |  ONLINE
  Resource state        |  ONLINE on oimsec
  Restart count         |  0
  Failure count         |  0
  Hosting members       |  oimpri, oimsec
------------------------+------------------------

  Common CRS parameters
------------------------+------------------------
  Auto start            | Yes
  Check interval        | 50 sec
  Failover delay        | 20 sec
  Failure interval      | 350 sec
  Failure threshold     | 5
  Restart attempts      | 4
  Script timeout        | 600 sec
  Start timeout         | 600 sec
  Stop timeout          | 600 sec
------------------------+------------------------

  Resource specific parameters
------------------------+------------------------
  Component home        |
  (WebLogic domain)     | /fmwfiles/app/oracle/obieehome/user_projects/domains/bifoundation_domain
------------------------+------------------------
  Components
  (Managed servers)
------------------------+------------------------
  Name                  | Monitor
------------------------+------------------------
  AdminServer           | default
  bi_server1            | default
------------------------+------------------------

  Resource dependency tree(s)
-------------------------------------------------
  ora.obieeserver.cfcas
    |
    +->ora.obieevip.cfcvip
    |
    +->ora.obieedisk.cfcdisk

[root@oimsec bin]#









Advantages : 
1.Automatic recovery of Database and OBIEE resources from Node failures.
2.Lost Cost : License
3.Can be effectively used in environments like where cost is a constraint but scaling can be compromised. So this setup is best suited for small to  Mid-level customers.
4.Planned Maintenance: HW can be upgraded while the application is up and running, like Memory upgrades – both nodes.
5.High availability with 2 Tier setup (scaling) at reduced cost.

Disadvantages: 
1.May not possible to completely switch over or fail over the ASCRS resources  when  there some dependencies active.
So either manual intervention or some sort of automatic scripts to be in place in such scenario.
2.OBIEE sessions may need to refreshed or reinitiated after the Failover or switch over.
Oracle is aware of these complexities and still supports this architecture for low to  mid- level customers (Cost).
Please remember it is possible to build (oracle supported)  100% HA (both DB and OBIEE)  + Scaling (Vertical or Horizontal) in place  for OBIEE (or any type of Fusion Middleware application) component – at the expense of COST.
3. At present ASCRS is supported only in Unix platforms. 

Conclusion:
In Our Real Practical DR Scenario :
Switch Time
Database Node Crash - Database automatically migrated to OBIEE - OIMSEC Node
1 Min 20 Sec
OBIEE Node Crash - OBIEE automatically migrated to Database Node - OIMPRI Node
3 Min 10 Sec
Manual Failover the Database to OBIEE(OIMSEC)Node - Maintenance
1Min  40 Sec
Manual Failover the OBIEE  to Database (OIMPRI) Node - Maintenance
2 Min 50 Sec