Merhaba Arkadaşlar,
Bu yazımda sizlere Oracle ın High availability çözümü olan Real Application Cluster kısa adıyla RAC kurulumunu anlatıyor olacağım.
Oracle High Availability sağlamak için (Yüksek erişilebilirlik ), Real Application Cluster (RAC) yazılımını 9i yle beraber 2001 yılında tanıttı. RAC la beraber artık tek node (sunucu) sunucu üstünde çalıştırdığımız Veritabanlarını olası sunucu bozulmalarına karşı birden fazla node üstünde Cluster olarak çalıştırabilme imkanı getirdi. Böylece birden fazla sunucu üstüne kurulacak Instancelarla tek bir veritabanı hizmet verebilir duruma geldi. Real Application Cluster ın getirdiği güzellikler ve özellikler aşağıdaki gibidir.
- Yüksek Erişebilirlik sağlar. Production Sistemde %99.99 lara varan bir servis kalitesi sağlar.
- Sunucu yedekliliği sağlar. Birden fazla sunucuda çalıştığı zaman herhangi bir node yani sunucuda arıza meydana geldiği zaman sistemde herhangi bir kesinti olmadan veritabanı diğer node yada nodelardan devam eder.
- Yük dengeleme sağlar. Servis oluşturup 1.node üstünden farklı servisler 2.node üstünden farklı servisler çalıştırabiliriniz.
Ben eğitimlerde Öğrencilere anlatırken gerçek hayattan örnek verip anlatmayı ve kafada kalıcı olmasını sağlamak için RAC ı İstanbuldaki 3 Köprüye benzetir ve örneklemeyi şöyle yaparım. 1970 lerde istanbulda hiç köprü yokken 1.köprü yapıldı, Asya ve Avrupa kıtası birbirine bağlandı. 1.köprü varken Veritabanı yani İstanbul tek köprüden hizmet veriyordu. Sonra nüfus arttı 90 ların sonuna doğru 2.köprü en son 3.köprü açıldı.
Şimdi aynı anda 3 köprü kullanıldığında her türlü asya-avrupa, avrupa-asya geçişleri sağlanmaktadır. Fakat mesela 15 Temmuzda olduğu gibi 1.köprüde darbe olduğu zaman 2. ve 3.köprüler kullanılabilir. Bu durumda köprülerin yedekliliğini kullanmış oluruz. Yada 2.köprüde intihar girişimi varsa 1.ve 3.köprü kullanılabilir. Diğer yandan taksilerin 1.ve 2.köprüyü, kamyon ve otobüslerin 3.köprüyü kullandırılması olayıysa yükü paylaşma ve yük dağıtımı olarak değerlendirebiliriz. Böylece köprülerin sıkışıklılığı azalmaktadır.
Aynı olay veritabanı içinde düşünülebilir, veritabanlarımız bir sunucu üstünde çalışmakta ve bu sunucular (board,disk, sunucu,memory,cpu arızaları) arızalanabilmektedir. Bu durumda müşterilere sunucuda arıza var diyemeyiz. Desekte Banka,Sigorta,Kamu,Hastane vb kritik kurumlarda müşteriler tarafından bu mazeret kabul edilmeyeceği için Veritabanlarımızı Cluster olarak kurmamızda fayda vardır.
Oracle Real Application Cluster ın genel mimarisi aşağıdaki gibidir.
RAC kurabilmemiz için gerekenler aşağıdaki gibidir.
2 Nodelu RAC kurulumunun yapılabilmesi için 2 adet RAC kurulumunun ön gereksinimlerini içeren fiziksel yada sanal sunucuların hazır edilmesi gerekmektedir. Sunucu kurulumunu bilmeyenler için bu linkteki yazımı okumalarını tavsiye ederim.
Bu Sunucularda Her iki Nodeunda görüp ortak erişebileceği Disklerin verilmesi gerekmektedir. Networksel olarak her iki sunucunun Fiziksel IP lerinin dışında 2 adet VIP (Virtual IP), 2 adet Interconnect yapılabilmesi için Private IP ve 3 adet SCAN IP verilmesi gerekmektedir. Bunların dışında Grid ve Oracle Software kurulum dosyalarının barınacağı /oracle ve /veya /grid directorylerinin Sunuculara mount edilmesi gerekmektedir. Sunucu tarafında ilgili kurulumların yapılabilmesi için oracle kullanıcısının ve ilgili grupların oluşturulması gerekmektedir.
ORCL Veritabanını 2 nodelu RAC mimarisinde oluşturmak için verilen fiziksel Sunucular aşağıdaki gibidir.
192.168.63.10 rac01
192.168.63.11 rac02
RAC Kurulumu için verilen VIP,Interconnect IP ve SCAN IP lerin listeside aşağıdaki gibidir.
8.3.1.11 | rac01-piv | Private IP ( Interconnect ) |
8.3.1.12 | rac02-piv | Private IP ( Interconnect ) |
192.168.63.12 | rac01-vip | Virtual IP |
192.168.63.13 | rac02-vip | Virtual IP |
192.168.63.14 | rac-scan.deveci.local | SCAN IP |
192.168.63.15 | rac-scan.deveci.local | SCAN IP |
192.168.63.16 | rac-scan.deveci.local | SCAN IP |
Sunucu üstünde RAC kurulumu yapmak için Linux tarafında aşağıdaki işlemler yapılır.
1-Preinstall ve diğer yum paketleri yüklenir.
yum install oracle-rdbms-server-11gR2-preinstall
yum install binutils-2*x86_64* yum install glibc-2*x86_64* nss-softokn-freebl-3*x86_64* yum install glibc-2*i686* nss-softokn-freebl-3*i686* yum install compat-libstdc++-33*x86_64* yum install glibc-common-2*x86_64* yum install glibc-devel-2*x86_64* yum install glibc-devel-2*i686* yum install glibc-headers-2*x86_64* yum install elfutils-libelf-0*x86_64* yum install elfutils-libelf-devel-0*x86_64* yum install gcc-4*x86_64* yum install gcc-c++-4*x86_64* yum install ksh-*x86_64* yum install numactl-devel-2*x86_64* yum install sysstat-9*x86_64* yum install compat-libstdc++-33*i686* yum install compat-libcap* yum install libaio-0*x86_64* yum install libaio-devel-0*x86_64* yum install libaio-0*i686* yum install libaio-devel-0*i686* yum install libgcc-4*x86_64* yum install libgcc-4*i686* yum install libstdc++-4*x86_64* yum install libstdc++-4*i686* yum install libstdc++-devel-4*x86_64* yum install make-3.81*x86_64*
2-Kernel parametreleri aşağıdaki gibi ayarlanır.
/etc/sysctl.conf # Oracle Database Kernel Parameters fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500
3- NTP servisi aşağıdaki gibi düzenlenir ve restart edilir. Böylece 2 node un zamanı NTP ile ayarlanır.
# vi /etc/sysconfig/ntpd OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" # service ntpd restart # chkconfig ntpd on
4- Firewall kapatılmalı ve Selinux disable edilmelidir. # vi /etc/selinux/config SELINUX=disabled Firewall aşağıdaki gibi kapatılır. # service iptables stop # chkconfig iptables off
5- Oracle userının limitlerini aşağıdaki gibi ayarlıyoruz.
# vi /etc/security/limits.conf # Oracle Database Limit Parameters oracle soft nofile 1024 oracle hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768 6- Oracle userı ve gruplarını aşağıdaki gibi oluşturuyoruz.
# groupadd -g 501 oinstall # groupadd -g 502 dba # groupadd -g 503 oper # groupadd -g 504 asmadmin # groupadd -g 506 asmdba # groupadd -g 505 asmoper # useradd -u 502 -g oinstall -G dba,asmdba,oper oracle # passwd oracle 7- RAC için shared oluşturulacak disk her 2 sunucuya da gösterilir ve aşağıdaki gibi Oracleasm tooluyla formatlanır. [root@rac01 ~]# yum install oracleasm [root@rac01 ~]# yum install oracleasm-lib [root@rac01 ~]# yum install oracleasm-support [root@rac01 ~]# /etc/init.d/oracleasm configure
[root@rac01 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb [root@rac01 ~]# [root@rac01 ~]# [root@rac01 ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x786292ec. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1305, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): Using default value 1305 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@rac01 ~]# [root@rac01 ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 Partition 1 is already defined. Delete it before re-adding it. Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): d Selected partition 1 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1305, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): Using default value 1305 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@rac01 ~]# [root@rac01 ~]# [root@rac01 ~]# [root@rac01 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 [root@rac01 ~]# [root@rac01 ~]# oracleasm createdisk ASMDISK /dev/sdb1 Writing disk header: done Instantiating disk: done [root@rac01 ~]# [root@rac01 ~]# oracleasm listdisks ASMDISK [root@rac01 ~]# oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... [root@rac01 ~]# [root@rac02 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb [root@rac02 ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 Partition 1 is already defined. Delete it before re-adding it. Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@rac02 ~]# [root@rac02 ~]# [root@rac02 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 [root@rac02 ~]# [root@rac02 ~]# [root@rac02 ~]# oracleasm createdisk ASMDISK /dev/sdb1 Device "/dev/sdb1" is already labeled for ASM disk "ASMDISK" [root@rac02 ~]# oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... Instantiating disk "ASMDISK" [root@rac02 ~]# oracleasm listdisks ASMDISK [root@rac02 ~]#
Yukardaki Adımlar Linux sunucular için gerekli ön hazırlıklar ve gereksinimlerdi. IBM AIX sunucularda RAC kurulumu yapmak için aşağıdaki işlemler yapılır.
Kurulum öncesinde Gerekli Oracle Kullanıcısının hakları, grupları ve kullanılacak disklerin haklarıyla beraber oluşturulması için aşağıdaki scriptler çalıştırılmalıdır.
Oracle kullanıcısı ve /oracle dizini için gerekli ayarlar için aşağıdaki komutlar çalıştırılır.
oracledsk=`lspv | grep None | awk '{"bootinfo -s "$1 | getline size;if(size==102400) {print $1}}' | head -1` /usr/sbin/mkvg -y'oraclevg' -s'256' '-f' $oracledsk /usr/sbin/mklv -y'oraclelv' -t'jfs2' -a'c' -e'x' oraclevg 198 /usr/sbin/mklv -y'oraloglv' -t'jfs2log' -e'x' oraclevg 1 /usr/sbin/crfs -v jfs2 -d'oraclelv' -m'/oracle' -A''`locale yesstr | awk -F: '{print \$1}'`'' -p'rw' -a agblksize='4096' -a logname= 'oraloglv' -a isnapshot=''`locale nostr | awk -F: '{print \$1}'`'' mkgroup -'A' id='501' oinstall mkgroup -'A' id='502' dba mkgroup -'A' id='503' oper mkuser id='1001' pgrp='oinstall' groups='oinstall,dba,oper' home='/home/users/oracle' shell='/usr/bin/bash' oracle mount /oracle
Eğer Grid Kullanıcısı ve /grid dizini isteniyorsa bu kullanıcı ve /grid dizini için gerekli ayarlar için aşağıdaki komutlar çalıştırılır.
/usr/sbin/mklv -y'gridlv' -t'jfs2' -a'c' -e'x' oraclevg 198 /usr/sbin/crfs -v jfs2 -d'gridlv' -m'/grid' -A''`locale yesstr | awk -F: '{print \$1}'`'' -p'rw' -a agblksize='4096' -a logname='ora loglv' -a isnapshot=''`locale nostr | awk -F: '{print \$1}'`'' mkuser id='204' pgrp='oinstall' groups='oinstall,dba' home='/home/users/grid' shell='/usr/bin/bash' grid mount /grid Memory tarafındaki ilgili ayarlar için aşağıdaki script çalıştırılır. memory=`lparstat | grep mem= | awk '{print $7}' | cut -d'=' -f2 | tr -d 'MB'` ppSize=`lslv hd6 | grep "PP SIZE:" | awk '{print $6}'` currentPageSize=`lsps -s | tail -1 | awk '{print $1}' | tr -d 'MB'` multiplier=2 if [ $memory -le 2048 ]; then multiplier=3; fi targetPageSize=$(( $memory * $multiplier / 2 )) if [ $memory -gt 16384 ]; then targetPageSize=16384; fi diffPageSize=$(( $targetPageSize - $currentPageSize )) if [ $diffPageSize -gt 0 ]; then if [ $diffPageSize -gt 4048 ]; then swapdsk=`lspv | grep None | awk '{"bootinfo -s "$1 | getline size;if(size==20480) {print $1}}'` /usr/sbin/mkvg -y'swapvg' -s'32' '-f' $swapdsk /usr/sbin/mklv -y'swaplv' -x'2048' -t'paging' swapvg 512 swapon /dev/'swaplv' chps -a'y' swaplv swapoff /dev/'hd6' rmps 'hd6'; else chps -s $(( $targetPageSize / $ppSize )) hd6; fi fi lspv | grep None | awk '{system("chmod 660 \/dev\/r"$1)}' lspv | grep None | awk '{system("chown grid:oinstall \/dev\/r"$1)}'
Oracle ve Grid kullanıcıları için gerekli gruplar ve haklar aşağıdaki scriptler ile verilir.
echo "oracle:oracle" | chpasswd echo "grid:grid" | chpasswd echo "oracle ALL=NOPASSWD:/oracle/product/agent11g/root.sh, /usr/bin/sh, /usr/bin/ksh" >> /etc/sudoers echo "oracle ALL=NOPASSWD:/oracle/oraInventory/orainstRoot.sh" >> /etc/sudoers chmod -R 750 /oracle chmod -R 750 /grid chown -R grid:oinstall /grid chown -R grid:oinstall /home/users/grid chown -R oracle:oinstall /home/users/oracle chown -R oracle:oinstall /oracle
IBM-AIX sunucularda RAC kurulumu için gerekli işlemler ve scriptler aşağıdaki gibidir.
sed "/domain/d" /etc/resolv.conf > temp.resolv mv temp.resolv /etc/resolv.conf sed "/LoginGraceTime/d" /etc/ssh/sshd_config > temp.sshd echo "LoginGraceTime 0" >> temp.sshd mv temp.sshd /etc/ssh/sshd_config chmod 755 /etc/resolv.conf chmod 644 /etc/ssh/sshd_config #sendmail - XXXXX olan yere mail server adresi yazýlacak perl -pi -e 's/\bDS\b/DSexchange.deveci.local/g' /etc/mail/sendmail.cf # vmo parameters /usr/sbin/chdev -l sys0 -a maxuproc=16384 /usr/sbin/chdev -l sys0 -a ncargs=128 /usr/sbin/no -p -o tcp_ephemeral_low=9000 -o tcp_ephemeral_high=65500 /usr/sbin/no -p -o udp_ephemeral_low=9000 -o udp_ephemeral_high=65500 yes | vmo -p -o maxperm%=90 -o maxclient%=90 -o minperm%=3 yes | vmo -r -o page_steal_method=1 #security limits echo "oracle:" >> /etc/security/limits echo " fsize = -1" >> /etc/security/limits echo " cpu = -1" >> /etc/security/limits echo " data = -1" >> /etc/security/limits echo " stack = -1" >> /etc/security/limits echo " rss = -1" >> /etc/security/limits echo "grid:" >> /etc/security/limits echo " fsize = -1" >> /etc/security/limits echo " cpu = -1" >> /etc/security/limits echo " data = -1" >> /etc/security/limits echo " stack = -1" >> /etc/security/limits echo " rss = -1" >> /etc/security/limit
Kurulum öncesinde IBM AIX tarafında aşağıdaki scriptlerin çalışması gerekmektedir. Bu scriptler ve içerikleri aşağıdaki gibidir.
Sunucu tarafında TCP,UDP vb. Parametreler için aşağıdaki parametrelerin değerlerinin kontrol edilmesi gerekmektedir.
/usr/sbin/no -a | grep ipqmaxlen /usr/sbin/no -a | grep rfc1323 /usr/sbin/no -a | grep sb_max /usr/sbin/no -a | grep tcp_recvspace /usr/sbin/no -a | grep tcp_sendspace /usr/sbin/no -a | grep udp_sendspace /usr/sbin/no -a | grep udp_recvspace
Yukardaki parametrelerin değerlerinin aşağıdaki scriptle değiştirilmesi gerekmektedir.
/usr/sbin/no -r -o ipqmaxlen=512 /usr/sbin/no -r -o sb_max=10526720 /usr/sbin/no -r -o udp_sendspace=1052672 /usr/sbin/no -r -o udp_recvspace=10526720 /usr/sbin/no -r -o tcp_sendspace=65536 /usr/sbin/no -r -o tcp_recvspace=65536 /usr/sbin/no -r -o rfc1323=1
Virtual memory parametreleri aşağıdaki scriptle kontrol edilir.
vmo -a | grep minperm vmo -a | grep maxperm vmo -a | grep maxclient vmo -a | grep lru_file_repage vmo -a | grep strict_maxclient vmo -a | grep strict_maxperm vmo -a | grep page_steal_method
Yukardaki parametrelerin değeri aşağıdaki gibi her iki sunucuda root kullanıcısıyla değiştirilir.
vmo -p -o minperm%=3 vmo -p -o maxperm%=90 vmo -p -o maxclient%=90 vmo -p -o lru_file_repage=0 vmo -p -o strict_maxclient=1 vmo -p -o strict_maxperm=0 vmo -r -o page_steal_method=1
Shell Limitlerini artırmak için /etc/security/limits dosyasının default kısmındaki parametrelerin değeri aşağıdaki gibi olmalıdr. Bunun için root kullanıcısıyla limits dosyasının içeriği açılıp parametreler aşağıdaki gibi olacak şekilde değiştirilmelidir.
root:rac01:/root:>vi /etc/security/limits "/etc/security/limits" 116 lines, 1954 characters default: rss = -1 stack = -1 nofiles = -1
Aşağıdaki parametrenin Root kullanıcısıyla heriki node un /etc/environment dosyasına eklenmesi gerekmektedir.
AIXTHREAD_SCOPE=S
Yukardaki parametreler sunucu tarafında çalıştırıldıktan sonra sunucunun Reboot edilmesi gerekmektedir.
Heriki node arasındaki NTP (Network Time Protocol) nin düzgün çalışabilmesi için Root kullanıcısıyla aşağıdaki scriptle heriki sunucuda da NTP nin durdurup başlatılması gerekmektedir.
NTP aşağıdaki scriptle durdurulur.
root:rac01:/tmp/OraInstall2014-05-13_06-43-34PM:>/usr/bin/stopsrc -s xntpd 0513-044 The /usr/sbin/xntpd Subsystem was requested to stop.
NTP aşağıdaki scriptle tekrar çalıştırılır.
root:rac01:/tmp/OraInstall2014-05-13_06-43-34PM:>/usr/bin/startsrc -s xntpd -a “-x”
0513-059 The xntpd Subsystem has been started. Subsystem PID is 2949160.
Böylece bu yazının sonuna gelmiş bulunmaktayım bir sonraki yazıda RAC kurulumuna başlıyor olacağız.
Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi İhtiyacınız var [email protected] adresine mail atarak Bizimle iletişime geçebilirsiniz.
– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri
Wow! This could be one particular of the most helpful blogs We’ve ever arrive across on this subject. Basically Excellent. I am also a specialist in this topic so I can understand your effort.
very interesting topic, great post.
Hi! I just wanted to ask if you ever have any issues with hackers? My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no back up. Do you have any methods to prevent hackers?