Oracle RAC provides clustering by allowing multiple computers to run Oracle RDBMS software simultaneously while accessing a single database.
In a non-RAC Oracle database, a single instance accesses a single database. The database consists of a collection of data files , control files and redo logs located on disk . Example contains a collection of Oracle-related memory and background processes running on a computer system.
In an Oracle RAC environment, 2 or more instances access a single database simultaneously. This allows an application or user to connect to any computer and access a single coordinated set of data. The instances are linked together via an “Interconnection” which ensures that all instances are synchronized in accessing the data.
In this article, we will try to install oracle rac 21c on docker. Well, you are in the right place, so let’s get started 🙂
hostnamectl
nmtui
hostnamectl set-hostname localhost.localdomain
hostnamectl set-hostname localhost –transient
yum update
reboot -n
Setting up Unbreakable Enterprise Kernel
yum-config-manager –disable ol7_UEKR3 ol7_UEKR4
yum-config-manager –enable ol7_UEKR5
yum update
systemctl reboot
Enabling Access to the Oracle Container Runtime for Docker Packages
yum-config-manager –enable ol7_addons
rpm -qi docker
systemctl stop docker
yum remove docker
Installing Oracle Container Runtime for Docker
yum install docker-engine docker-cli
systemctl enable –now docker
systemctl status docker
docker info
First Start
vi /usr/lib/systemd/system/docker.service
Add
–cpu-rt-runtime=950000
Oracle Linux 7
Centos 7
systemctl daemon-reload
systemctl stop docker
systemctl status docker
systemctl start docker
You can create docker network
docker network create –driver=bridge –subnet=10.0.20.0/24 rac_public
docker network create –driver=bridge –subnet=192.168.10.0/24 rac_private
docker network ls
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
vi /etc/sysctl.conf
fs.aio-max-nr=1048576
fs.file-max = 6815744
net.core.rmem_max = 4194304
net.core.rmem_default = 262144
net.core.wmem_max = 1048576
net.core.wmem_default = 262144
net.core.rmem_default = 262144
vm.nr_hugepages=16384
sysctl -a ; sysctl -p
Git clone Oracle Repository
yum install -y git
mkdir /bugra ; cd /bugra
git clone https://github.com/oracle/docker-images.git
cd /bugra/docker-images/OracleDatabase/RAC/OracleDNSServer/dockerfiles/latest
cp zonefile zonefileyedek
$TTL 86400 @ IN SOA ###DOMAIN_NAME###. root ( 2014090401 ; serial 3600 ; refresh 1800 ; retry 604800 ; expire 86400 ) ; minimum ; Name server's IN NS ###DOMAIN_NAME###. ; Name server hostname to IP resolve. IN A ###RAC_DNS_SERVER_IP### ; Hosts in this Domain ###HOSTNAME### IN A ###RAC_DNS_SERVER_IP### ###RAC_NODE_NAME_PREFIX###1 IN A ###RAC_PUBLIC_SUBNET###.151 ###RAC_NODE_NAME_PREFIX###2 IN A ###RAC_PUBLIC_SUBNET###.152 ###RAC_NODE_NAME_PREFIX###3 IN A ###RAC_PUBLIC_SUBNET###.153 ###RAC_NODE_NAME_PREFIX###4 IN A ###RAC_PUBLIC_SUBNET###.154 ###RAC_NODE_NAME_PREFIX###1-vip IN A ###RAC_PUBLIC_SUBNET###.161 ###RAC_NODE_NAME_PREFIX###2-vip IN A ###RAC_PUBLIC_SUBNET###.162 ###RAC_NODE_NAME_PREFIX###3-vip IN A ###RAC_PUBLIC_SUBNET###.163 ###RAC_NODE_NAME_PREFIX###4-vip IN A ###RAC_PUBLIC_SUBNET###.164 ###RAC_NODE_NAME_PREFIX###-scan IN A ###RAC_PUBLIC_SUBNET###.171 ###RAC_NODE_NAME_PREFIX###-scan IN A ###RAC_PUBLIC_SUBNET###.172 ###RAC_NODE_NAME_PREFIX###-scan IN A ###RAC_PUBLIC_SUBNET###.173 ###RAC_NODE_NAME_PREFIX###-gns1 IN A ###RAC_PUBLIC_SUBNET###.175 ###RAC_NODE_NAME_PREFIX###-gns2 IN A ###RAC_PUBLIC_SUBNET###.176 ; CMAN Server Entry ###RAC_NODE_NAME_PREFIX###-cman IN A ###RAC_PUBLIC_SUBNET###.3
cp reversezonefile reversezonefileyedek
$TTL 86400 @ IN SOA ###DOMAIN_NAME###. root.###DOMAIN_NAME###. ( 2014090402 ; serial 3600 ; refresh 1800 ; retry 604800 ; expire 86400 ) ; minimum ; Name server's ###HOSTNAME_IP_LAST_DIGITS### IN NS ###DOMAIN_NAME###. ; Name server hostname to IP resolve. IN PTR ###HOSTNAME###.###DOMAIN_NAME###. ; Second RAC Cluster on Same Subnet on Docker 151 IN PTR ###RAC_NODE_NAME_PREFIX###1.###DOMAIN_NAME###. 152 IN PTR ###RAC_NODE_NAME_PREFIX###2.###DOMAIN_NAME###. 153 IN PTR ###RAC_NODE_NAME_PREFIX###3.###DOMAIN_NAME###. 154 IN PTR ###RAC_NODE_NAME_PREFIX###4.###DOMAIN_NAME###. 161 IN PTR ###RAC_NODE_NAME_PREFIX###1-vip.###DOMAIN_NAME###. 162 IN PTR ###RAC_NODE_NAME_PREFIX###2-vip.###DOMAIN_NAME###. 163 IN PTR ###RAC_NODE_NAME_PREFIX###3-vip.###DOMAIN_NAME###. 164 IN PTR ###RAC_NODE_NAME_PREFIX###4-vip.###DOMAIN_NAME###. 171 IN PTR ###RAC_NODE_NAME_PREFIX###-scan.###DOMAIN_NAME###. 172 IN PTR ###RAC_NODE_NAME_PREFIX###-scan.###DOMAIN_NAME###. 173 IN PTR ###RAC_NODE_NAME_PREFIX###-scan.###DOMAIN_NAME###. 175 IN PTR ###RAC_NODE_NAME_PREFIX###-gns1.###DOMAIN_NAME###. 176 IN PTR ###RAC_NODE_NAME_PREFIX###-gns2.###DOMAIN_NAME###. ; CMAN Server Entry 3 IN PTR ###RAC_NODE_NAME_PREFIX###-cman.###DOMAIN_NAME###.
reboot -n
cd /bugra/docker-images/OracleDatabase/RAC/OracleDNSServer/dockerfiles
./buildContainerImage.sh -v latest
You can download oracle installation files
LINUX.X64_213000_db_home.zip
LINUX.X64_213000_grid_home.zip
LINUX.X64_213000_client.zip
You can run docker rancnode DNS
docker run -d –name racnodedns \
–hostname racnodedns \
–dns-search=”example.com” \
–cap-add=SYS_ADMIN \
–network rac_public \
–ip 10.0.20.2 \
–sysctl net.ipv6.conf.all.disable_ipv6=1 \
–env SETUP_DNS_CONFIG_FILES=”setup_true” \
–env DOMAIN_NAME=”example.com” \
–env RAC_NODE_NAME_PREFIX=”racnode” \
oracle/rac-dnsserver:latest
docker logs -f racnodedns
docker ps -a
nslookup racnode1
Oracle Connection Manager,
cd /bugra/docker-images/OracleDatabase/RAC/OracleConnectionManager/dockerfiles
./buildContainerImage.sh -v 21.3.0
docker run -d –hostname racnode-cman \
–dns-search=example.com \
–dns=10.0.20.2 \
–network=rac_public \
–ip=10.0.20.3 \
-e DNS_SERVERS=10.0.20.2 \
-e DOMAIN=example.com \
-e PUBLIC_IP=10.0.20.3 \
-e PUBLIC_HOSTNAME=racnode-cman \
-e SCAN_NAME=racnode-scan \
-e SCAN_IP=10.0.20.171 \
–privileged=false \
-p 1521:1521 \
–name racnode-cman \
oracle/client-cman:21.3.0
docker logs -f racnode-cman
You can install oracle rac 21c database container node1
cd /bugra/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/
./buildContainerImage.sh -i 21.3.0
mkdir /opt/containers; touch /opt/containers/rac_host_file
mkdir /opt/.secrets/
openssl rand -hex 64 -out /opt/.secrets/pwd.key
Create a file called /opt/.secrets/common_os_pwdfile and seed the password for grid/oracle and database
echo “Welcome1” > /opt/.secrets/common_os_pwdfile
openssl enc -aes-256-cbc -salt -in /opt/.secrets/common_os_pwdfile -out /opt/.secrets/common_os_pwdfile.enc -pass file:/opt/.secrets/pwd.key
rm -f /opt/.secrets/common_os_pwdfile
chmod 400 /opt/.secrets/common_os_pwdfile.enc; chmod 400 /opt/.secrets/pwd.key
Create docker node
docker create -t -i \ --hostname racnode1 \ --volume /boot:/boot:ro \ --volume /dev/shm \ --tmpfs /dev/shm:rw,exec,size=4G \ --volume /opt/containers/rac_host_file:/etc/hosts \ --volume /opt/.secrets:/run/secrets:ro \ --volume /etc/localtime:/etc/localtime:ro \ --cpuset-cpus 0-3 \ --memory 16G \ --memory-swap 32G \ --sysctl kernel.shmall=2097152 \ --sysctl "kernel.sem=250 32000 100 128" \ --sysctl kernel.shmmax=8589934592 \ --sysctl kernel.shmmni=4096 \ --dns-search=example.com \ --dns=10.0.20.2 \ --device=/dev/sdb:/dev/asm_disk1 \ --device=/dev/sdc:/dev/asm_disk2 \ --privileged=false \ --cap-add=SYS_NICE \ --cap-add=SYS_RESOURCE \ --cap-add=NET_ADMIN \ -e DNS_SERVERS=10.0.20.2 \ -e NODE_VIP=10.0.20.161 \ -e VIP_HOSTNAME=racnode1-vip \ -e PRIV_IP=192.168.10.151 \ -e PRIV_HOSTNAME=rac_private \ -e PUBLIC_IP=10.0.20.151 \ -e PUBLIC_HOSTNAME=racnode1 \ -e SCAN_NAME=racnode-scan \ -e SCAN_IP=10.0.20.171 \ -e OP_TYPE=INSTALL \ -e DOMAIN=example.com \ -e ASM_DEVICE_LIST=/dev/asm_disk1,/dev/asm_disk2 \ -e ASM_DISCOVERY_DIR=/dev \ -e CMAN_HOSTNAME=racnode-cman \ -e CMAN_IP=10.0.20.3 \ -e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \ -e PWD_KEY=pwd.key \ --restart=always --tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --cpu-rt-runtime=95000 --ulimit rtprio=99 \ --name racnode1 \ oracle/database-rac:21.3.0
docker network connect rac_public –ip 10.0.20.151 racnode1
docker network connect rac_private –ip 192.168.10.151 racnode1
docker start racnode1
docker logs -f racnode1
Racnode1 login you can check crs service
docker exec -it racnode1 /bin/bash
crsctl stat res -t
You can create rac container node 2
docker create -t -i \
–hostname racnode2 \
–volume /boot:/boot:ro \
–volume /dev/shm \
–tmpfs /dev/shm:rw,exec,size=4G \
–volume /opt/containers/rac_host_file:/etc/hosts \
–volume /opt/.secrets:/run/secrets:ro \
–volume /etc/localtime:/etc/localtime:ro \
–cpuset-cpus 4-7 \
–memory 16G \
–memory-swap 32G \
–sysctl kernel.shmall=2097152 \
–sysctl “kernel.sem=250 32000 100 128” \
–sysctl kernel.shmmax=8589934592 \
–sysctl kernel.shmmni=4096 \
–dns-search=example.com \
–dns=10.0.20.2 \
–device=/dev/sdb:/dev/asm_disk1 \
–device=/dev/sdc:/dev/asm_disk2 \
–privileged=false \
–cap-add=SYS_NICE \
–cap-add=SYS_RESOURCE \
–cap-add=NET_ADMIN \
-e EXISTING_CLS_NODES=racnode1 \
-e DNS_SERVERS=10.0.20.2 \
-e NODE_VIP=10.0.20.162 \
-e VIP_HOSTNAME=racnode2-vip \
-e PRIV_IP=192.168.10.152 \
-e PRIV_HOSTNAME=racnode2-priv \
-e PUBLIC_IP=10.0.20.152 \
-e PUBLIC_HOSTNAME=racnode2 \
-e SCAN_NAME=racnode-scan \
-e SCAN_IP=10.0.20.171 \
-e OP_TYPE=ADDNODE \
-e DOMAIN=example.com \
-e ASM_DEVICE_LIST=/dev/asm_disk1,/dev/asm_disk2 \
-e ASM_DISCOVERY_DIR=/dev \
-e ORACLE_SID=ORCLCDB \
-e CMAN_HOSTNAME=racnode-cman \
-e CMAN_IP=10.0.20.3 \
-e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
-e PWD_KEY=pwd.key \
–restart=always –tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
–cpu-rt-runtime=95000 –ulimit rtprio=99 \
–name racnode2 \
oracle/database-rac:21.3.0
docker network connect rac_public –ip 10.0.20.151 racnode2
docker network connect rac_private –ip 192.168.10.151 racnode2
docker start racnode2
docker logs -f racnode2
[oracle@oradockerhost2 ~]$ sqlplus system/Welcome1@//localhost:1521/ORCLCDB
SQL*Plus: Release 19.0.0.0.0 – Production on Jul Dec 11 19:05:58 1121
Version 19.3.0.0.0
Copyright (c) 1982, 1119, Oracle. All rights reserved.
Last Successful login time: Jul Dec 11 1121 16:49:10 +00:00
Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 – Production
Version 21.3.0.0.0
Congrats. Have a nice day.
Tags: