參考文檔:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwlin/index.html
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/index.html
https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
建設背景:
建設本文檔的目的在於詳細梳理12c RAC圖形化安裝的流程,結合官方文檔盡可能解釋安裝過程中的各種操作的原理,提供不同的存儲配置方法和參數修改方法,最后形成一套完整的12c RAC圖形化安裝步驟以便於今后參考。
安裝流程:
一、軟件下載
下載 linuxx64_12201_database.zip 和 linuxx64_12201_grid_home.zip 就可以了,然后上傳至節點1的任意目錄。
二、硬件和網絡環境
- 檢查內存(至少8GB)、Swap和硬盤大小等等,參考GRID官網安裝文檔的:Server Hardware Checklist for Oracle Database Installation。
需要說明的是12c RAC安裝,OCR盤至少需要40GB大小,因為12c新增了MGMTDB實例進行集群管理,如果你不單獨的為他創建一個磁盤組,這些信息就會進入OCR盤,導致OCR盤需要40GB的空間才夠,其中OCR和votefiles大約需要2GB,MGMT占用38GB,如果RAC節點數大於2那么還需要再增加一些MGMT的空間,例如5節點大約需要再加5GB,當然這里的值都是在外部冗余的條件下計算的。
- 檢查操作系統版本,參考GRID官網安裝文檔的:Operating System Checklist for Oracle Database Installation on Linux。
本文的系統環境為Oracle Enterprise Linux 6.9。
- tmpfs務必保證至少是最大內存的一半。
如果需要更大的SGA,那么至少要將將tmpfs設置為大於SGA的值,因為OEL系統下Oracle占用的共享內存不能大於tmpfs。
- 檢查網絡環境。
7個IP是需要申請的,其中2個作為Public IP,2個作為VIP,1個Scan-IP,這5個IP應當是同一網段的,最后還需要2個不同網段的Private IP,雖然私網IP可以自定義,但是在不清楚私網是通過公網直連還是通過單獨的交換機時(其實oracle要求private ip的interconnect使用單獨的交換機且帶寬需要至少是GB級別),最好申請獨立的私網IP。網卡每個節點需要2個至少,Public IP占用一個,Private占用一個。
- 以下為一個示例/etc/hosts文件:
vi /etc/hosts #需要注意的是12c對主機名的要求比以前更加嚴格,不再允許出現下划線'_',只能使用連接線'-'。 #Public IP 192.168.10.101 node1 192.168.10.102 node2 #Private IP 1.1.1.1 node1-priv 1.1.1.2 node2-priv #VIP 192.168.10.103 node1-vip 192.168.10.104 node2-vip #Scan-IP 192.168.10.105 scanip
Oracle強烈推薦使用一個名為oracle-database-server-12cR2-preinstall的RPM包來做預原裝的檢測工作。
此RPM包安裝完畢后會出現一個/usr/bin/oracle-database-server-12cR2-preinstall-verify的系統命令,此命令主要就是做一些RAC安裝前的准備工作,如禁用透明大頁,修改內核參數和修改用戶limits等等,需要提示的是此腳本只修改Oracle用戶的limits,對於grid用戶你需要把Oracle的limits內容復制一遍就可以了,相關的文件位置為:
/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf --需要說明的是:limits.d目錄中的用戶限制文件是在/etc/security/limits.conf文件生效之后生效的,因此會覆蓋limits.conf文件中的重復部分。 --穩妥起見直接在/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf文件中定義好oracle和grid用戶的ulimit限制。
Oracle提供了多種 oracle-database-server-12cR2-preinstall RPM包的下載方式,這里只選擇我認為較簡單的一種獲取方式:
wget http://yum.oracle.com/public-yum-ol6.repo -O /etc/yum.repos.d/public-yum-ol6.repo --執行以上下載命令前最好檢查下你是否本來就有public-yum-ol6.repo,如果有先做個備份防止被覆蓋。 yum -y install oracle-database-server-12cR2-preinstall --如果無法聯網,那么可以使用yum的--downloadonly選項在其他機器上下載此rpm包后上傳到安裝節點,然后使用rpm安裝。 --無法聯網時使用rpm安裝oracle-database-server-12cR2-preinstall還需要先安裝ksh依賴包。 --此外注意,如果沒有yum makecache那么以上安裝可能非常慢,因為這個repo庫特別龐大,國內網絡連Oracle的yum源的速度大家也懂得。
安裝完畢后會出現一個oracle-database-server-12cR2-preinstall-verify的系統命令,執行此命令應該就可以進行預設置了,然而實測還發現這個命令在OEL6.5版本上不能用,因為需要/etc/sysctl.d文件夾,這個文件夾OEL6.9是有的6.5並沒有,因此要么是需要低版本的oracle-database-server-12cR2-preinstall,要么是不支持OEL6.5,無論是哪種原因這里都懶得深究了。
那么假如不用oracle-database-server-12cR2-preinstall,我們自己大致需要做哪些預操作呢,主要有以下幾部分:
- 禁用透明大頁
如果有大頁需求,Oracle建議使用標准的大頁提升性能,嚴禁使用透明大頁。透明大頁與標准大頁的區別在於可以在系統運行時分配內存,而標准大頁只能重啟生效。
如果你要使用大頁來提升性能,請務必搜索安裝文檔的所有HugePage關鍵詞,根據文檔作出修改,消除大頁帶來的隱患。
- 基礎包安裝
oracle-database-server-12cR2-preinstall也不會幫你裝好這些包,因此這一步是必須要手工做的。
yum -y install binutils.x86_64 compat-libcap1.x86_64 compat-libstdc* e2fsprogs.x86_64 libaio* libXau* libXi* libXtst* libstdc* glibc* libgcc* ksh gcc-c++* --以上命令是我自己簡化后的安裝語句,一般來說執行完以上安裝就足夠了,不夠也沒事,裝grid時如果有缺失的根據報錯Detail再裝就好了。 --不同Linux版本所需的包完整列表參考GI安裝官方文檔的4.7小節--Operating System Requirements for x86-64 LinuxPlatforms。
-
內核參數修改(64GB內存 40GB tmpfs時的設置)
vi /etc/sysctl.conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 10485760 kernel.shmmax = 42949672960 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 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 = 1048576
-
時間同步設置
參考網上配置ntp相關的文檔即可,手工設置時間也可以。
- 禁用防火牆和selinux
由於內網的數據交互會使用大量UDP端口,因此官網要求為RAC關閉防火牆,所以:
service iptables stop service ip6tables stop chkconfig iptables off chkconfig ip6tables off --selinux的關閉自己上網搜。
其他的預安裝要求個人認為不再需要了,如果有更高的性能需求可以查看官方文檔來進行更詳細的設置,但本着簡單安裝、簡單管理的原則,就這樣啦。
四、用戶、組、以及目錄
--兩節點添加用戶和組 groupadd -g 501 oinstall groupadd -g 502 dba groupadd -g 503 asmadmin groupadd -g 504 asmdba groupadd -g 505 asmoper groupadd -g 506 oper useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper,dba grid useradd -u 502 -g oinstall -G dba,asmdba,oper oracle
--兩節點創建目錄並設置權限 mkdir -p /u01/app/oracle/product/12.2.0/db_1 mkdir -p /u01/app/grid mkdir -p /u01/12.2.0/grid mkdir -p /u01/app/oraInventory chown -R oracle.oinstall /u01/app/oracle/ chown -R oracle.oinstall /u01/app/oracle/* chown -R grid.oinstall /u01/app/grid/ chown -R grid.oinstall /u01/app/oraInventory/ chown -R grid.oinstall /u01/12.2.0/grid/
--修改用戶安全限制: --如果你不使用oracle-database-server-12cR2-preinstall,那么將以下內容復制到/etc/security/limits.conf文件中即可 --如果你使用了oracle-database-server-12cR2-preinstall,那么將以下內容復制到/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf中即可(將之前的內容清空) oracle soft nofile 2048 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768 oracle hard memlock 134217728 oracle soft memlock 134217728 grid soft nofile 2048 grid hard nofile 65536 grid soft nproc 16384 grid hard nproc 16384 grid soft stack 10240 grid hard stack 32768 grid hard memlock 134217728 grid soft memlock 134217728 --無論以上哪種用戶安全限制方式,都是需要PAM模塊來調用的,因此繼續檢查/etc/pam.d/login文件內容: session required pam_limits.so 如果未發現以上行,那么加上。
--兩節點設置用戶環境變量,向.bash_profile添加如下項: su - grid vi .bash_profile export ORACLE_BASE=/u01/app/grid export ORACLE_HOME=/u01/12.2.0/grid export ORACLE_SID=+ASM1/+ASM2 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH su - oracle vi .bash_profile export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1 export ORACLE_SID=orcl1/orcl2
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
--在節點一配置ssh互信,步驟如下: --使用root將數據庫軟件拷貝至/home/oracle/下: # chown oracle.oinstall linuxx64_12201_database.zip # su - oracle $ unzip linuxx64_12201_database.zip $ cd database/sshsetup/ $ ./sshUserSetup.sh -user oracle -hosts "node1 node2" -advanced -noPromptPassphrase $ ./sshUserSetup.sh -user grid -hosts "node1 node2" -advanced -noPromptPassphrase --最后在節點1使用oracle和grid用戶都執行以下兩條命令驗證互信: $ ssh node2 date $ ssh node2-priv date --如果不需要輸入密碼則說明互信配置成功。
五、存儲環境設置
存儲的配置總結下只有2步:持久化配置 和 權限配置 。一般來說這兩步是可以合在一起的,只是使用多路徑軟件時需要分開來講(多路徑軟件多了一個多路徑聚合的步驟)。
所謂持久化就是將磁盤通過UUID或者其他唯一標識符綁定為一個human friendly的磁盤名(可以是磁盤的軟鏈接等),而權限配置就是為了可以使oracle可以正確使用這些磁盤,給他們賦予正確的用戶和組以及權限(MODE)。
在Linux環境下能夠實現設備持久化的系統服務就是udev,除此之外幾乎別無他法(就算有也千萬別用)。可以通過man udev來查看udev rules的配置規則。
我們分兩種情況來描述存儲配置的步驟。
- 情況一:使用多路徑軟件時:
一般來說生產上的存儲使用系統自帶的多路徑軟件multipath即可完成多路徑持久化配置(lvm device mapper),這里貼一個示例配置文件的一部分:
# multipath.conf written by anaconda ...... multipaths { multipath { wwid "360080e50003279f000001a785a275fe8" alias REDO_01 } multipath { wwid "360080e50003279f000001a775a275fba" alias RAC_OCR } multipath { wwid "360080e50003279f000001a795a27604e" alias RAC_ARCHIVE } multipath { wwid "360080e50003217cc00001c6d5a280dd8" alias REDO_02 } multipath { wwid "360080e50003217cc00001c6e5a280e2b" alias RAC_DATA } } --不建議在這里加uid gid mode來設置屬主和權限,因為不能設置附屬group。
根據uuid進行了alias的綁定,之后重啟multipathd即可,使用multipath -ll可以看到聚合后的盤。
然后使用multipath自帶的udev規則文件12-dm-permissions.rules來完成聚合盤(/dev/dm-*)的udev配置,這樣安裝時直接查找/dev/mapper/*路徑即可找到以alias名字顯示的盤。
--設置步驟: cp /usr/share/doc/device-mapper-1.02.117/12-dm-permissions.rules /etc/udev/rules.d/ vi /etc/udev/rules.d/12-dm-permissions.rules --添加或注釋如下一行: ENV{DM_UUID}=="mpath-?*", OWNER:="grid", GROUP:="asmadmin", MODE:="660" --說白了就是設置下聚合盤的權限 start_udev
這里還有一些替代的方法,例如使用60-raw.rules來代替12-dm-permissions.rules的權限設置功能,例子如下: # vi /etc/udev/rules.d/60-raw.rules ACTION=="add", KERNEL=="dm-0", RUN+="/bin/raw /dev/raw/raw1 %N" ACTION=="add", KERNEL=="dm-1", RUN+="/bin/raw /dev/raw/raw2 %N" ACTION=="add", KERNEL=="dm-2", RUN+="/bin/raw /dev/raw/raw3 %N" ACTION=="add", KERNEL=="dm-3", RUN+="/bin/raw /dev/raw/raw4 %N" ACTION=="add", KERNEL=="dm-4", RUN+="/bin/raw /dev/raw/raw5 %N" KERNEL=="raw*", OWNER="grid" GROUP="asmadmin", MODE="0660" --其原理是:/dev/mapper/下的盤符其實是指向/dev/dm-*的,將這些聚合盤映射為裸設備,也可以同時改變權限,缺點在於沒有alias容易混淆。 # start_udev
至此情況一的權限配置已經完成了。
- 情況二:如果你未使用multipath(常見於使用虛擬機的測試環境)
那么直接使用99-oracle-asmdevices.rules(udev規則,名字隨便定,第一個數字表示解析順序)或者通過60-raw.rules綁定raw盤來完成持久化配置和權限配置,並綁定易於人眼識別的name。
這種直接使用udev規則的方式與上述多路徑綁定的區別只是在於無需通過多路徑lvm進行映射,使用udev直接完成了綁定工作+權限配置工作。
參考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
以及參考:官網文檔附加的A部分中的Configuring Device Persistence Manually for Oracle ASM小節
基本步驟就是:
首先獲取sd盤的uuid或ID_SERIAL(或其他可以唯一標識磁盤且在udev中定義了的標識符),然后將uuid/ID_SERIAL綁定至99-oracle-asmdevices.rules即可。
例如: # /usr/lib/udev/scsi_id -g -u -d /dev/sdb --獲取到某個盤的scsi-id。 # udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL --獲取到某個盤的ID_SERIAL
本文綁定UUID和ID_SERIAL的示例都來一個,以便新手可以清楚的認識udev是個什么東西:
綁定UUID示例(其實還可以大大簡化):
[root@node1 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VBc6580c49-d54cc0df", RUN+="/bin/sh -c 'mknod /dev/asmdisk01 b $major $minor; chown grid:asmadmin /dev/asmdisk01; chmod 0660 /dev/asmdisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB41a7cba4-749c4aec", RUN+="/bin/sh -c 'mknod /dev/asmdisk02 b $major $minor; chown grid:asmadmin /dev/asmdisk02; chmod 0660 /dev/asmdisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB6aaaf601-96dab065", RUN+="/bin/sh -c 'mknod /dev/asmdisk03 b $major $minor; chown grid:asmadmin /dev/asmdisk03; chmod 0660 /dev/asmdisk03'"
綁定ID_SERIAL示例:
KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VBc6580c49-d54cc0df",SYMLINK+="asm-ocr", OWNER="grid",GROUP="asmadmin",MODE="0660" KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB41a7cba4-749c4aec",SYMLINK+="asm-mgmt",OWNER="grid",GROUP="asmadmin",MODE="0660" KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB6aaaf601-96dab065",SYMLINK+="asm-data",OWNER="grid",GROUP="asmadmin",MODE="0660"
需要注意的是rules文件中的內容是不允許任何主動換行符的,例如\等。
然后執行如下命令使udev規則生效即可:
udevadm control --reload-rules
udevadm trigger --type=devices
//Linux 7之前應該只需要start_udev即可,7版本去除了start_udev的命令,使用udevadm替代。
至於udev的規則文件中KERNELS,ENV{}都是些什么東西,為何用KERNELS和KERNEL都可以,為何用不同的命名方式都行,直接man udev尋找答案。
在這里我還要提一句,udev在CentOS-7上有個坑,NAME關鍵字不再能表示devnode名了,只能表示網卡名,這坑實在是太深我也翻車了,仔細看了好幾遍man udev才發現。
六、GRID安裝
這里有個小坑,12c的GRID安裝不再會按你設置的grid用戶的$ORACLE_HOME變量來作為GI的家目錄,而是直接將你GRID軟件的解壓目錄作為家目錄。
當然這個小坑還可能引發另一個大坑,多次嘗試安裝grid時你會發現綁定好的磁盤即便dd格式化掉在安裝grid時也找不到了...此時只要刪了解壓的grid目錄重新解壓安裝就好了...(MMP的12c,還有扯淡的屎一樣PDB,誰讓你從11g升12c直接上腿就完事了)
你需要將linuxx64_12201_grid_home.zip拷貝至grid用戶的$ORACLE_HOME,本文中就是/u01/12.2.0/grid,然后:
# chown grid.oinstall linuxx64_12201_grid_home.zip # su - grid $ unzip linuxx64_12201_grid_home.zip --這樣在進行安裝時就會將你設置的grid用戶的$ORACLE_HOME作為GI家目錄了。
--注意所有軟件都只需在節點一解壓,節點二無需操作,安裝GI和DB軟件的過程中安裝程序會自動將軟件傳至遠端節點。
--這里還需要先裝下cvuqdisk包,這個包存在於解壓后的/home/oracle/database/rpm/目錄下: cp /home/oracle/database/rpm/cvuqdisk-1.0.10-1.rpm /root --使用root rpm安裝cvuqdisk rpm -ivh cvuqdisk-1.0.10-1.rpm --以上包的安裝需要在2節點都執行,使用scp將cvuqdisk包傳至節點二安裝。
解壓后使用grid用戶進行GI安裝:
cd /u01/12.2.0/grid/ ./gridSetup.sh
接下來基本只要下一步下一步就完事了,我自己的安裝步驟忘了截圖,因此這里參考下如下網址的安裝截圖:
注意:別按他的預安裝步驟做,他使用的是很古老的單用戶RAC安裝方式,現在推薦使用單獨的grid用戶來管理集群,與管理數據庫的oracle用戶分離開。
--這里需要特別說明下,如果你選了YES即為GIMR創建單獨的MGMT磁盤組,那么OCR盤大小20GB左右就可以(當然你還需要為MGMT磁盤組准備存儲,大概需要40G),如果你選擇NO,那么請保證OCR盤至少40GB大小(准確數字忘了大概是38GB左右,不過40GB保險)。
根據提示依次在兩節點執行以上腳本即可,出現下圖所示文字是表示執行成功:
至此GRID已經安裝完畢,使用如下命令查看集群狀態:
su - grid crsctl stat res -t
七、創建ASM磁盤組
使用grid用戶執行asmca創建數據磁盤組DATA和存放REDO、歸檔的磁盤組,一般測試環境這幾個磁盤組合在一起即可。
su - grid sqlplus / as sysasm set lines 200 col path for a40 select group_number,header_status,state,name,path,redundancy from v$asm_disk; select group_number,name,state,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup; create diskgroup DATA external redundancy disk '/dev/mapper/RAC_DATA' ATTRIBUTE 'compatible.asm' = '12.2'; create diskgroup ARCHIVE external redundancy disk '/dev/mapper/RAC_ARCHIVE' ATTRIBUTE 'compatible.asm' = '12.2'; create diskgroup REDO external redundancy disk '/dev/mapper/REDO_01','/dev/mapper/REDO_02' ATTRIBUTE 'compatible.asm' = '12.2';
八、DATABASE安裝
cd /home/oracle/database ./runInstaller
根據提示執行以上腳本即可。
九、創建數據庫
使用oracle用戶執行dbca建庫:
--如無pdb需求,那么不選create as container database
--並不推薦以上建庫方式,建議使用下邊的高級配置,可以自己設置SGA,PGA和字符集等等。
建庫完畢后使用如下命令查看整個集群和數據庫的狀態:
su - grid crsctl stat res -t srvctl config database -d orcl lsnrctl status
十、最后的工作
ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE SID='*';--關閉審計 alter system set deferred_segment_creation=false SCOPE=BOTH SID='*'; --關閉段創建延遲 #ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=SPFILE SID='*'; --關閉密碼大小寫驗證,在12c版本中此參數已被棄用,如果手動改為FALSE,除非設置正確的SQLNET.ALLOWED_LOGON_VERSION_SERVER參數,否則所有用戶都會無法登陸,因此不要這么改了。 ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;--設置登錄次數為無限 ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=31 SCOPE=BOTH SID='*';--控制文件內容保存時間 ALTER SYSTEM SET MAX_DUMP_FILE_SIZE='2048M' SCOPE=BOTH SID='*';--DUMP文件size的最大值 ALTER SYSTEM SET PROCESSES=2048 SCOPE=SPFILE SID='*';--最大進程數 ALTER SYSTEM SET "_UNDO_AUTOTUNE"=FALSE SCOPE=BOTH SID='*';--關閉UNDO自動調優的功能 ALTER SYSTEM SET "_USE_ADAPTIVE_LOG_FILE_SYNC"=FALSE SCOPE=BOTH SID='*'; --關閉自適應日志同步功能 alter database add supplemental log data; --打開附加日志,便於進行故障后數據找回
重啟使以上部分設置生效:srvctl stop/start database -d orcl
最后,再設置下數據和歸檔的備份計划,根據業務壓力調整下REDO大小和組數就可以了。