RAC Attack - Oracle Cluster Database at Home/RAC Attack Automation
Whether you're a participant who has already done the early labs dozens of times or an instructor who's teaching a session that focuses on a later lab, it is often useful to skip earlier labs and focus on later labs in the RAC Attack curriculum. Code to automate the RAC Attack labs is currently being developed and tested.
This page will contain instructions for automatically building a standard RAC Attack environment.
These steps are being tested on Windows, Linux and Mac OSX |
Quick Start
edityou need a lot of memory and free disk space for this. See RAC_Attack_12c/Hardware_Requirements. For these automation labs, 8GB memory can be a stretch if you have other programs running and 40GB disk might be pushing it too. This is still under development! |
At this point in time, we are working to automate the third and fourth labs - Install Linux and Create Cluster.
- Complete the first three labs: Hardware Requirements, Software Components and Prepare Host. Do not download Oracle Linux; just the database and cluster software.
- Download and install Vagrant 1.5.1
- Download and unzip http://racattack.org/vagrantfile.zip (note that this file changes frequently as we work on it)
- Open a command prompt and change into the directory where you unzipped vagrantfile.zip
cd vagrantfile-master\OracleLinux\racattack12cR1
vagrant up
vagrant ssh collabn1
sudo su - oracle -c vncserver
- Run the vnc client of your choice and connect to vnc://192.168.78.51:1
- discuss issues at http://racattack.org/list or https://github.com/racattack/vagrantfile/issues
typing vagrant up for the first time on your laptop will trigger an 808MB download. To just download the file without provisioning your VM (e.g. while you sleep) you can type vagrant box add racattack/oracle65 . |
even without the download, running vagrant up will take a long time - especially creating 20GB of "shared disk" before starting the first VM. |
You can now skip to Connecting to the virtual machine
Credits
editThis project came to you by the RAC Attack Team
Initial version: Alvaro Miranda 14/04
Getting started
editFor this implementation, we will be using Vagrant, to manage VirtualBox and automate the deployment.
Software used in this implementation
editBesides the software listed in RAC_Attack_12c/Software_Components for SSH, VNC and Grid and Database component, the following software have been used and tested in this implementation.
OSes that are known to work
editThis implementation has been tested with the following operating systems:
- Windows 7 Professional 64 bit
- OracleLinux 6.5 64 bit
- Apple Mac OS X 10.9.2
OS used in the guest machine
editThe OS used in the guest machine is Oracle Linux 6.5 + updates.
The version of the box used reflect the day when the box was created and updated:
alvaros-mini:oracle65 alvarom$ vagrant box outdated --global
* 'racattack/oracle65' (v14.03.29) is up to date
alvaros-mini:oracle65 alvarom$
This version of racattack/oracle65
was created and updated to 14.03.29
In the future, if new boxes are released, the version will match the day when the box was created |
Hardware requirements
edit- Please review RAC_Attack_12c/Hardware_Requirements and check you meet the minimum hardware requirements.
Software Components
edit- Go to RAC_Attack_12c/Software_Components and ensure you have all the Software Components listed there.
We will use a Vagrant Box that have the OS and all the RPM requirement installed. Oracle Linux ISO are not required for this task |
Vagrant
editFor this lab, you need vagrant, go to www.vagrantup.com/downloads.html , download and install vagrant software.
This has been tested with Vagrant 1.5.1 |
Introduction to Vagrant - Vagrant 101
editOn this lab, we will use vagrant, however it is left to the reader visit the Vagrant documentation in order to learn what other features can be useful outside this lab.
From why-vagrant page:
Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team.
Once the software is installed, a normal deployment goes like this:
- Download a vagrant box
- Create a Vagrantfile
Vagrant is a command line tool, if you are on Windows, open a command line window |
Let's execute some commands with vagrant:
alvaros-mini:~ alvarom$ vagrant --help
Usage: vagrant [options] <command> [<args>]
-v, --version Print the version and exit.
-h, --help Print this help.
alvaros-mini:~ alvarom$ vagrant --version
Vagrant 1.5.1
alvaros-mini:~ alvarom$ vagrant box list
alvaros-mini:~ alvarom$
vagrant box
editA vagrant box is a virtual machine template with configurations made specifically for vagrant. In order to create a box, you need to follow the steps listed at base box documentation
The box used in the lab has been created using packer version 0.5.2
Since vagrant 1.5.x you can download boxes from the internet with a simple command:
vagrant box add racattack/oracle65
This will download the base box used for this lab.
At this point, the box racattack/oracle65 is in your system, and you can use it.
Vagrantfile
editVagrant file is where the automation starts, it will include information about what box to use, from where get it, and will execute the customization listed in the Vagrantfile
According to vagrantfile documentation, Vagrantfile is:
The primary function of the Vagrantfile is to describe the type of machine required for a project, and how to configure and provision these machines. Vagrantfiles are called Vagrantfiles because the actual literal filename for the file is Vagrantfile (casing doesn't matter).
Vagrant is meant to run with one Vagrantfile per project, and the Vagrantfile is supposed to be committed to version control. This allows other developers involved in the project to check out the code, run vagrant up, and be on their way. Vagrantfiles are portable across every platform Vagrant supports.
The syntax of Vagrantfiles is Ruby, but knowledge of the Ruby programming language is not necessary to make modifications to the Vagrantfile, since it is mostly simple variable assignment. In fact, Ruby isn't even the most popular community Vagrant is used within, which should help show you that despite not having Ruby knowledge, people are very successful with Vagrant.
To create a new Vagrantfile, you can :
vagrant init racattack/oracle65
This will create a simple Vagrantfile on the directory where we are executing this command.
Let's enumerate what we have learned so far:
To download a vagrant box
vagrant box add racattack/oracle65
To list the boxes in our system
vagrant box list
To create an initial Vagrantfile
vagrant init racattack/oracle65
Other commands that we will be using are:
To start/create a new vm
vagrant up
To connect to a vm
vagrant ssh
To reboot a vm
vagrant reload
To stop a vm
vagrant halt
To check status of a vm
vagrant status
This command will ask for confirmation |
To delete a vm
vagrant destroy
lab: create test1 vm
editIn this lab, we will create a simple test1 vm.
vagrant box add racattack/oracle65
vagrant box list
mkdir test1
cd test1
vagrant init racattack/oracle65
vagrant up
vagrant reload
vagrant halt
vagrant destroy
Below the output on my test machine:
alvaros-mini:~ alvarom$ vagrant box add racattack/oracle65
==> box: Loading metadata for box 'racattack/oracle65'
box: URL: https://vagrantcloud.com/racattack/oracle65
==> box: Adding box 'racattack/oracle65' (v14.03.29) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/racattack/oracle65/version/1/provider/virtualbox.box
==> box: Successfully added box 'racattack/oracle65' (v14.03.29) for 'virtualbox'!
alvaros-mini:~ alvarom$
alvaros-mini:~ alvarom$ vagrant box list
racattack/oracle65 (virtualbox)
alvaros-mini:~ alvarom$
alvaros-mini:~ alvarom$ mkdir test1
alvaros-mini:~ alvarom$ cd test1
alvaros-mini:test1 alvarom$ vagrant init racattack/oracle65
A `Vagrantfile` has been placed in this directory.
You are now ready to `vagrant up` your first virtual environment!
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'racattack/oracle65'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Setting the name of the VM: test1_default_1396308377657_73917
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant ssh
[vagrant@oracle65-racattack ~]$ id
uid=500(vagrant) gid=500(vagrant) groups=500(vagrant)
[vagrant@oracle65-racattack ~]$ hostname
oracle65-racattack
[vagrant@oracle65-racattack ~]$ sudo su -
[root@oracle65-racattack ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@oracle65-racattack ~]# exit
logout
[vagrant@oracle65-racattack ~]$ exit
logout
Connection to 127.0.0.1 closed.
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
==> default: VM already provisioned. Run `vagrant provision` or use `--provision` to force it
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant halt
==> default: Attempting graceful shutdown of VM...
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...
alvaros-mini:test1 alvarom$
Congratulations, you created and destroyed your first virtual machine with Vagrant.
RAC Attack Automation
editArchitecture
editAt this point, in the RAC Attack Architecture we are in the first step.
Our Architecture Diagram looks like this:
Code
editThe code for this automation implementation can be found at [racattack.org/code]
From the code, we are interested in racattack/vagrantfile repo
To download the code are 2 ways:
- Download the zip file
- Using git
Please bear in mind that the links can change in the future, so bookmark this webpage and visit racattack.org for latest updates. |
Download the zip file
editA zip file with all the files required for this project can be downloaded as: https://github.com/racattack/vagrantfile/archive/master.zip
Download, Unzip
Unzip the files in a directory with enough space to hold the virtual disks used when creating the virtual machines. |
You are done.
Using git
editIf you are familiar with git, you can download a copy of this repo as:
git clone https://github.com/racattack/vagrantfile
If you have github software installed, then you can click on this link
reviewing racattack/vagrantfile
editAfter downloading the repo locally to your computer, you will end with a structure similar to this:
.
|-- OracleLinux
| |-- README.md
| `-- racattack12cR1
go to the OracleLinux/racattack12cR1 directory
cd OracleLinux/racattack12cR1
And the structure will be something like this:
.
|-- 12cR1
| |-- <scripts>
| `-- readme.txt
|-- Vagrantfile
`-- stagefiles
| |-- <scripts>
` `-- readme.txt
Before we create our first cluster
editNow everything is in place, we can check the status of our cluster:
alvaros-mini:racattack12cR1 alvarom$ vagrant status
collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn2 dns server role is slave
on first boot shared disks will be created, this will take some time
collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51
collabn1 dns server role is master
Current machine states:
collabn2 not created (virtualbox)
collabn1 not created (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
alvaros-mini:racattack12cR1 alvarom$
What this out put tell us?
It show are 2 nodes:
collabn2 not created (virtualbox) collabn1 not created (virtualbox)
It show we will be able to access them over the following network detail:
collabn2 eth1 lanip :192.168.78.52 collabn2 eth2 privip :172.16.100.52 collabn1 eth1 lanip :192.168.78.51 collabn1 eth2 privip :172.16.100.51
This mean, we will move from single node, to 2 node.
This also mean, we are one step closer in the RAC Attack Architecture.
The scripts provided in stagefiles/*.sh
will do all the configuration required for a Oracle RAC Cluster.
racattack12cR1
`-- stagefiles
| `-- <scripts>
If we review the output of vagrant status
, we also have:
collabn2 dns server role is slave collabn1 dns server role is master
This mean, when we provision our lab, collabn1
will be a dns server master and collabn2
will be a dns server slave.
Other piece of information is:
on first boot shared disks will be created, this will take some time
This is, on the first execution of vagrant up
Vagrant, using our Vagrantfile will setup everything we need to have for a correct installation of an Oracle RAC 12cR1.
At this point you can do vagrant up
to create your very first 2 node rac cluster using this project.
vagrant up
editvagrant up
command, will read Vagrantfile and will create what is in this file.
This project Vagrantfile have been tested, and improved, and does all the OS requirement to have an Oracle RAC 12cR1 installation, free of issues.
Order matters
editVagrant execute the scripts and create the machines top to bottom, so for advances uses, we may end installing software, or doing some tasks after the provisioning, so for that, we need all the nodes up and running, so we will be doing collabn2 first, then collabn1. In this way, once collabn1 is up and running, we can be sure all is up and ready.
Review of vagrant up output
editLet's review the output.
A sample vagrant up log can be found on the project page at https://github.com/racattack/vagrantfile/blob/master/OracleLinux/vagrant-up.log in case you want to review, before executing your own run.
Not all the output will be reviewed. We will highlight the important bits |
At this stage, the base box is imported.
==> collabn2: Importing base box 'kikitux/oracle65-racattack'...
At this stage, the box is being renamed from the template, into a name suitable for us.
==> collabn2: Setting the name of the VM: collabn2.1404011431
Vagrant magic:
==> collabn2: Clearing any previously set network interfaces...
==> collabn2: Preparing network interfaces based on configuration...
Here, in the pre-boot
section, is where the shared disk are created. We will review this later.
==> collabn2: Running 'pre-boot' VM customizations...
Booting the virtual machine, and setting hostname
==> collabn2: Booting VM...
==> collabn2: Waiting for machine to boot. This may take a few minutes...
==> collabn2: Setting hostname...
Mounting shared folder
==> collabn2: Mounting shared folders...
collabn2: /vagrant => /Users/alvarom/racattack12cR1
collabn2: /media/sf_12cR1 => /Users/alvarom/racattack12cR1/12cR1
collabn2: /media/stagefiles => /Users/alvarom/racattack12cR1/stagefiles
Executing scripts
==> collabn2: Running provisioner: shell...
Shared disk
editIn order to be closer to the RAC Attack 12cR1 Architecture, we need to have shared disks.
This implementation, performs automatically on the first boot the RacAttack Create_Virtualbox_Shared_Storage steps
Let's check collabn1
alvaros-mini:racattack12cR1 alvarom$ vagrant status
collabn2 running (virtualbox)
collabn1 running (virtualbox)
Let's connect to collabn1
and become root
alvaros-mini:racattack12cR1 alvarom$ vagrant ssh collabn1
[vagrant@collabn1 ~]$ sudo su -
[root@collabn1 ~]#
Let's check the disks.
- udev disk
[root@collabn1 ~]# ls -al /dev/asm* /dev/sd*
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk1 -> sdc1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk2 -> sdd1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk3 -> sde1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk4 -> sdf1
brw-rw---- 1 root disk 8, 0 Apr 1 01:35 /dev/sda
brw-rw---- 1 root disk 8, 1 Apr 1 01:35 /dev/sda1
brw-rw---- 1 root disk 8, 2 Apr 1 01:35 /dev/sda2
brw-rw---- 1 root disk 8, 3 Apr 1 01:35 /dev/sda3
brw-rw---- 1 root disk 8, 16 Apr 1 01:35 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr 1 01:35 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 /dev/sdc1
brw-rw---- 1 root disk 8, 48 Apr 1 01:35 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 /dev/sdd1
brw-rw---- 1 root disk 8, 64 Apr 1 01:35 /dev/sde
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 /dev/sde1
brw-rw---- 1 root disk 8, 80 Apr 1 01:35 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 /dev/sdf1
[root@collabn1 ~]#
We have 4 shared disks, sdc,sdd,sde,sdf We have persistent aliases
- OracleASM disks
oracleasm-tools have been used to setup the /dev/oracleasm/disks alias device |
[root@collabn1 ~]# ls -al /dev/oracleasm/disks/
total 0
drwxr-xr-x 1 root root 0 Apr 1 01:35 .
drwxr-xr-x 4 root root 0 Apr 1 01:35 ..
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 ASMDISK1
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 ASMDISK2
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 ASMDISK3
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 ASMDISK4
[root@collabn1 ~]#
oracleasmlib is included in the Oracle UEK Kernel. This machines use UEKR3 |
Shared disk created, permission set. Ready to use.
Once again, this mean we are one step closer to the RAC Attack 12cR1 Architecture:
What came included by default
editOn top the detailed description already provided, this Automation script does:
- Create the required groups, for role separation per Oracle RAC Manual
- Create user grid
- Update groups of user oracle
- Initialize sdb disk for oracle binaries, mount it as /u01
- Setup DNS Settings for Master node (collabn1) slave (collabn2)
- Setup ulimit for grid user, for role separation
Default users and password
edit- User root, password root
- User grid, password grid
- User oracle, password oracle
Connecting to the virtual machine
editAt this moment, you have 2 ways how to connect to the virtual machines
vagrant ssh collabn1
and thensudo su -
to become root.
You can became grid user assudo su - grid
from vagrant You can became oracle user assudo su - oracle
from vagrant
- ssh/putty to the ip
You laptop computer is connected to both networks, lan 192.168.78 and priv 172.16.100.51.
So you can ssh directly to the machines.
collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51
Congratulations
editAt this point, you have a 2 node cluster, all ready to work.
This mean, we are 100% with the RAC Attack 12cR1 Architecture, congratulations.
What's next
editPlace your downloaded zip oracle binaries in racattack12cR1/12cR1:
12cR1/linuxamd64_12c_grid_1of2.zip
12cR1/linuxamd64_12c_grid_2of2.zip
12cR1/linuxamd64_12c_database_1of2.zip
12cR1/linuxamd64_12c_database_2of2.zip
Configure VNC session, or use X11, from: RAC_Attack_12c/VNC_Server_Setup
Configure VNC Server with the oracle account (passwords won't be displayed):
[root@collabn1 ~]# su - oracle [oracle@collabn1 ~]$ vncserver :1 You will require a password to access your desktops. Password: racattack Verify: racattack xauth: creating new authority file /home/oracle/.Xauthority New 'collabn1.racattack:1 (oracle)' desktop is collabn1.racattack:1 Creating default startup script /home/oracle/.vnc/xstartup Starting applications specified in /home/oracle/.vnc/xstartup Log file is /home/oracle/.vnc/collabn1.racattack:1.log
Open a vncviewer on your laptop and fill the ip address of collabn1 followed by :1.
On OS X and Linux you can use X11 forwarding instead of VNC. To do that, use the -X flag with your ssh command as in ssh -X -l oracle 192.168.78.51. If you are using Mountain Lion or later, you may have to install XQuartz first as described at http://support.apple.com/kb/HT5293 |
Enter the password racattack when prompted:
The graphical interface is ready for the Grid Infrastructure Installation.
Due the nature of Vagrant, the interfaces are eth1: LAN eth2: Interconnect |
When you get to the interface setup of Grid Infrastructure, please have in mind that the interfaces, due Vagrant requirement are different than the 12cR1 book:
When ready to configure the networks, you need to:
Click on Identify Network Interfaces...
Check that the correct addresses are set:
- eth0 is marked as Do Not Use
- eth1 is marked as Public
- eth2 is marked as Private
Click OK to close the Identify Network Interfaces window.
Finally, click Next
Now you can go to the RAC Attack 12cR1 book, and start from RAC_Attack_12c/Prepare_for_GI_install
Update base box
editAs today, the version of racattack/oracle65
is 14.03.29
This is the base box, the box used to create new guest machines.
When a new guest machine is created, that is on the first time you run vagrant up
, or when you want to recreate your system after running vagrant detroy
In the future, if new boxes are released, the version will match the day when the box was created |
In order to validate if you are in the latest version available, use command vagrant box outdated --global
alvaros-mini:racattack12cR1 alvarom$ vagrant box outdated --global
* 'racattack/oracle65' (v14.03.29) is up to date
alvaros-mini:racattack12cR1 alvarom$
This will check the version of the base box installed.
When a new version came out, the command to update the base box is vagrant box update
Example output:
alvaros-mini:racattack12cR1 alvarom$ vagrant box update
==> default: Checking for updates to 'racattack/oracle65'
default: Version constraints: >= 0
default: Provider: virtualbox
==> default: Box 'racattack/oracle65' (v14.03.29) is running the latest version.
Update OS
editIf you require to update the OS of the guest machines, the machines are configured to use public-yum from oracle.
This mean you can update executing yum update
For more information about yum please visit http://docs.oracle.com/cd/E37670_01/E37355/html/ol_about_yum.html