ტაკს... ოდნავ ვსერიოზულდებით და ვაგრძელებთ.
დღეისათვის მენიუშია Oracle RAC (Real Application Cluster)
კლასტერების ტიპებზე თავს არ შეგაწყენთ, მხოლოდ ვიტყვი იმას, რომ Oracle RAC მიეკუთვნება HA ტიპის Application Level კლასტერებს, ანუ კლასტერინგს უზრუნველყოფს პროგრამა, და არა სისტემა.
დაგვჭირდება გარკვეული შეთანხმებები....
გვაქვს ორი მანქანა(მინიმუმ) ორი ქსელის ბარათით ორივე. ერთი შიდა ინტერკომუნიკაციისათვის, მეორე გარე სამყაროსთან საურთიერთოდ.
სახელები დავარქვათ შესაბამისად ora1 და ora2 და შევთანხმდეთ რომ IPებს ვანაწილებთ ასე
ora1
192.168.1.1/24 10.0.1.1/8 10.1.0.1/8
ora2
192.168.1.2/24 10.0.1.2/8 10.1.0.2/8
192.168.1.0/24 ქსელი გამოვიყენოთ მხოლოდ შიდა ურთიერთობისათვის.
თუ საშუალება გვაქვს, გამოვიყენოთ ოპტიკურ-ბოჭკოვანი კაბელი. თუ არა, გიგაბიტიანი ლინკი მაინც....
10.1.0.0/8 ქსელი არის ვირტუალური IPები ანუ VIP მომავალში.
შევთანხმდეთ აგრეთვე, რომ ნებისმიერი წინადადება "ვაყენებთ პაკეტს" ფედორას შემთხვევაში აღნიშნავს apt-get install პაკეტის სახელი, და რჰელზე პაკეტებს ვეძებთ დისკებზე, ანუ სჯობს ოთხივე დისკიდან გადავწეროთ პაკეტები ერთ დასტაში ვინჩესტერზე.
სტორიჯს რაც შეეხება, ანუ ადგილს, სადაც ინახება მონაცემები, და ა.შ., ავიღოთ ან SAN, ან NAS, ან SCSI, ან Firewire ტიპის storage. მოთხოვნა, რომელიც მოგვცემს დიდ საიმედოობას(RAID) და რაც მთავარია მოგვცემს Conncurent Access ის საშუალებას, ანუ მრავალი(ჩვენს კონკრეტულ შემთხვევაში 2 ) აპლიკაცია ერთდროულად ჩაწერს ზედ .
ავიღოთ თეორიულად რაღაც SCSI დისკი 150 გიგაბაიტიანი, რომელიც მიერთებულია ოპტიკით ორივე სერვერზე.
ვაყენებთ რედჰეტს, და ქსელს ვაკონფიგურირებთ შესაბამისად.
დაყენების შემდეგ ვაკეთებთ ასეთ რამეს.
ორივე მანქანაზე /etc/hosts ფაილში ვაკეთებთ შემდეგი ტიპის ჩანაწერებს
127.0.0.1 localhost localhost.localdomain
10.0.1.1 oranode1
10.0.1.2 orande2
192.168.1.1 int-oranode1
192.168.1.2 int-oranode2
10.1.0.1 vip-oranode1
10.1.0.2 vip-oranode2
და ასე ორივეგან.
ეს საჭიროა იმისათვის, რომ არ მოხდეს DNS lookupები და არ დაიკარგოს ამაში დრო, არ მოხდეს ტაიმაუტები და რავიცი....
ყურადღება!!!
მიაქციეთ ყურადღება რომ ჰოსტის სახელი, ანუ ora1,ora2 არ იყოს ნახსენები ამ ფაილში.
ორაკლს ალერგია აქვს ამაზე, და აყრის

9.2.0.1 ვერსიიდან და ზემოთ ორაკლი SysV IPC-სათვის (InterProcess Communication) იყენებს UDP-ს
სამწუხაროდ ლინუქსის კერნელში ნაგულისხმევი პარამეტრები საკმარისი არაა საიმისოდ, რომ უზრუნველყოს ორაკლის გამართული მუშაობა. ანუ, შესაბამისად ვცვლით მათ.
ცვლილებები შეგვაქვს /etc/sysctl.conf ფაილში. ანუ ვამატებთ (და თუ არის ვცვლით) შესაბამის ხაზებს:
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 32768 65000
და რეალურ დროში (გადატვირთვის გარეშე) ვცვლით პარამეტრებს ბრძანებით
sysctl -e -p /etc/sysctl.conf
ფედორას მომხმარებლებისათვის: იმისათვის, რომ "მოვატყუოთ" ინსტალერი და მოვაჩვენოთ მას, რომ გვაქვს RHEL, /etc/redhat-release ფაილის რეზერვირების შემდეგ მასში ვწერთ სტრიქონს
redhat-4
ორაკლის ინსტალერის წიკებისა და მოთხოვნების შესაბამისად ვაუენებთ შემდეგ პაკეტებს და ვრთავთ შემდეგ სერვისებს
rsh-server telnet-server vsftpd
chkconfig --level 35 telnet on
chkconfig --level 35 rsh on
chkconfig --level 35 rlogin on
chkconfig --level 35 vsftpd on
service xinetd restart
service vsftpd restart
ვუშვებთ rsh და rlogin-ს . ამისათვის ვქმნით ფაილს /etc/hosts.equiv პრივილეგიებით, რომლებიც უსაფრთხო იქნება ჩვენთვის...
touch /etc/hosts.equiv
chmod 600 /etc/hosts.equiv
chown root.root /etc/hosts.equiv
და ვწერთ შიგნით
+oranode1 oracle
+oranode2 oracle
+int-oranode1 oracle
+int-oranode2 oracle
ვქმნით სისტემურ ჯგუფებს, დასტებს და მომხმარებლებს , რომლებიც სჭირდება ორაკლს...
mkdir -p /u01/app
groupadd -g 115 dba
useradd -u 175 -g 115 -d /u01/app/oracle -s /bin/bash -c "Oracle Software Owner" -p oracle oracle
chown -R oracle:dba /u01
mkdir -p /u02/oradata/orcl
chown -R oracle:dba /u02
passwd oracle
მას შემდეგ, რაც დავაყენებთ პაროლს მომხმარებელ oracle-ს, შევიცვალოთ ID
su - oracle
და დავაყენოთ სისტემური გარსის ცვლადები ... (და ყენდება ისინი ~/.bash_profile (ჩვენს შემთხვევაში ~ იქნება /home/oracle) -ს ცვლილებით და მასში შემდეგი სტრიქონების ჩამატებით)
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/crs
export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_SID=ora1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
!!! ORACLE_SID პარამეტრი კლასტერის თითოეულ წევრზე უნდა იყოს სხვადასხვა !!!
გავყევით.
ვქმნით დისკის დანაყოფებს სტორიჯზე, რომელიც როგორც მახსოვს (

) ჩვენს შემთხვევაში იყო 150 გიგა.
დავყოთ( რათქმაუნდა რიცხვები თითოეული ჩადგმიდან ჩადგმამდე ვარირებს ვინჩესტერის ზომისა და ადმინისტრატორის მიხედვით) ასეთნაირად.
იმის გათვალისწინებით რომ სერვერის ვინჩესტერი ან SATA იქნება ან SCSI, ვიგულისხმებ რომ ჩვენი საყვარელი სტორიჯი არის sdb მოწყობილობა.
დანაყოფი ფაილური სისტემა ზომა
sdb1 ocfs2 1G
sdb2 asm 25G
sdb3 asm 25G
sdb4 asm დანარჩენი
!!! ყურადღება!!!
დაყოფისათვის ვიყენებთ მხოლოდ ერთ კომპიუტერს და არა ყველას, რომლებიც კლასტერშია.
და თავიდანვე ნუ დაუწყებთ ძებნას ზემოხსენებულ ფაილურ სისტემას. დატოვეთ ის linux ფორმატში.
OCFS2 - არის ორაკლის გადაწყვეტა Oracle Cluster Registry File და CRS Voting Disk ისათვის
OCFS განკუთვნილია 2.2 და 2.4 სერიის კერნელებისათვის და OCFS2 2.6 სათვის
ASM - Automatic Storage Management არის ორაკლის გადაწყვეტა აღდგენითი ფაილებისა და თვით მონაცემთა ბაზების შესანახად.
!! ყურადღება!!
ocfs2 და asm როგორც ფაილური სისტემები, ასევე მათი მომხმარებლის დონის(userspace) პროგრამები არანაირ მხარდაჭერას არ უწევენ SELinux-ს, ამიტომ საჭიროა გამოვრთოთ.
კეთდება ეს ან system-config-securitylevel-იდან, ან /etc/selinux/config ში
SELINUX=Disabled ზე შეცვლით და ბოლოს კომპიუტერის გადატვირთვით.
პრობლემა ეხება როგორც RHEL-ს , ასე ფედორას
ვქაჩავთ ამ ტექსტის დაწერისათვის ბოლო ვერსიას თითოეული საჭირო პროგრამის თუ... მოდულის..
(RHEL ის მომხმარებლებს ეს არ ეხებათ, რადგან მათთვის მითითებულ ბმულებზე მოინახება დაკომპილირებული ვერსიაც, რომელიც, ორაკლის სიტყვებით უკეთესია)
http://oss.oracle.com/projects/ocfs2/http://oss.oracle.com/projects/ocfs2-tools/http://oss.oracle.com/projects/oracleasm/!!! მხოლოდ ფედორას მომხმარებლებისათვის!!!
ვქაჩავთ source ს
http://oss.oracle.com/projects/oracleasm/d...sm-2.0.1.tar.gzhttp://oss.oracle.com/projects/ocfs2-tools...ls-1.2.0.tar.gzhttp://oss.oracle.com/projects/ocfs2/dist/...s2-1.2.0.tar.gzვაყენებთ დამატებით პაკეტებს...
gcc-c++, kernel-devel, glib2-devel, python-devel
tar zxvf ocfs2-1.2.0.tar.gz
cd ocfs2-1.2.0
./configure ; make ; make install
cd ..
tar zxvf ocfs2-tools-1.2.0.tar.gz
cd ocfs2-tools-1.2.0
./configure --prefix=/usr ; make ; make install
mkdir /etc/ocfs2
cp documentation/samples/cluster.conf /etc/ocfs2
ვარედაქტირებთ მას რომ მიიღოს ასეთი სახე (ვიმეორებ მხოლოდ ჩვენი შემთხვევისათვის)
node:
ip_port = 7777
ip_address = 192.168.1.2
number = 0
name = node0
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.1.2
number = 1
name = node1
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2
cp vendor/common/o2cb.init /etc/init.d/o2cb
cp vendor/common/ocfs2.init /etc/init.d/ocfs2
cp vendor/common/o2cb.sysconfig /etc/sysconfig/o2cb
cd /etc/init.d; chkconfig --add o2cb; chkconfig --add ocfs2; cd -
cd ..
tar zxvf oracleasm-2.0.1.tar.gz
cd oracleasm-2.0.1
./configure ; make ; make install
შეცდომას იძლევა ფაილი kernel დასტაში
ვარედაქტირებთ ფაილს oracleasm.c სადაც 290 ხაზის ახლომახლო არის ასეთი სტრიქონები
static struct backing_dev_info memory_backing_dev_info = {
.ra_pages = 0, /* No readahead */
#if 1
.memory_backed = 1, /* Does not contribute to dirty memory */
#else
.capabilities = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
#endif
};
და ვცვლით ასეთნაირზე
static struct backing_dev_info memory_backing_dev_info = {
.ra_pages = 0//, /* No readahead */
//#if 1
// .memory_backed = 1, /* Does not contribute to dirty memory */
//#else
// .capabilities = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
//#endif
};
და make;make install - ს ვუშვებთ თავიდან.
სამწუხაროდ ეს პროცესი არ აყენებს ბოლომდე ყველა იმ პროგრამას, რომელიც ჩვენ გვჭირდება.
ვაყენებთ ხელით.
cd tools/
make ; make install
cp vendor/common/oracleasm.init /etc/init.d
cp vendor/common/oracleasm.sysconfig /etc/sysconfig
cd /etc/init.d;chkconfig --add oracleasm;cd -
დღეისათვის საკმარისია, დავიღალე. ხვალ დანარჩენს დავწერ
* * *
ვაგრძელებთ.
მას შემდეგ, რაც გავაკეთებთ იმას, რაც წერია, დაგვრჩა დავაკონფიგურიროთ სერვისები.
მარა მანამდე...
depmod -a
არც rpmის postinstall და არც make ს სკრიპტები ამას რატომღაც თვითონ არ აკეთებენ.
მივადექით სერვისს.
/etc/init.d/o2cb configure
შეკითხვებზე პასუხი საკმაოდ ადვილია

ვაფორმატებთ სტორიჯის პირველ დანაყოფს როგორც ocfs2.
!! ყურადღება. მოცემული ოპერაცია ხორციელდება კლასტერის მხოლოდ ერთ უჯრედზე (node)
mkfs.ocfs2 -b 4K -C 32K -N 4 -L oradatafiles /dev/sdb1
/etc/fstab-ში ვამატებთ (ყველა უჯრედზე) შემდეგ ხაზს
/dev/sdb1 /u02/oradata/orcl ocfs2 _netdev,datavolume 0 0
და შესაბამისად ყველა უჯრედზე ვუშვებთ ბრძანებას mount -a
ბოლოში შემჩნეულ უნდა იქნას ასეთი ხაზი
/dev/sda1 on /u02/oradata/orcl type ocfs2 (rw,_netdev,datavolume)
ფაილური სისტემების პირველი ნაწილი მორჩა.
მეორე ნაწილში, ანუ სადაც უნდა განვიხილოთ ASM, არის ასეთი სიტუაცია.
გვაქვს ორი ვარიანტი. raw მოწყობილობებით ან პირდაპირ oracleasm-ით.
მიზეზი იმისა, რომ ვირჩევთ მეორეს, არის ის, რომ 2.6 კერნელში raw მოწყობილობები უკვე მოძველებულად ითვლება და მათი გამოყენება მიზანშეწონილი არაა.
ანუ ვიყენებთ native oracleasm-ს.
/etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
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
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [ OK ]
Creating /dev/oracleasm mount point: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]
ვაფორმატებთ დისკის დანაყოფებს (ანუ ეს ოპერაცია მხოლოდ ერთ უჯრედზე სრულდება)
/etc/init.d/oracleasm createdisk VOL1 /dev/sdb2
/etc/init.d/oracleasm createdisk VOL2 /dev/sdb3
/etc/init.d/oracleasm createdisk VOL3 /dev/sdb4
ყველა უჯრედზე ვუშვებთ ბრძანებას
/etc/init.d/oracleasm scandisks
პასუხი უნდა იყოს..
Scanning system for ASM disks [ OK ]
და ბრძანებაზე
/etc/init.d/oracleasm listdisks
ეს
VOL1
VOL2
VOL3
მოვიდა თვით ორაკლის დაყენების დრო...
იმისათვის, რომ დავქაჩოთ თვითონ ბაზა, საჭიროა შევქმნათ ანგარიში ჩვენთვის, რაც საკმაოდ ადვილი გასაკეთებელია და ზედმეტ შრომას ნაკლებად არ მოითხოვს.
ვქაჩავთ ყველაფერს საიტიდან
http://www.oracle.com/technology/software/...1linuxsoft.htmlსაჭიროა არქივების გაშლა...
# su - oracle
$ cd ~oracle/orainstall
$ unzip 10201_clusterware_linux32.zip
$ cd ~oracle/orainstall
$ unzip 10201_database_linux32.zip
$ cd ~oracle/orainstall
$ unzip 10201_companion_linux32.zip
ვუშვებთ X -ს ვხსნით ტერმინალს და...
xhost +
su - oracle
unset ORA_CRS_HOME
unset ORACLE_HOME
unset ORA_NLS10
unset TNS_ADMIN
ვამოწმებთ გარსის ცვლადებს..
set | grep ORA
ORACLE_SID=ora1
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm
ვიხსენებთ, რომ თითოეულ უჯრედში ORACLE_SID სხვადასხვა უნდა იყოს
და ვუშვებთ ინსტალერს
$ cd ~oracle
$ /u01/app/oracle/orainstall/clusterware/runInstaller -ignoreSysPrereqs
მე ჩამოვწერ პარამეტრებს, რომლებიც უნდა გადავცეთ ინსტალერს.
თუ აქ არაა მითითებული ფანჯარა, და მისი პარამეტრები, ეს აღნიშნავს რომ უნდა დავეთანხმოთ ნაგულისხმებ პარამეტრებს და უბრალოდ დავაჭიროთ Next ს
Specify Cluster Configuration დროს
Cluster Name: ocfs2
Public Node Name Private Node Name Virtual Node Name
oranode1 int-oranode1 vip-oranode1
oranode2 int-oranode2 vip-oranode2
Specify Network Interface Usage -ში
Interface Name Subnet Interface Type
eth0 10.0.0.0 Public
eth1 192.168.1.0 Private
Specify OCR Location
ვტოვებთ Normal Redundancy -ზე
Specify Voting Disk Location
Voting Disk Location: /u02/oradata/orcl/CSSFile
Additional Voting Disk 1 Location: /u02/oradata/orcl/CSSFile_mirror1
Additional Voting Disk 2 Location: /u02/oradata/orcl/CSSFile_mirror2
ეს პროცედურა დააყენებს ორაკლს კლასტერის ყველა უჯრედზე.
დაყენების შემდეგ საჭიროა გავუშვათ /u01/app/oracle/oraInventory/orainstRoot.sh ასევე ყველაზე.
cd ~oracle
/u01/app/oracle/orainstall/database/runInstaller -ignoreSysPrereqs
/u01/app/oracle/product/10.2.0/db_1/root.sh ხელით ყველა უჯრედზე.
ჯერჯერობით ესაა და ეს
* * *
ცოტა ხანში მივაწერ კლასტერული ფაილური სისტემების გამოყენებას, რაზეც დავამთავრებთ ამ თემას