Oracle RAC là viết tắt của “Oracle Real Application Clusters” (RAC), một tính năng trong hệ thống quản lý cơ sở dữ liệu Oracle (Oracle Database). Oracle RAC cho phép nhiều máy chủ (nodes) chia sẻ cùng một cơ sở dữ liệu, tạo thành một cụm máy chủ (cluster) để cung cấp tính sẵn có và khả năng mở rộng.
Cụ thể, Oracle RAC cho phép nhiều máy chủ trong cụm (cluster) thao tác đồng thời trên cùng một cơ sở dữ liệu, tăng khả năng chịu lỗi và hiệu suất của hệ thống. Điều này có ý nghĩa đặc biệt khi cần đảm bảo tính sẵn có cao và khả năng mở rộng linh hoạt cho ứng dụng quan trọng và yêu cầu cao về tải.
Oracle RAC được sử dụng rộng rãi trong các doanh nghiệp lớn nơi cần có cơ sở dữ liệu mạnh mẽ, linh hoạt và không ngừng hoạt động. Điều này giúp đảm bảo rằng nếu một máy chủ gặp sự cố, các máy chủ khác vẫn có thể tiếp tục làm việc, giảm thiểu thời gian chết của hệ thống.
Một số khái niệm:
- CVU (Cluster Verification Utility)
- CRS (Cluster Ready Services)
Công cụ cần chuẩn bị:
- virtual box
- oracle database software
- oracle grid
Download oracle linux 7.9:
https://yum.oracle.com/oracle-linux-isos.html
Download oracle linux 7.9 file .OVA có sẵn cho máy ảo Virtualbox mà không phải cài đặt:
https://drive.google.com/file/d/1SA3R5UY97qTSYtQGzpaz4LocUAZBBuGt/view?usp=sharing
Download VirtualBox:
https://www.virtualbox.org/wiki/Downloads
Download bộ cài Oracle database và Oracle Grid tương ứng tại:
Thông tin cài đặt:
Items | RAC1 | RAC2 |
hostname | rac1 | rac2 |
ip_remote | 192.168.68.11 | 192.168.68.12 |
db name | oradb | oradb |
instance_name | oradb1 | oradb2 |
db_unique_name | oradb1 | oradb2 |
version DB | 19.3 | 19.3 |
DB_HOME | /u01/app/oracle/product /19c/dbhome_1 | /u01/app/oracle/product /19c/dbhome_1 |
DB_BASE | /u01/app/oracle | /u01/app/oracle |
GRID_BASE | /u01/app/grid | /u01/app/grid |
GRID_HOME | /u01/app/19c/grid | /u01/app/19c/grid |
TRÊN CẢ 02 SERVER:
Thêm 3 card mạng cho node, các card mạng lần lượt theo thứ tự là host-only, internal, bridged.
User đăng nhập hệ thống:
- user: root
- pass: oracle
Sửa card mạng trên 02 host theo thông số sau, tương ứng với 2 node 1, 2:
host-only: for ssh, public network NODE1: 192.168.24.1 NODE2: 192.168.24.2 255.255.255.0 0.0.0.0 internal: for rac to rac connect, private network NODE1: 192.168.10.1 NODE2: 192.168.10.2 255.255.255.0 0.0.0.0 internet: card mạng bridged => for internet update NODE1: 192.168.68.11/24 NODE2: 192.168.68.12/24 GW: 192.168.68.1 DNS: 8.8.8.8
Chỉnh sửa file /etc/hosts trên cả 02 server, thêm vào cuối file hiện tại:
vi /etc/hosts # Public 192.168.24.1 rac1.localdomain rac1 192.168.24.2 rac2.localdomain rac2 # Private 192.168.10.1 rac1-priv.localdomain rac1-priv 192.168.10.2 rac2-priv.localdomain rac2-priv # Virtual 192.168.24.31 rac1-vip.localdomain rac1-vip 192.168.24.32 rac2-vip.localdomain rac2-vip # SCAN 192.168.24.41 rac-scan.localdomain rac-scan 192.168.24.42 rac-scan.localdomain rac-scan 192.168.24.43 rac-scan.localdomain rac-scan # DNS 192.168.24.111 dnsss.localdomain dnsss
Đặt lại hostname cho 2 node:
##Node 1 hostnamectl set-hostname rac1.localdomain ##Node 2 hostnamectl set-hostname rac2.localdomain
Tắt firewall trên 2 node:
systemctl stop firewalld.service systemctl disable firewalld.service
Bật đồng bộ thời gian cho 2 node:
systemctl enable chronyd.service systemctl restart chronyd.service systemctl status chronyd chronyc tracking chronyc sources chronyc -a 'burst 4/4' chronyc -a makestep
Cập nhật và cài đặt các gói, update hệ thống, preinstall, oracleasm:
yum update -y yum install -y oracle-database-preinstall-19c.x86_64 yum install -y oracleasm-support
Tạo thêm các nhóm cho oracleasm
groupadd asmdba groupadd asmoper groupadd asmadmin
Thêm nhóm bên trên cho user oracle, Ở đây để đơn giản chúng ta tiến hành cài đặt grid infra bằng user oracle luôn mà ko cần tạo user grid (nếu sử dụng user grid thì add groups cho user grid là xong), các bạn nếu muốn thì cũng có thể tạo thêm mới user grid để cài đặt Grid Infra riêng.
usermod -G asmdba,asmoper,asmadmin oracle
Tôi sẽ hướng dẫn các bạn cài đặt Grid Infrastructura sử dụng user Grid trong bài viết cài đặt Grid Standalone các bạn xem ở link bên dưới đây, trong bài này tôi sử dụng user Oracle để đa dạng hoá các hình thức khác nhau, có thể áp dụng linh hoạt các trường hợp khác nhau miễn là chúng ta hoàn thành được mục tiêu, các bạn có thể tham khảo.
Đặt pass cho user oracle
passwd oracle
Tạo đường dẫn cho grid và oracle database:
mkdir -p /u01/app/19c/grid mkdir -p /u01/app/grid mkdir -p /u01/app/oracle/product/19c/dbhome_1
Đổi sang user oracle và tạo biến môi trường bash
su oracle cd vi .bash_profile
## thêm đoạn này vào cuối file bash_profile hiện tại:
##thêm vào Node 1:
# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/19c/grid
export DB_HOME=$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=oradb1
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
## nội dung của node 2:
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/19c/grid
export DB_HOME=$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=oradb2
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
Tạo biến môi trường cho profile oracle cài grid
vi /home/oracle/grid.env
## thêm đoạn này vào file
##Node 1
export ORACLE_SID=+ASM1
export ORACLE_HOME=$GRID_HOME
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
## trên node 2:
export ORACLE_SID=+ASM2
export ORACLE_HOME=$GRID_HOME
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
Shutdown 2 node:
Thêm đĩa vào máy ảo:
ADD đĩa vào máy ảo, tạo 3 đĩa dùng để lưu trữ dữ liệu đặt ở chế độ sharable => mô phỏng hệ thống SAN, sau đó Add đĩa sharable vào NODE1 và NODE2 => 3 đĩa này thành đĩa dùng chung lưu trữ database: DATA (datafile), FRA(fast recovery area), OCR (oracle cluster register..)
=> các bạn nhớ đặt type là shareable cho đĩa nhé
=> Đĩa này phải được cấp phát ngay khi tạo nhé: Pre-allocate full size
Dung lượng tương ứng là: 20GB, 60GB, 5GB
- Vtbox/file/tool/Virtual media manager/create disk
Start 2 node:
Kiểm tra kết nối mạng xem thông 2 node chưa
ping -c 2 rac1 ping -c 2 rac2 ping -c 2 rac1-priv ping -c 2 rac2-priv
Trên RAC1:
Copy bộ cài Oracle Grid, Oracle Database vào thư mục home (/home/oracle) của user oracle và tiến hành giải nén vào thư mục đường dẫn base, home tương ứng đã tạo ở bên trên:
Xem thêm cách copy file vào máy ảo: https://datalinks.vn/copy-file-tu-windows-vao-linux-tren-virtualbox-nhu-the-nao-how-to-copy-file-from-windows-to-linux-on-virtualbox/
Login vào user root để có quyền giải nén:
Nếu tên file bộ cài của bạn đặt # thì bạn sửa lại thông tin cho phù hợp.
su - cd /u01/app/19c/grid/ unzip /home/oracle/193000_grid_home.zip cd /u01/app/oracle/product/19c/dbhome_1 unzip /home/oracle/193000_db_home.zip
Gán chủ sở hữu thư mục u01 cho user Oracle:
chown -R oracle:oinstall /u01
Nâng cấp gói cài đặt U = update CVUdisk
(cvuqdisk là một công cụ dùng trên hệ điều hành Linux để hỗ trợ Oracle Grid Infrastructure. Cụ thể, cvuqdisk có tác dụng giúp Cluster Verification Utility (CVU) – công cụ kiểm tra cụm – phát hiện các ổ đĩa được chia sẻ giữa các máy chủ trong cụm)
cd /u01/app/19c/grid/cv/rpm rpm -Uvh cvuqdisk*
copy file sang rac2 và cài đặt CVUdisk
scp ./cvuqdisk* root@rac2:/tmp
Nâng cấp gói cài đặt U = update trên RAC2 qua ssh
ssh root@rac2 rpm -Uvh /tmp/cvuqdisk*
Định dạng ổ đĩa dùng cho shareable
fdisk -l fdisk /dev/sdb
Nhấn các phím theo hướng dẫn để tiến hành định dạng đĩa:
n new p primary enter enter enter w write
Tương tự vậy thực hiện với các đĩa SDC, SDD:
fdisk /dev/sdc fdisk /dev/sdd
Cấu hình ASM: Configure oracleasm utility (bằng user root)
su - /usr/sbin/oracleasm configure -i oracle oinstall y y ### verify /usr/sbin/oracleasm configure ### init /usr/sbin/oracleasm status /usr/sbin/oracleasm init /usr/sbin/oracleasm status ### check df -ha | grep oracle
Tạo ASM Disk ứng với từng đĩa:
oracleasm createdisk DATA /dev/sdb1 oracleasm createdisk FRA /dev/sdc1 oracleasm createdisk OCR /dev/sdd1 ## quét và check đĩa DG oracleasm scandisks oracleasm listdisks
Configure SSH Setup, cấu hình SSH cho rac1 connect sang rac2 (nhớ test thử bằng lệnh ssh rac1, ssh rac2 xem có login được ko)
su oracle cd /u01/app/19c/grid/deinstall ./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -noPromptPassphrase -confirm –advanced
Trên RAC2:
Cài đặt oracleasm với quyền root:
su - /usr/sbin/oracleasm configure -i oracle oinstall y y ## check /usr/sbin/oracleasm status /usr/sbin/oracleasm init /usr/sbin/oracleasm status oracleasm scandisks oracleasm listdisks
Gán quyền thư mục:
chown -R oracle:oinstall /u01
TRÊN RAC1:
Check các điều kiện chuẩn bị tiến hành cài đặt grid
su oracle cd . grid.env cd /u01/app/19c/grid/ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose
Bật Xming nếu SSH client không hỗ trợ Xserver, Xuất màn hình ra PC và chuẩn bị cài grid:
IP ở đây chính là IP của máy window mà các bạn đang SSH vào linux, các bạn thay IP hiện tại của bạn vào nhé, IP của tôi ở đây là 192.168.68.222
export DISPLAY=192.168.68.222:0.0 cd /u01/app/19c/grid/ ./gridSetup.sh
Chúng ta chọn như hình bên dưới
Chúng ta nhập thông tin như bên dưới: Create local SCAN:
- Cluster name: rac-cluster
- SCAN name: rac-scan
- SCAN Port: 1521
=> next
Click ADD thêm node 2 vào danh sách
Nhập thông tin Node2 và nhấn OK
- rac2.localdomain
- rac2-vip.localdomain
Nhấn vào => SSH connectivity để test: Nhập user/pass ssh user:oracle/oracle => sau đó Click Setup rồi nhấn Test
Bảng thông báo OK => sau đó nhấn Next
Chúng ta chọn thông tin như sau: => sau đó nhấn Next
- enp0s3 = public
- enp0s8 = ASM & Private
Chọn: Use Oracle Flex ASM for Storage
=> Chọn NO và next
- Đổi đường dẫn /dev/oracleasm/disks* => hệ thống sẽ liệt kê các Diskgroup ASM chúng ta đã tạo ở bên trên.
=> chọn redundancy to External
=> Disk group name: OCR và chọn link disk OCR
Nhập Pass quản trị cho sys user: oracle
Chọn theo thông tin bên dưới
Chọn các thông tin như bên dưới sau đó nhấn Next
Chọn đường dẫn cho Grid base và Grid home sau đó Next, như hình bên dưới
Đường dẫn: /u01/app/grid
Ghi chú: Các thư mục tiến hành cài đặt bên rac2 phải là thư mục trống và không chứa bất kỳ file hay thư mục nào kể cả file hidden.
Tới đây hệ thống sẽ tiến hành cài đặt tự động đồng bộ Grid trên đồng thời cả 2 node cùng 1 lúc.
=>Check the Ignore All checkbox
=> Double check and click the Install button.
Mở cửa sổ terminal node1 và node2 => chạy với quyền root
##Node1 ### Chạy với user Root
/u01/app/oraInventory/orainstRoot.sh /u01/app/19c/grid/root.sh
##Node2 ### Chạy với user Root
/u01/app/oraInventory/orainstRoot.sh /u01/app/19c/grid/root.sh
- sau khi script chạy hoàn tất thì click OK trên cửa sổ cài đặt là chúng ta đã tiến hành cài đặt thành công Grid.
ĐẾN ĐÂY LÀ CHÚNG TA ĐÃ TIẾN HÀNH CÀI ĐẶT XONG GRID
KIỂM TRA TRẠNG THÁI GRID NODE1
cd /u01/app/19c/grid/bin ./crsctl check cluster -all ./crsctl status resource -t
CÀI ĐẶT ORACLE DATABASE:
RAC1:
su oracle cd . .bash_profile cd /u01/app/oracle/product/19c/dbhome_1/ ./runInstaller
- cài đặt software only
- oralce real aplication cluster database installation
=> click chọn SSH connectivity => nhập thông tin mật khẩu user oracle là oracle
=> nhấn Setup để tiến hành cập nhật thông tin, sau đó nhấn test để kiểm tra thông tin ssh
=> chon bản enterprise
=> chọn đường dẫn oracle base, home:
/u01/app/oracle /u01/app/oracle/product/19c/dbhome_1
Hệ thống tiến hành check thông tin cài đặt
=> Chọn tất cả group là oinstall => NEXT
=> Check the “Ignore All” checkbox and click the “Next” button.
=> Nhấn Install để tiến hành cài đặt
## Node1, Node2, run script with root
/u01/app/oracle/product/19c/dbhome_1/root.sh
- hệ thống thông báo cài đặt software database thành công.
NODE1: Tạo disk group để cài database
cd . grid.env asmca
- ở đây chúng ta có thể xem các thông số của ASM hiện đang chạy như ASM instance, tên node, status của asm
=> Trong mục disk groups hiện đang có 1 DG là OCR (để lưu trữ trạng thái cluster, node)
Ở đây chúng ta tạo thêm các DG mới DATA, FRA để lưu trữ dữ liệu của database.
=> create
name: DATA
redundancy: External (none)
=> OK button
=> tương tự vậy tạo cho cả FRA diskgroup và sau đó nhấn EXIT đê thoát ra ngoài.
NODE1: Khởi tạo database
cd . .bash_profile dbca
=> Chọn Create a database
=> Chọn Advanced configuration
=> Database type: RAC
=> Configuration type: admin managed
=> Select the General purpose
=> Chọn cả 2 rac1, rac2
Global databasae name: oradb.localdomain
SID prefix: oradb
=> Tại bước này chúng ta có thể chọn kiểu database là CDB hoặc NonCDB, ở đây tôi chọn NOnCDB cho đơn giản.
- chọn lưu data vào ASM (DiskGroups +DATA)
- sử dụng OMF (hệ thống tự động quản lý file và tên file)
=> chọn +FRA => lưu dữ liệu vùng fast recovery area, dung lượng lưu trữ, bật archive mode
Để thông tin mặc định như bên dưới
=> Đặt pass quản trị oracle.
=> Next
- hệ thống check thông tin cài đặt
- Ignore All và NEXT
- hệ thống tiến hành cài đặt
- Finished
TEST DỊCH VỤ:
ps -ef | grep pmon
- rac1, rac2 đã hoạt động
Kiểm tra cụm cluster:
/u01/app/19c/grid/bin/crsctl check cluster -all /u01/app/19c/grid/bin/crsctl status resource -t
srvctl (Server Control)
Hiển thị danh sách csdl:
srvctl config database
Check asm status:
srvctl status asm srvctl status asm -n rac1 srvctl status asm -n rac2
Danh sách instance:
srvctl config database -d oradb
Danh sách listener:
srvctl config listener
Stop và start db:
srvctl stop database -d oradb srvctl start database -d oradb
Stop, start cụ thể instance:
srvctl stop instance -db DB_NAME -n INSTANCE_NAME srvctl stop instance -db oradb -n db1
Trạng thái db:
srvctl status database -d oradb
Trạng thai nodeapp:
srvctl status nodeapps -n rac1 srvctl status nodeapps -n rac2
LOGIN VÀO SQLPLUS TRÊN RAC1:
export ORACLE_SID=oradb1 sqlplus / as sysdba select INST_NUMBER,INST_NAME FROM v$active_instances; SELECT instance_name, host_name FROM gv$instance;
Hết!
Chúc các bạn thành công!