In this post I'll
discuss full implementation of upgrading Oracle RAC 11.2.0.1 to 11.2.0.3, the
new RAC 11.2.0.3 will be installed on a new hardware (outplace upgrade).
This lengthy post (in
order to make it more beneficial) I divided it to FOUR major posts:
Part I OS
Installation, Filesystem preparation (OCFS2 on ISCSI)
->Covers Oracle Enterprise Linux 5.9 x86_64
installation, preparation of ISCSI storage, using OCFS2 to format the shared
filesystem.
->Covers Preparation of Linux OS for Oracle
,11.2.0.3 Grid Infrastructure & database software installation.
->Covers the creation of a standby database
being refreshed from the primary DB 11.2.0.1 taking advantage of a new feature
that a standby DB with an 11gr2 higher release can be refreshed from 11gr2
lower release.
Part IV Database
Upgrade from 11.2.0.1 to 11.2.03
->Covers switching over the new standby DB
resides on 11.2.0.3 server to act as a primary DB, Upgrade the new primary DB
from 11.2.0.1 to 11.2.0.3
Feel free to click on
the part you interested in.
Part I, II, III doesn't
require a downtime as they are being done on a different hardware as part of
our (outplace upgrade) only Part IV is the one will require a downtime window.
The whole implementation
may take less than two hours of downtime if every thing went smooth. but it
will take long hours of DBA work.
In this post I tried to
provide reference for each point. Also followed many recommendations
recommended by the Maximum Availability Architecture (MAA).
Part I OS
Installation, Filesystem preparation (OCFS2 on ISCSI)
The following are
"good to know" information before installing Oracle 11.2.0.3 on any
hardware:
Knowledge Requirements:
===================
RAC and Oracle
Clusterware Best Practices and Starter Kit (Linux) [Metalink Doc ID 811306.1]
RAC and Oracle
Clusterware Best Practices and Starter Kit (Platform Independent) [Metalink Doc
ID 810394.1]
Configuring raw devices
(singlepath) for Oracle Clusterware 10g Release 2 (10.2.0) on RHEL5 [Metalink
Doc ID 465001.1]
Product Support
Lifetime:
===================
This document indicates
database release 11.2 premier support ends at Jan 2015 and the Extended support
ends at Jan 2018.
Patching Support
Lifetime:
===================
This document indicates
Oracle will continue provide security patches for 11.2.0.3 version till 27-Aug-2015.
Security patches means
(PSU, CPU, SPU patches). [Metalink Doc ID 742060.1]
Hardware Certification:
=================
RAC Technologies Matrix
for Linux Platforms:
The main link for
certification Matrix for other platforms: (Linux, Unix, Windows)
In this implementation
I'll install RAC on ISCSI NAS storage.
Now let's move from the
theoretical part to the technical steps...
Linux Requirements:
===============
If installing 11.2.0.3
on RHEL 5 x86_64:
The minimum requirement
is Red Hat Enterprise Linux 5 Update 5 with the Unbreakable Enterprise Kernel
2.6.32 or later.
Partitioning requirement
on the server’s local hard disk: [Minimum!]
=======================================
Local hard disk will
contain Linux, Grid Infrastructure and database installed binaries.
/u01 => 10G
Free space to hold the installation files (GI+DB). I recommend at least 30G to
hold future generated logs.
/tmp => 1G
Free space.
SWAP =>
RAM=32G which is >8G, SWAP= 75% of RAM = 24G
/dev/shm => must
be greater than the sum of MEMORY_MAX_TARGET for all instance if you will use
the new 11g feature Automatic Memory Management by setting parameters
memory_max_target & memory_target to a specific value which will handle
the memory size of SGA & PGA together.
More about /dev/shm:
-According to Oracle
Support /dev/shm will not be able to be greater than 50% of the RAM installed
on the server.
-Make /dev/shm size =
Memory Size installed on the server. or at least the sum of all DBs
Memory_max_target on the server.
-/dev/shm must be exist
if you will use 11g new feature Auto Memory Management by setting
memory_max_target parameter.
-If /dev/shm isn't exist
or isn't properly sized the database will pop up this error when starting up if
memory_max_target parameter has been set:
ORA-00845:
MEMORY_TARGET not supported on this system.
-Oracle will create
files under /dev/shm upon instance startup and will be removed automatically
after instance shutdown.
-Oracle will use these
files to manage the memory size dynamically between SGA and PGA.
-It's recommended to
have the /dev/shm configured with the "tmpfs" option instead of
"ramfs", as ramfs is not supported for Automatic Memory Management
AMM:
# df -h /dev/shm
Filesystem
Size Used Avail Use% Mounted on
tmpfs
16G 0 16G 0% /dev/shm
BTW I'm not using this
feature I'm still stick with sga_taget & pga_aggregate_target. :-)
------------------------------
Linux OS Installation: Both Nodes (Estimated time: 3 hours)
------------------------------
Note: Install a fresh
Linux installation on all RAC nodes, DON'T clone the installation from node to
other in purpose of saving the time.
FS Layout:
>>>>>>>>>
The whole disk space is
300G
Filesystem
Size(G) Size(M) used in setup
----------
---- ---------------------
/boot
1G 1072 --Force to Be Primary Partition.
Swap
24G 24576 --Force to Be Primary Partition, 75% of RAM.
/dev/shm
30G 30720 --Force
to Be Primary Partition.
/
20G 20480
/u01
70G 73728
/home
10G 10547
/tmp
5G 5240
/var
10G 10547
/u02
95G The rest of space
Note:
If you will
install ISCSI drive avoid making a separate partition for /usr , ISCSI drive
will prevent system from booting.
Packages selection
during Linux installation:
>>>>>>>>>>>>>
Desktop Environment:
# Gnome Desktop Environment
Applications:
#Editors -> VIM
Development:
# Development Libraries.
# Development Tools
# GNOME software development
# Java Development
# Kernel Development
# Legacy Software Development
# X Software Development
Servers:
# Legacy Network Server -> Check only:
rsh-server,xinetd
# PostgreSQL -> Check only:
UNIXODBC-nnn
# Server Configuration Tools -> Check
All
Base System:
# Administration Tools.
# Base -> Un check bluetooth,wireless
packs Check-> Device mapper multipath
# Java
# Legacy Software Support
# System Tools -> Check also: OCFS2
packages
# X Window System
FIREWALL & SELINUX
MUST BE STOPPED. [Note ID 554781.1]
I've uploaded OEL 5.9
installation snapshots in this link:
populate /etc/hosts with
the IPs and resolved names:
=======================================
# vi /etc/hosts
#You must keep
127.0.0.1 localhost, if removed VIP will not work !!!
#cluster_scan,Public
and VIP should be in the same subnet.
127.0.0.1 localhost localhost.localdomain
#Public:
172.18.20.1 ora1123-node1
node1 n1
172.18.20.2 ora1123-node2
node2 n2
#Virtual:
172.18.20.3 ora1123-node1-vip
node1-vip n1-vip
172.18.20.4 ora1123-node2-vip
node2-vip n2-vip
#Private:
192.168.10.1
ora1123-node1-priv n1-priv node1-priv
192.168.10.2
ora1123-node2-priv n2-priv node2-priv
#Cluster:
172.18.20.10
cluster-scan
#NAS
172.20.30.100
nas nas-server
#11.2.0.1 Servers:
10.60.60.1 ora1121-node1
old1 #the current 11.2.0.1 Node1
10.60.60.2 ora1121-node2
old2 #the current 11.2.0.1 Node2
I've added RAC node
names, VIP and private IPs and it's resolved names for both nodes and guess
what I'm resolving also the cluster scan in /etc/hosts, keep it a secret don't
till Larry :-)
Actually I'm still not
convinced with using the SCAN feature, if you will use it in your setup just
ask the network admin to resolve at least three SCAN IPs in the DNS to the
cluster scan name you will use.
This document will help
you understanding the SINGLE CLIENT ACCESS NAME (SCAN):
Upgrade the KERNEL:
==================
-Subscribe The new
servers in ULN network.
-Upgrade the Kernel to
the latest version.
Ensure that
/etc/resolv.conf is equipped with the DNS entry and you are connected to the
internet, once this task is done if you don't have a need to connect the
servers to the internet make sure the servers are not connecting anymore to the
internet for security reason.
On linux server:
-------------------
# up2date --register
Install key? Yes
put this information:
login: xxxxxx
pass: xxxxxx
CSI#: xxxxxx
In case you still cannot
establish a connection with ULN You can use the IP 141.146.44.24 instead of
address linux-update.oracle.com in "Network Configuration" button.
Also: in
/etc/sysconfig/rhn/up2date :
You
can change this line:
noSSLServerURL=http://linux-update.oracle.com/XMLRPC to
noSSLServerURL=http://141.146.44.24/XMLRPC
and
this line:
serverURL=https://linux-update.oracle.com/XMLRPC to
serverURL=https://141.146.44.24/XMLRPC
Then proceed with
updating the kernel from the same GUI or from command line as shown below:
up2date -d @ --> To download the updated packages
up2date @ --> To install the updated packages
I'm putting the symbol @
for skipping the GUI mode and continue with CLI.
Configure YUM with ULN:
--------------------------------
# cd /etc/yum.repos.d
# wget
http://public-yum.oracle.com/public-yum-el5.repo
# vi
public-yum-el5.repo
Modify the following:
Under both paragraphs:
[el5_latest] & [ol5_UEK_latest] modify enabled=0 to enabled=1
An excerpt:
[el5_latest]
name=Oracle Linux
$releasever Latest ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/latest/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1
[ol5_UEK_latest]
name=Latest
Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/UEK/latest/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1
Network configuration:
================
Node1:
--------
# cat
/etc/sysconfig/network-scripts/ifcfg-eth0 #=>Public
DEVICE=eth0
BOOTPROTO=static
BROADCAST=172.18.20.255
IPADDR=172.18.20.1
NETMASK=255.255.255.0
NETWORK=172.18.20.0
ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eth1 #=>ISCSI NAS
DEVICE=eth1
BOOTPROTO=static
BROADCAST=172.20.30.255
IPADDR=172.20.30.101
NETMASK=255.255.255.0
NETWORK=172.20.30.0
ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eth3 #=>Private
DEVICE=eth3
BOOTPROTO=static
BROADCAST=192.168.10.255
IPADDR=192.168.10.1
NETMASK=255.255.255.0
NETWORK=192.168.10.0
ONBOOT=yes
Node2:
--------
# cat
/etc/sysconfig/network-scripts/ifcfg-eth0 #=>Public
DEVICE=eth0
BOOTPROTO=static
BROADCAST=172.18.20.255
IPADDR=172.18.20.2
NETMASK=255.255.255.0
NETWORK=172.18.20.0
ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eth1 #=>ISCSI NAS STORAGE
DEVICE=eth1
BOOTPROTO=static
BROADCAST=172.20.30.255
IPADDR=172.20.30.102
NETMASK=255.255.255.0
NETWORK=172.20.30.0
ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eth3 #=>Private
DEVICE=eth3
BOOTPROTO=static
BROADCAST=192.168.10.255
IPADDR=192.168.10.2
NETMASK=255.255.255.0
NETWORK=192.168.10.0
ONBOOT=yes
-----------------------------
Filesystem Preparation:
---------------------- -------
RAC servers will connect
to the NAS shared storage using ISCSI protocol.
ISCSI Configuration:
Required packages:
# rpm -q
iscsi-initiator-utils
# yum install
iscsi-initiator-utils
To get ISCSI aware that
LUNs are being accessed simultaneously by more than one node at the same time
and to avoid LUNs corruption, use one of the following ways (A or B):
A) Generate IQN number
or
B) Setup username and
password of ISCSI storage
I'll explain both of
them:
A) Generate IQN number (ISCSI Qualified Name) in linux for each node to
be saved inside NAS configuration console:
On Node1:
Generate an IQN number:
# /sbin/iscsi-iname
iqn.1988-12.com.oracle:9e963384353a
Note: the last portion
of IQN after semicolon ":" is editable and can be changed to the node
name, I mean instead of "9e963384353a" you can rename it
"node1", no space
allowed in the name.
Now insert the generated
IQN to /etc/iscsi/initiatorname.iscsi
# vi
/etc/iscsi/initiatorname.iscsi
#Note that last portion
of the IQN is modifyiable (modify it to meaningful name)
InitiatorName=iqn.1988-12.com.oracle:node1
Do the same on Node2:
On Node2:
# /sbin/iscsi-iname
iqn.1988-12.com.oracle:18e6f43d73ad
# vi
/etc/iscsi/initiatorname.iscsi
#Note that last portion
of the IQN is modifyiable (modify it to meaningful name)
InitiatorName=iqn.1988-12.com.oracle:node2
Put the same IQN you
already inserted in /etc/iscsi/initiatorname.iscsi on both nodes in the NAS
administration console for each LUN will be accessed by both nodes.
(This should be done by
the Storage Admin)
B) Set up a username and
password for ISCSI storage:
# vi
/etc/iscsi/iscsid.conf
node.session.auth.username
=
node.session.auth.password
=
discovery.sendtargets.auth.username
=
discovery.sendtargets.auth.password
=
Start the iscsi service:
# /etc/init.d/iscsi
start
Same Username &
password should be configured in the NAS administration console.(This should be
done by the Storage Admin)
Continue configuring the
ISCSI:
=======================
Turn on the iscsi
service to start after booting the machine:
# chkconfig iscsi on
Discover the target
LUNs:
# service iscsi start
# iscsiadm -m
discovery -t sendtargets -p 172.20.30.100
# (cd
/dev/disk/by-path; ls -l *iscsi* | awk '{FS=" "; print $9 "
" $10 " " $11}')
Whenever iscsid
discovers new target, it will add corresponding information in the following
directory:
# ls -lR
/var/lib/iscsi/nodes/
# service iscsi
restart
Create Persistent
Naming: (NON Multipath Configuration)
===================
Every time the machine
or ISCSI service restart the partitions source names /dev/sd* will change e.g.
/data1 will point to /dev/sdc instead of /dev/sda, the thing we cannot live
with it at all.
Note: I only have one
physical path "NIC" connecting to the NAS storage, so I apply non
multipath configuration.
1) Whitelist all SCSI
devices:
--
-----------------------------
# vi
/etc/scsi_id.config
#Add the following
lines:
vendor="ATA",options=-p
0x80
options=-g
2) Get the names of LUNs
and it's device name:
--
--------------------------------------------------
# (cd
/dev/disk/by-path; ls -l *iscsi* | awk '{FS=" "; print $9 "
" $10 " " $11}')
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-archive1-lun-0
-> ../../sdn
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-archive2-lun-0
-> ../../sdr
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-backupdisk-lun-0
-> ../../sdi
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-control1-lun-0
-> ../../sdl
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-control2-lun-0
-> ../../sda
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-data1-lun-0
-> ../../sdp
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-index1-lun-0
-> ../../sdo
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-ocr1-lun-0
-> ../../sdq
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-ocr2-lun-0
-> ../../sde
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-ocr3-lun-0
-> ../../sdf
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-redo1-lun-0
-> ../../sdb
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-redo2-lun-0
-> ../../sdm
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-temp1-lun-0
-> ../../sdh
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-undo1-lun-0
-> ../../sdj
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-undo2-lun-0
-> ../../sdc
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-voting1-lun-0
-> ../../sdk
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-voting2-lun-0
-> ../../sdg
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-voting3-lun-0
-> ../../sdd
3) Get the drives UUID:
-- ------------------------
scsi_id -g -s
/block/sdn
scsi_id -g -s
/block/sdr
scsi_id -g -s
/block/sdi
scsi_id -g -s
/block/sdl
scsi_id -g -s
/block/sda
scsi_id -g -s
/block/sdp
scsi_id -g -s
/block/sdo
scsi_id -g -s
/block/sdq
scsi_id -g -s
/block/sde
scsi_id -g -s
/block/sdf
scsi_id -g -s
/block/sdb
scsi_id -g -s
/block/sdm
scsi_id -g -s
/block/sdh
scsi_id -g -s
/block/sdj
scsi_id -g -s
/block/sdc
scsi_id -g -s
/block/sdk
scsi_id -g -s
/block/sdg
scsi_id -g -s
/block/sdd
These UUIDs are the
consistent identifiers for the devices, we will use them in the next step.
4) Create the file
/etc/udev/rules.d/04-oracle-naming.rules with the following format:
--
--------------------------------------------------------------------------------------
# vi
/etc/udev/rules.d/04-oracle-naming.rules
#Add a line for each
device specifying the device name & it's UUID:
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d003000000000",
NAME="archive1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d004000000000",
NAME="archive2"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d002000000000",
NAME="backupdisk"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d001000000000",
NAME="control1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d005000000000",
NAME="control2"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d006000000000", NAME="data1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d007000000000", NAME="index1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d008000000000", NAME="ocr1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d009000000000", NAME="ocr2"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d010000000000", NAME="ocr3"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d011000000000", NAME="redo1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d012000000000", NAME="redo2"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d013000000000", NAME="temp1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d014000000000", NAME="undo1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d015000000000", NAME="undo2"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d016000000000", NAME="voting1"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d017000000000", NAME="voting2"
KERNEL=="sd*",
BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -s /block/%k",
RESULT=="360014052e3032700063d018000000000", NAME="voting3"
# service iscsi
restart
5) Check the
configuration:
--
-----------------------------
Now new files name under
/dev should be e.g. /dev/archive1 instead of /dev/sdn
Note: fdisk -l will not
show the new NAS devices anymore, don't worry use the following:
#(cd
/dev/disk/by-path; ls -l *iscsi* | awk '{FS=" "; print $9 "
" $10 " " $11}')
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-archive1-lun-0
-> ../../archive1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-archive2-lun-0
-> ../../archive2
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-backupdisk-lun-0
-> ../../backupdisk
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-control1-lun-0
-> ../../control1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-control2-lun-0
-> ../../control2
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-data1-lun-0
-> ../../data1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-index1-lun-0
-> ../../index1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-ocr1-lun-0
-> ../../ocr1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-ocr2-lun-0
-> ../../ocr2
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-ocr3-lun-0
-> ../../ocr3
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-redo1-lun-0
-> ../../redo1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-redo2-lun-0
-> ../../redo2
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-temp1-lun-0
-> ../../temp1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-undo1-lun-0
-> ../../undo1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-undo2-lun-0
-> ../../undo2
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-voting1-lun-0
-> ../../voting1
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-voting2-lun-0
-> ../../voting2
ip-172.20.30.100:3260-iscsi-iqn.2013-7.VLA-NAS03:pefms-voting3-lun-0
-> ../../voting3
also test UDEV rule:
# udevtest /block/sdb
| grep udev_rules_get_name
udev_rules_get_name:
rule applied, 'sdb' becomes 'ocr2'
...
OCFS2 Configuration:
Required Packages:
OCFS2 packages should be
installed during Linux installation, if you selected the right packages.
If you didn't do so, you
can download and install the required OCFS2 packages using the following
commands:
# up2date --install
ocfs2-tools ocfs2console
# up2date --install
ocfs2-`uname -r`
1) populate
/etc/ocfs2/cluster.conf settings:
-
-------------------------------------
In the OCFS2 configuration
I'll use the heartbeat NICs (private) not the public ones.
# mkdir -p /etc/ocfs2/
# vi
/etc/ocfs2/cluster.conf
node:
ip_port = 7000
ip_address = 192.168.10.1
number = 0
name = ora1123-node1
cluster = ocfs2
node:
ip_port = 7000
ip_address = 192.168.10.2
number = 1
name = ora1123-node2
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2
Options:
ip_port:
The Default Can be changed to unused port.
ip_address: Using the
private interconnect is highly recommended as it's supposed to be a private
network between cluster nodes only.
number:
Node unique number from 0-254
name:
The node name needs to match the hostname without the domain name.
cluster:
Name of the cluster.
node_count: Number of
the nodes in the cluster.
BEWARE: During editing
the file be-careful, parameters must start after a tab, a blank space must
separate each value.
2) Timeout
Configuration:
-
-----------------------------
The O2CB cluster stack
uses these timings to determine whether a node is dead or alive. Keeping
default values is recommended.
# /etc/init.d/o2cb
configure
Load O2CB driver on
boot (y/n) [n]: y
Cluster stack backing
O2CB [o2cb]:
Cluster to start on
boot (Enter "none" to clear) [ocfs2]:
Specify heartbeat dead
threshold (>=7) [31]: 61
Specify network idle
timeout in ms (>=5000) [30000]: 60000
Specify network
keepalive delay in ms (>=1000) [2000]:
Specify network
reconnect delay in ms (>=2000) [2000]:
Heartbeat Dead
Threshold: is the number of two-second iterations before a node is considered
dead.61 is recommended for multipath users, for my setup I'll
set the timeout to
120sec.
Network Idle Timeout:
The time in milliseconds before a network connection is considered
dead.recommended 60000ms
configured the cluster
to load on boot:
-------------------------------------------
# chkconfig --add o2cb
# chkconfig --add
ocfs2
# /etc/init.d/o2cb
load
# /etc/init.d/o2cb
start ocfs2
Filesystem Partitioning:
OCFS2
==================
As per the labels on the
NAS disk names, I'll assign same names with OCFS2.
# fdisk -l |grep /dev
# (cd
/dev/disk/by-path; ls -l *iscsi* | awk '{FS=" "; print $9 "
" $10 " " $11}')
Formating:
--------------
# mkfs.ocfs2 -F -b 4K
-C 32K -N 2 -L ocr1 /dev/ocr1
# mkfs.ocfs2 -F -b 4K
-C 32K -N 2 -L ocr2 /dev/ocr2
# mkfs.ocfs2 -F -b 4K
-C 32K -N 2 -L ocr3 /dev/ocr3
# mkfs.ocfs2 -F -b 4K
-C 32K -N 2 -L voting1 /dev/voting1
# mkfs.ocfs2 -F -b 4K
-C 32K -N 2 -L voting2 /dev/voting2
# mkfs.ocfs2 -F -b 4K
-C 32K -N 2 -L voting3 /dev/voting3
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L redo1 -J size=64M
/dev/redo1
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L redo2 -J size=64M
/dev/redo2
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L control1 -J size=64M
/dev/control1
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L control2 -J size=64M
/dev/control2
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L archive1 -J size=64M
/dev/archive1
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L archive2 -J size=64M /dev/archive2
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L undo1 -J size=64M
/dev/undo1
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L undo2 -J size=64M
/dev/undo2
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L data1 -J size=64M
/dev/data1
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L index1 -J size=64M /dev/index1
# mkfs.ocfs2 -F -b 4k
-C 8k -N 2 -L temp1 -J size=64M /dev/temp1
# mkfs.ocfs2 -F -b 4k
-C 1M -N 2 -L backupdisk -J size=64M
/dev/backupdisk
Options:
-F If the device was
previously formatted by OCFS to overwrite the data.
-b blocksize from 512 to
4k(default), 4k recommended (small block size mean smaller maxsize,
maxsize=2^32*blocksize means with blocksize=4096 maxsize=16T).
-C clustersize from
4k(default) to 1M, 4k recommended EXCEPT for DBFILES partition it should =
Database Block Size =8k
For backup
storage filesystem holding RMAN, dump files, use bigger clustersize.
128k
recommended as a default clustersize if you're not sure what clustersize to
use.
-N #Node slots, number
of nodes can mount the volume concurrently, it's recommended to set it bigger
than required,e.g. if you have two nodes set it to 4, this
parameter can be
increased later using tunefs.ocfs2 but this practice can lead to bad
performance.
-L lablel name, labeling
the volume allow consistent "presistent" naming across the cluster.
even if you're using ISCSI.
-J Journal size, 256
MB(default), recommeded (64MB for datafiles, 128MB for vmstore and 256MB for
mail).
-T filesystem-type
(datafiles,mail,vmstore)
(datafiles) recommended for database FS will set (blocksize=4k,
clustersize=128k, journal size=32M)
(vmstore)
recommended for backup FS will set (blocksize=4k, clustersize=128k,
journal size=128M) .
Note: For the
filesystems that hold the database files set the cluster size -C 8k
For
the filesystems that hold backup files set the cluster size -C 1M
If
you're not sure what cluster size to use, use 128k, it proven reasonable
trade-off between wasted space and performance.
Mounting the partitions:
-----------------------------
mkdir /ora_redo1
mkdir /ora_backupdisk
mkdir /ora_undo1
mkdir /ora_undo2
mkdir /ora_control2
mkdir /ora_control1
mkdir /ora_archive1
mkdir /ora_redo2
mkdir /ora_temp1
mkdir /ora_index1
mkdir /ora_archive2
mkdir /ora_data1
mkdir /ora_ocr1
mkdir /ora_ocr2
mkdir /ora_ocr3
mkdir /ora_voting1
mkdir /ora_voting2
mkdir /ora_voting3
chown -R oracle:oinstall /ora*
chmod 750 /ora*
Mounting the partitions
automatically when system restart:
-----------------------------------------------------------------
vi /etc/fstab
LABEL=ocr1 /ora_ocr1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=ocr2 /ora_ocr2 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=ocr3 /ora_ocr3 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=voting1 /ora_voting1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=voting2 /ora_voting2 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=voting3 /ora_voting3 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=control1 /ora_control1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=control2 /ora_control2 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=redo1 /ora_redo1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=redo2 /ora_redo2 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=archive1 /ora_archive1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=archive2 /ora_archive2 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=temp1 /ora_temp1 ocfs2 _netdev,datavolume,nointr
0 0
LABEL=undo1 /ora_undo1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=undo2 /ora_undo2 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=index1 /ora_index1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=data1 /ora_data1 ocfs2
_netdev,datavolume,nointr 0 0
LABEL=backupdisk
/ora_backupdisk ocfs2 _netdev 0 0
Partitions mount
options:
>>>>>>>>>>>>>>>>>
_netdev: mandatory,
prevent attempting to mount the filesystem until the network has been enabled
on the system.
datavolume: force using
direct I/O, used with FS contain Oracle data files, control files,
redo/archive, voting/OCR disk. same behavior when using init.ora
filesystemio_options.
datavolume mount option MUST NOT be used on volumes
hosting the Oracle home or Oracle E-Business Suite or any other use.
nointr: default, blocks
signals from interrupting certain cluster operations, disable interrupts.
rw: default, mount the
FS in read write mode.
ro: mount the FS in read
only mode.
noatime: default,
disable access time updates, improve the performance (important for DB/cluster
files).
atime_quantum=: update
atime of files every 60 second(default), degrades the performance.
commit=: optional, sync
all data every 5 seconds(default), degrades the performance. in case of failure
you will lose last 5 seconds of work (Filesystem will
not be damaged, thanks
to journaling). higher assigned value improves the performance with more data
loss risk.
After adding the values
inside /etc/hosts you can mount the partitions using these commands:
# mount -a
OR:
# mount -L
"temp1" /ora_temp1
# df -h
Filesystem
Size Used Avail Use% Mounted on
/dev/cciss/c1d0p6
20G 3.9G 15G 22% /
/dev/cciss/c1d0p10
98G 7.0G 86G 8% /u02
/dev/cciss/c1d0p9
5.0G 139M 4.6G 3% /tmp
/dev/cciss/c1d0p8
10G 162M 9.4G 2% /home
/dev/cciss/c1d0p7
10G 629M 8.9G 7% /var
/dev/cciss/c1d0p2
16G 0 16G 0% /dev/shm
/dev/cciss/c1d0p5
70G 180M 66G 1% /u01
/dev/cciss/c1d0p1
1003M 76M 876M 8% /boot
tmpfs
16G 0 16G
0% /dev/shm
/dev/sdm
1.0G 143M 882M 14%
/ora_ocr1
/dev/sdd
1.0G 143M 882M 14%
/ora_ocr2
/dev/sde
1.0G 143M 882M 14%
/ora_ocr3
/dev/sdk
1.0G 143M 882M 14%
/ora_voting1
/dev/sdi
1.0G 143M 882M 14%
/ora_voting2
/dev/sdg
1.0G 143M 882M 14%
/ora_voting3
/dev/sdl
10G 151M 9.9G 2% /ora_control1
/dev/sda
10G 151M 9.9G 2%
/ora_control2
/dev/sdb
10G 151M 9.9G 2%
/ora_redo1
/dev/sdr
10G 151M 9.9G 2%
/ora_redo2
/dev/sdp
300G 456M 300G 1%
/ora_archive1
/dev/sdn
300G 456M 300G 1%
/ora_archive2
/dev/sdf
60G 205M 60G 1%
/ora_temp1
/dev/sdj
40G 184M 40G 1%
/ora_undo1
/dev/sdc
40G 184M 40G 1%
/ora_undo2
/dev/sdo
200G 349M 200G 1% /ora_index1
/dev/sdq
400G 563M 400G 1%
/ora_data1
/dev/sdh
500G 674M 500G 1%
/ora_backupdisk
Performance Tip: Ensure
updatedb is not running on OCFS2 partitions, by adding "OCFS2"
keyword to "PRUNEFS =" list in file /etc/updatedb.conf
///////////////////////////////////////////////////////////////
In case of using ASM for the shared storage
(very quick guide)
///////////////////////////////////////////////////////////////
Note: Don't use persistent naming unless you
finish configuring ASM first.
Install ASMLib 2.0 Packages:
---------------------------
# rpm -qa --queryformat
"%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n"| grep oracleasm | sort
oracleasm-2.6.18-348.el5-2.0.5-1.el5 (x86_64)
oracleasmlib-2.0.4-1.el5 (x86_64)
oracleasm-support-2.1.7-1.el5 (x86_64)
Configure ASMLib:
----------------
# /usr/sbin/oracleasm configure -i
Default user to own the driver interface []:
oracle
Default group to own the driver interface []:
dba
Start Oracle ASM library driver on boot (y/n)
[n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
# /usr/sbin/oracleasm init
Use FDISK to create RAW partition for each
disk:
-----------------------------------------------
# fdisk /dev/sdn
n
p
1
w
Do the same for other disks....
Commit your changes without the need to
restart the system using this command:
# partprobe
Create ASM Disks:
----------------
# /usr/sbin/oracleasm createdisk OCR1
/dev/sdn1
# /usr/sbin/oracleasm createdisk OCR2
/dev/sdd1
# /usr/sbin/oracleasm createdisk OCR3
/dev/sde1
# /usr/sbin/oracleasm createdisk voting1
/dev/sdk1
# /usr/sbin/oracleasm createdisk voting2
/dev/sdi1
# /usr/sbin/oracleasm createdisk voting3
/dev/sdj1
... and so on
SCAN ASM Disks:
--------------
# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "OCR1"
Instantiating disk "OCR2"
....
# /usr/sbin/oracleasm listdisks
OCR1
...
# oracleasm querydisk /dev/sdn1
Diskgroup creation will be done from the
installer.
////////////////////////////////////////////////////////////////////
In case you want to
use RAW DEVICES for the shared storage:
Note that starting
with 11gr2 using DBCA or the installer to store Oracle Clusterware or Oracle
Database files on block or raw devices is not supported.
Next:
In Part II I’ll
continue with OS preparation for RAC setup, Grid Infrastructure and Database
installation on the new servers.
No comments:
Post a Comment