DOCKER İLE RAC KURULUMU
Oracle Real Application Clusters (Oracle RAC), ödüllü Oracle Database Enterprise Edition için bir seçenektir. Oracle RAC, tüm iş uygulamaları için yüksek düzeyde ölçeklenebilir ve kullanılabilir veritabanı çözümleri sağlamak için geleneksel paylaşılan hiçbir şey ve paylaşılan disk yaklaşımlarının sınırlamalarının üstesinden gelen, paylaşılan bir önbellek mimarisine sahip bir küme veritabanıdır. Oracle RAC, bağımsız sunucuların tek bir sistem olarak işbirliği yapmaları için kümelenmesini sağlayan taşınabilir bir küme yazılımı olarak Oracle Clusterware’i ve tüm sunucular ve depolama platformları arasında tutarlı olan basitleştirilmiş depolama yönetimi sağlamak için Oracle Otomatik Depolama Yönetimi’ni (Oracle ASM) kullanır. Oracle Clusterware ve Oracle ASM, her iki çözümü de kurulumu kolay bir yazılım paketinde bir araya getiren Oracle Grid Infrastructure’ın bir parçasıdır.
Docker Kurulumu
sudo yum update
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum updatevi /etc/yum.repos.d/docker-ce.repo #(En üste eklenir)
[centos-extras]
name=Centos extras — $basearch
baseurl=http://mirror.centos.org/centos/7/extras/x86_64
enabled=1
gpgcheck=1
gpgkey=http://centos.org/keys/RPM-GPG-KEY-CentOS-7
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable dockersudo groupadd docker
/usr/sbin/groupadd -g 54321 oinstall
/usr/sbin/groupadd -g 54322 dba
useradd -u 501 -c "oracle" -g oinstall -G dba,docker -d /home/oracle/ -m oracledocker login container-registry.oracle.com
#oracle mail adresi
#şifresi#docker-hub a bağlanmak isterseniz
#docker login
#docker username
#şifre
#https://container-registry.oracle.com/ > Bu adrese gidip Enterprise izni verilmesi gerekli
Docker ile Rac Database Kurulumu
# bu siteden gerekli dosyaları Dockerfile içerisindeki INSTALL_FILE_1=”LINUX.X64_213000_client.zip” gibi aynı isme sahip yükleme dosyasını /tmp dizin altına indirin
#https://www.oracle.com/database/technologies/oracle21c-linux-downloads.html#LINUX.X64_213000_db_home.zip
#LINUX.X64_213000_grid_home.zip
#LINUX.X64_213000_client.zip
Bu anlatımımızda networkunuz SSL bağlantısı ile kontrol edilme durumuyla birlikte anlatıldı. Eğer bu şekilde bir durumunuz yoksa SSL dosyalarını kopyalama ve SSL adımlarını geçebilirsiniz.
cd /tmp/
git clone https://github.com/oracle/docker-images.git
cp LINUX.X64_213000_client.zip /tmp/docker-images/OracleDatabase/RAC/OracleConnectionManager/dockerfiles/21.3.0/
cp LINUX.X64_213000_grid_home.zip /tmp/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/21.3.0/
cp LINUX.X64_213000_db_home.zip /tmp/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/21.3.0/#x cert dosyasını Dockerfile dosyalarının yanına koyun (sertifika kullanmıyorsanız sertifikaya ait tüm aşamaları atlayınız)
cp /etc/pki/ca-trust/source/anchors/x_root_ca_linux.crt /tmp/docker-images/OracleDatabase/RAC/OracleConnectionManager/dockerfiles/21.3.0/
cp /etc/pki/ca-trust/source/anchors/x_root_ca_linux.crt /tmp/docker-images/OracleDatabase/RAC/OracleDNSServer/dockerfiles/latest/
cp /etc/pki/ca-trust/source/anchors/x_root_ca_linux.crt /tmp/docker-images/OracleDatabase/RAC/OracleRACStorageServer/dockerfiles/19.3.0/
cp /etc/pki/ca-trust/source/anchors/x_root_ca_linux.crt /tmp/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/21.3.0/vi /tmp/docker-images/OracleDatabase/RAC/OracleConnectionManager/dockerfiles/21.3.0/Dockerfile
ENV CERT=x_root_ca_linux.crt \
CERTPATH=/etc/pki/ca-trust/source/anchors
COPY $CERT $CERTPATH/
RUN update-ca-trust
vi /tmp/docker-images/OracleDatabase/RAC/OracleDNSServer/dockerfiles/latest/Dockerfile
ENV CERT=x_root_ca_linux.crt \
CERTPATH=/etc/pki/ca-trust/source/anchors
COPY $CERT $CERTPATH/
RUN update-ca-trust
vi /tmp/docker-images/OracleDatabase/RAC/OracleRACStorageServer/dockerfiles/19.3.0/Dockerfile
ENV CERT=x_root_ca_linux.crt \
CERTPATH=/etc/pki/ca-trust/source/anchors
COPY $CERT $CERTPATH/
RUN update-ca-trust
vi /tmp/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/21.3.0/Dockerfile
ENV CERT=x_root_ca_linux.crt \
CERTPATH=/etc/pki/ca-trust/source/anchors
COPY $CERT $CERTPATH/
RUN update-ca-trust
Şuan ki işlemimiz uzun olduğu için bir script oluşturarak script bitene kadar bir mola verebiliriz.(gerçekten çok uzun sürüyor:) )
#!/bin/bashcd /tmp/docker-images/OracleDatabase/RAC/OracleConnectionManager/dockerfiles/
./buildContainerImage.sh -v 21.3.0 >/tmp/docker-images/OracleDatabase/RAC/ConMan.log
sleep 5cd /tmp/docker-images/OracleDatabase/RAC/OracleDNSServer/dockerfiles/
./buildContainerImage.sh -v latest >/tmp/docker-images/OracleDatabase/RAC/DNS.log
sleep 5cd /tmp/docker-images/OracleDatabase/RAC/OracleRACStorageServer/dockerfiles/
./buildDockerImage.sh -v 19.3.0 >/tmp/docker-images/OracleDatabase/RAC/Storage.log
sleep 5cd /tmp/docker-images/OracleDatabase/RAC/OracleRealApplicationClusters/dockerfiles/
./buildContainerImage.sh -v 21.3.0 >/tmp/docker-images/OracleDatabase/RAC/App.log
sleep 5
Tüm container lar oluştuktan sonra asıl kurulum burada başlamaktadır.
RAC için public ağ oluşturma : rac_pub1_nw
docker network create --driver=bridge --subnet=172.16.1.0/24 rac_pub1_nw
oluşturulan rac_pub1_nw ile racnode-cman1 oluşturma.
/usr/bin/docker run -d --hostname racnode-cman1 --dns-search=example.com \
--network=rac_pub1_nw --ip=172.16.1.15 \
-e DOMAIN=example.com -e PUBLIC_IP=172.16.1.15 \
-e PUBLIC_HOSTNAME=racnode-cman1 -e SCAN_NAME=racnode-scan \
-e SCAN_IP=172.16.1.70 --privileged=false \
-p 1521:1521 --name racnode-cman oracle/client-cman:21.3.0
log kontrol
docker logs racnode-cman
racdns container oluşturma.
docker run -d --name racdns \
--hostname rac-dns \
--dns-search="example.com" \
--cap-add=SYS_ADMIN \
--network rac_pub1_nw \
--ip 172.16.1.25 \
--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
log kontrol
docker logs -f racdns
RAC için private ağ oluşturma : rac_priv1_nw
docker network create --driver=bridge --subnet=192.168.57.0/24 rac_priv1_nw
NFS kullanacağımız için gerekli paket yüklenir.
yum -y install nfs-utils
racnode-storage oluşturma.
docker run -d -t --hostname racnode-storage \
--dns-search=example.com --cap-add SYS_ADMIN \
--volume /docker_volumes/asm_vol/$ORACLE_SID:/oradata --init \
--network=rac_priv1_nw --ip=192.168.57.25 --tmpfs=/run \
--volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
--name racnode-storage oracle/rac-storage-server:19.3.0
log kontrol
docker logs -f racnode-storage
#nfs Volume IMPORTANT: If you are not using 192.168.57.0/24 subnet then you need to change addr=192.168.57.25 based on your environment.
NFS için docker volume oluşturuyoruz.
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.57.0,rw,bg,hard,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0 \
--opt device=:/oradata \
racstorage
Gereken RAM kullanımı için yapılandırmaları yapıyoruz.
cat >> /etc/sysctl.conf <<EOF
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
EOFsysctl -a
sysctl -p
Yukarıda public ve private ağ oluşturduk fakat bu kısım diğer tüm kısımları etkilediği için kontrol ediniz. Buradaki fark farklı şekilde ağ oluşturmamızın mümkün olması.
docker network create --driver=bridge --subnet=172.16.1.0/24 rac_pub1_nw
docker network create --driver=bridge --subnet=192.168.57.0/24 rac_priv1_nw
docker network create -d macvlan --subnet=172.16.1.0/24 --gateway=172.16.1.1 -o parent=ens33 rac_pub1_nw
docker network create -d macvlan --subnet=192.168.57.0/24 --gateway=192.168.57.1 -o parent=ens34 rac_priv1_nwvi /usr/lib/systemd/system/docker.service
— cpu-rt-runtime=950000
systemctl daemon-reload
systemctl stop docker
systemctl start docker
Docker container ların şifrelerini belirleme adımları
mkdir /opt/containers
touch /opt/containers/rac_host_file
mkdir /opt/.secrets/
openssl rand -hex 64 -out /opt/.secrets/pwd.key
vi /opt/.secrets/common_os_pwdfile
'caner'
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.keysh /opt/scripts/startup/resetOSPassword.sh --help
sh /opt/scripts/startup/resetOSPassword.sh --op_type reset_grid_oracle --pwd_file common_os_pwdfile.enc --secret_volume /run/secrets --pwd_key_file pwd.key
Burada oluşturduğumuz storage yapısına uygun şekilde racnode1 i oluşturuyoruz 2 çeşit oluşum yapabiliriz ilkinde reel ikincisinde ise docker da oluşturduğumuz nfs volume ile yapabiliriz. Biz ikincisini kullanmış olduk fakat birincisinide gösteriyoruz.
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 \
--dns=172.16.1.25 \
--dns-search=example.com \
--device=/dev/xvde:/dev/asm_disk1 \
--device=/dev/xvdf:/dev/asm_disk2 \
--privileged=false \
--cap-add=SYS_NICE \
--cap-add=SYS_RESOURCE \
--cap-add=NET_ADMIN \
-e DNS_SERVERS="172.16.1.25" \
-e NODE_VIP=172.16.1.160 \
-e VIP_HOSTNAME=racnode1-vip \
-e PRIV_IP=192.168.57.150 \
-e PRIV_HOSTNAME=racnode1-priv \
-e PUBLIC_IP=172.16.1.150 \
-e PUBLIC_HOSTNAME=racnode1 \
-e SCAN_NAME=racnode-scan \
-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-cman1 \
-e CMAN_IP=172.16.1.15 \
-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 Volume ile racnode1 oluşturma
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 \
--dns=172.16.1.25 \
--dns-search=example.com \
--privileged=false \
--volume racstorage:/oradata \
--cap-add=SYS_NICE \
--cap-add=SYS_RESOURCE \
--cap-add=NET_ADMIN \
-e DNS_SERVERS="172.16.1.25" \
-e NODE_VIP=172.16.1.160 \
-e VIP_HOSTNAME=racnode1-vip \
-e PRIV_IP=192.168.57.150 \
-e PRIV_HOSTNAME=racnode1-priv \
-e PUBLIC_IP=172.16.1.150 \
-e PUBLIC_HOSTNAME=racnode1 \
-e SCAN_NAME=racnode-scan \
-e OP_TYPE=INSTALL \
-e DOMAIN=example.com \
-e ASM_DISCOVERY_DIR=/oradata \
-e ASM_DEVICE_LIST=/oradata/asm_disk01.img,/oradata/asm_disk02.img,/oradata/asm_disk03.img,/oradata/asm_disk04.img,/oradata/asm_disk05.img \
-e CMAN_HOSTNAME=racnode-cman1 \
-e CMAN_IP=172.16.1.15 \
-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
Başlatmadan önce tekrardan bir network ayarlarını kontrol edelim.
docker network disconnect bridge racnode1
docker network connect rac_pub1_nw --ip 172.16.1.150 racnode1
docker network connect rac_priv1_nw --ip 192.168.57.150 racnode1docker start racnode1
docker logs -f racnode1
1. node da sıkıntı olmadığı durumda artık 2. node u çalıştırabiliriz. Docker NFS volume ile oluşturuldu.
docker create -t -i \
--hostname racnode2 \
--volume /dev/shm \
--tmpfs /dev/shm:rw,exec,size=4G \
--volume /boot:/boot:ro \
--dns-search=example.com \
--volume /opt/containers/rac_host_file:/etc/hosts \
--volume /opt/.secrets:/run/secrets:ro \
--dns=172.16.1.25 \
--dns-search=example.com \
--privileged=false \
--volume racstorage:/oradata \
--cap-add=SYS_NICE \
--cap-add=SYS_RESOURCE \
--cap-add=NET_ADMIN \
-e DNS_SERVERS="172.16.1.25" \
-e EXISTING_CLS_NODES=racnode1 \
-e NODE_VIP=172.16.1.161 \
-e VIP_HOSTNAME=racnode2-vip \
-e PRIV_IP=192.168.57.151 \
-e PRIV_HOSTNAME=racnode2-priv \
-e PUBLIC_IP=172.16.1.151 \
-e PUBLIC_HOSTNAME=racnode2 \
-e DOMAIN=example.com \
-e SCAN_NAME=racnode-scan \
-e ASM_DISCOVERY_DIR=/oradata \
-e ASM_DEVICE_LIST=/oradata/asm_disk01.img,/oradata/asm_disk02.img,/oradata/asm_disk03.img,/oradata/asm_disk04.img,/oradata/asm_disk05.img \
-e ORACLE_SID=ORCLCDB \
-e OP_TYPE=ADDNODE \
-e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
-e PWD_KEY=pwd.key \
--tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--cpu-rt-runtime=95000 \
--ulimit rtprio=99 \
--restart=always \
--name racnode2 \
oracle/database-rac:21.3.0
Tekrardan racnode2 için network kontrolü
docker network disconnect bridge racnode2
docker network connect rac_pub1_nw --ip 172.16.1.151 racnode2
docker network connect rac_priv1_nw --ip 192.168.57.151 racnode2docker start racnode2
docker logs -f racnode2
Node un içerisine girmek için aşağıdaki komutu kullanabilirsiniz.
docker exec -i -t racnode2 /bin/bash
Connection String;
system/<password>@//<docker_host>:1521/<ORACLE_SID>
(sqlplus sys@racnode1:1521/ORCLCDB as sysdba)