CentOS-7-x86_64 for Oracle 12cR2 RAC(未完待續)
1.概述Oracle集群
1.1.什麽是Oracle RAC?
Oracle Real Application Cluster (RAC,實時應用集群)用來在集群環境下實現多機共享數據庫,以保證應用的高可用性;同時可以自動實現並行處理及負載均衡,並能實現數據庫在故障時的容錯和無斷點恢復。RAC集合了集群軟件和存儲軟件,為用戶降低了應用成本。當應用規模需要擴充時,用戶可以按需擴展系統,以保證系統的性能。
2 多節點負載均衡
2 提供高可用:故障容錯和無縫切換功能,將硬件和軟件錯誤造成的影響最小化
2 通過並行執行技術提高事務響應時間----通常用於數據分析系統
2 通過橫向擴展提高每秒交易數和連接數----通常對於聯機事務系統
2 節約硬件成本,可以用多個廉價PC服務器代替昂貴的小型機或大型機,同時節約相應維護成本
2 可擴展性好,可以方便添加刪除節點,擴展硬件資源。
1.2.集群拓撲結構圖
11G RAC結構圖
2.集群規劃
2.1.1 軟件規劃
軟件名稱 |
版本 |
虛擬軟件 |
virtualBox 5.1.26 r117224 (Qt5.6.2) |
操作系統 |
Linux 3.10.0-327.el7.x86_64 #1 |
Oracle|Custerware |
12c r2 |
2.2.2 集群網絡,文件規劃
名稱 |
Rac1 |
Rac2 |
公有IP |
192.168.2.189 |
192.168.2.199 |
私有IP地址(private) |
192.168.2.100 |
192.168.2.101 |
VIP IP地址 |
10.10.10.10 |
10.10.10.20 |
RAC SID |
Deliora1 |
Deliora2 |
集群實例 |
Deliora |
|
SCN IP |
192.168.2.200 |
|
ASM存儲 |
+DATA/+VCR/+ARC/+BACKUP |
3.系統配置
3.1.1 常規配置系統
*每個節點設置IP、主機名、網絡服務
*/etc/sysconfig/network
#hostname=rac1.deli.com
或者
hostnamectl set-hostname --static rac1.deli.com(不用重啟,需要重新鏈接)
*關閉防火墻,selinux
*systemctl stop firewalld.service(開機關閉)
*setenfore 0
*網絡服務開機啟用
3.1.2 配置hosts文件(所有節點)
#RAC1 host 文件
[root@localhost ~]# cat /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#public IP
192.168.2.189 rac1.deli.com delirac1
192.168.2.199 rac2.deli.com delirac2
#private IP
192.168.2.100 rac1-priv.deli.com delirac1-priv
192.168.2.101 rac2-priv.deli.com delirac2-priv
#virtaul IP
10.10.10.10 rac1-vip.deli.com delirac1-vip
10.10.10.20 rac2-vip.deli.com delirac2-vip
#scan IP
192.168.2.200 rac-scan.deli.com delirac-scan
#RAC2 host 文件
[root@localhost ~]# cat /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#public IP
192.168.2.189 rac1.deli.com delirac1
192.168.2.199 rac2.deli.com delirac2
#private IP
192.168.2.100 rac1-priv.deli.com delirac1-priv
192.168.2.101 rac2-priv.deli.com delirac2-priv
#virtaul IP
10.10.10.10 rac1-vip.deli.com delirac1-vip
10.10.10.20 rac2-vip.deli.com delirac2-vip
#scan IP
192.168.2.200 rac-scan.deli.com delirac-scan
#結合上面所有的修改,重啟系統!(/etc/sysconfig/network)
3.1.3 軟件包檢測(可忽略,後面檢測安裝)
# rpm –qa |grep packagename
binutils-2.20.51.0.2-5.11.el6
compat-libcap1-1.10-1
compat-libstdc++-33-3.2.3-69.el6
gcc-4.4.4-13.el6
gcc-c++-4.4.4-13.el6
glibc-2.12-1.7.el6
glibc-devel-2.12-1.7.el6
ksh
libgcc-4.4.4-13.el6
libstdc++-4.4.4-13.el6
libstdc++-devel-4.4.4-13.el6
libaio-0.3.107-10.el6
libaio-devel-0.3.107-10.el6
make-3.81-19.el6
sysstat-9.0.4-11.el6
unixODBC
unixODBC-devel
3.1.4 添加Oracle|grid用戶,HOME,目錄
3.1.4.1 在每個集群節點創建oracle,grid用戶(每個節點)
# groupadd -g 1000 oinstall
# groupadd -g 1020 asmadmin
# groupadd -g 1021 asmdba
# groupadd -g 1022 asmoper
# groupadd -g 1031 dba
# groupadd -g 1032 oper
# useradd oracle -g oinstall -G dba,asmdba,oper -u 501
# useradd grid -g oinstall -G dba,asmdba,asmadmin,asmoper -u 502
3.2在每個集群節點創建所需目錄(每個節點)
# mkdir -p /u01/app/11.2.0/grid
# mkdir -p /u01/app/grid
# chown -R grid:oinstall /u01
# mkdir /u01/app/oracle
# chown oracle:oinstall /u01/app/oracle
# chmod -R 775 /u01/
3.3在每個節點賦予oracle,grid賬戶密碼(每個節點)
[root@localhost /]# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost /]#
[root@localhost /]#
[root@localhost /]# passwd grid
Changing password for user grid.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
3.1.5 配置Oracle|grid環境變量(所有節點)
#RAC1 ~/.bash_profile(GIRD )
export ORACLE_HOME=/u01/app/11.2.0/product/11.2.0
export ORACLE_SID=+ASM1 --節點2 +ASM2
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#RAC1 ~/.bash_profile(ORACLE)
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=deliora1
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#RAC2~/. bash_profile(GIRD )
export ORACLE_HOME=/u01/app/11.2.0/product/11.2.0
export ORACLE_SID=+ASM2 --節點2 +ASM2
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#RAC2 ~/.bash_profile(ORACLE)
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=deliora2
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
3.1.6 配置Linux內核參數(所有節點)
# vi /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.sem = 250 32000 100 128
kernel.shmall = 9961472
kernel.shmmax = 1610612736 #最大1.5G
kernel.shmmni = 4096
生效
# sysctl –p
參數 |
解釋 |
fs.aio-max-nr = 1048576 |
同時可以擁有的的異步IO請求數目 1024K個 |
fs.file-max = 6815744 |
系統中所允許的文件句柄最大數目 6.5M |
kernel.shmall =9961472 --(主) kernel.shmall =6291456 --(備) |
Total amount of shared memory 總的可用共享內存,單位為page(4K字節) 主庫設置為38G 備庫設置為 24G |
kernel.shmmax =40802189312 --(主) kernel.shmmax =25769803776 --(備) |
Maximum size of shared shmmax(bytes) = shmmni(page size, default 4k) * shmall (page的個數)
最大共享內存段大小,單位為字節, 主庫設置為38G 備庫設置為24G |
kernel.shmmni =4096 |
Maximum number of shared memory 共享內存段的最大數量 默認值 |
kernel.sem =250 32000 100 128 |
設置運行的信號量個數,分別對應: SEMMSL:每組信號量的最大信號個數 SEMMNS:整個系統內存的信號量的最大個數 SEMOPM:每組操作最大信號量個數 SEMMNI:整個系統最大信號標記數 取默認值 |
net.ipv4.ip_local_port_range = 9000 65500 |
端口使用範圍 |
net.core.rmem_default = 262144 |
TCP數據接收緩存默認大小 |
net.core.rmem_max = 4194304 |
TCP數據接收緩存最大值 |
net.core.wmem_default = 262144 |
TCP數據發送緩沖默認大小 |
net.core.wmem_max = 1048586 |
TCP數據發送緩沖最大值 |
3.1.7 配置shell限制(所有幾點)
# vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
3.1.8 配置/dev/shm參數(所有節點)
# /etc/fstab就是在開機引導的時候自動掛載到linux的文件系統
#vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=5g 0 0
備註說明: /dev/shm/是linux下一個非常有用的目錄,采用的是tmpfs。因為這個目錄不在硬盤上,而是在內存裏。默認大小為內存大小的一半,tmpfs 可以使用RAM,但它也可以使用您的交換分區來存儲。
3.1.9 關閉NTP及端口範圍參數
Oracle建議使用Oracle Cluster Time Synchronization Service,因此關閉刪除NTP
# /sbin/service ntpd stop
# chkconfig ntpd off
# mv /etc/ntp.conf /etc/ntp.conf.bak
# 重啟網絡
# /etc/rc.d/init.d/network restart
或者
# service network restart
3.2.0 配置Oracle|grid用戶ssh等效性
#RAC1 GRID用戶配置
mkdir .ssh
chmod 700 .ssh/
cd .ssh/
ssh-keygen -t rsa
cat *.pub >> authorized_keys
rm -rf ./*.pub
執行以上步驟生成了authorized_keys文件,現在需要把其他節點的*.pub文件傳送到RAC1,然後合並文件,最後生成的authorized_keys文件下發到每個節點。
#RAC2 GRID用戶配置
mkdir .ssh
chmod 700 .ssh/
cd .ssh/
ssh-keygen -t rsa
scp *.pub [email protected]:/home/grid/.ssh/ #傳送到RAC1
#RAC1 GRID用戶配置
cat *.pub >> authorized_keys
scp authorized_keys [email protected]:/home/grid/.ssh/
#把RAC2節點的*.pub追加至authorized_keys,因為我這裏只有兩個節點所以已經OK,現在把authorized_keys下發到RAC2,需要註意所有節點需要刪除*.pub的文件。
#RAC2 GRID用戶配置
rm -rf ./*.pub
以上已完成grid用戶的ssh等效性,以同樣的方式配置Oracle用戶的等效性~
3.2.1 驗證ssh等效性
#RAC1 Oracle
[oracle@rac1 .ssh]$ ssh delirac1 date
[oracle@rac1 .ssh]$ ssh delirac2 date
[oracle@rac1 .ssh]$ ssh delirac1-vip date
[oracle@rac1 .ssh]$ ssh delirac2-vip date
#RAC2 Oracle
[oracle@rac2 .ssh]$ ssh delirac1 date
Fri Sep 28 17:12:03 CST 2018
[oracle@rac2 .ssh]$ ssh delirac2 date
Fri Sep 28 17:12:06 CST 2018
[oracle@rac2 .ssh]$ ssh delirac1-vip date
Fri Sep 28 17:12:09 CST 2018
[oracle@rac2 .ssh]$ ssh delirac2-vip date
Fri Sep 28 17:12:15 CST 2018
以上已完成Oracle用戶的ssh等效性驗證,以同樣的方式測試grid用戶的等效性~
3.2.2 配置ASM存儲
3.2.2.1 規劃ASM磁盤組
官方文檔中規定了不同冗余策略下OCR、Voting Disk、Database和Recovery所需求的大小。
因為這裏是測試環境,所以這裏有sdb 8g,sdc 5g 分別作為OCR和DATA磁盤組。
3.2.2.2 配置ASM磁盤
這裏需要說明一下,配置ASM磁盤有兩種asmlib和裸設備(裸設備和塊設備)。前者用的比較少幾乎不用,所以這裏只介紹後者。裸設備配置ASM磁盤分本地共享磁盤(udev)和網絡iscsi 存儲配置(一般有第三方的存儲軟件)udev + multipath 方式來配置。
獲取iscsi_id 在virtualBox和VMware不一樣。前者通過:/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdc,後者直接scsi_id --whitelisted --replace-whitespace --device=/dev/sdc(前提是修改了虛擬機vmx文件中添加disk.EnableUUID = "TRUE")
n 使用命令查看所有的塊設備 ls -l /dev/sd*(所有節點)
[root@rac1 multipath]# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
1ATA_VBOX_HARDDISK_VB921c6ad1-c9485179
[root@rac1 multipath]# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
1ATA_VBOX_HARDDISK_VB5964a173-24bde291
n 修改udev rule文件(RAC每個節點都需要執行)
for i in b c;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\"" >> /etc/udev/rules.d/99-oracle-asmdevices.rules
done
[root@rac1 multipath]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB921c6ad1-c9485179", NAME="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB5964a173-24bde291", NAME="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660"
啟動:/sbin/start_udev
n 查看ASM磁盤ll /dev/asm-*
4.Clusterware安裝
5.Oracle軟件安裝
CentOS-7-x86_64 for Oracle 12cR2 RAC(未完待續)