實戰 Centos7 oracle12c rac集羣部署;


Oracle RAC 工做原理:html

微信圖片_20190802091514.png

單節點數據庫,若是實例宕機了,若是一個業務連接在實例上面,那麼這個業務就中斷了。這個時候系統就不具備可用性了,那麼這個時候單節點的可用性是不好的。

對於RAC來講,和單實例同樣,仍是一份數據文件,都是相同的存儲上面放着oracle的文件,可是是由三個實例共用同一份數據文件。這樣的好處是在三個實例之間作了冗餘,在上面三個實例當中任意兩個壞了業務均可以連接到剩下的一個實例,均可以正常的工做。RAC提供了在實例級別的冗餘。

RAC不可以解決在數據的安全,儘管有多個實例,可是隻有一份數據文件,這樣只要數據文件損壞了,那麼整個數據庫就損壞了。node



什麼是 RAC ?linux


20180516200338534.png


通常每一個實例都放在不一樣的服務器上面,這樣能夠起到冗餘做用。全部的數據庫文件都放在共享存儲上面,可是還有一些文件放在每一個實例本身的本地的磁盤上面,好比參數文件,每個實例均可以有本身的參數文件,這個參數文件既能夠放在本地也能夠放在共享存儲上面,多個實例都使用同一個參數文件。

 
在RAC裏面,最重要的就是實例和實例之間的交互,即便是分離的實例,可是讀取的數據是相同的,RAC不是分佈式的系統,由於它只有一個存儲,分佈式系統是指數據發佈在不一樣的數據庫上面,而後經過中間件來協調作查詢。RAC仍是一臺數據庫,多個實例。

c++


RAC架構:sql

微信圖片_20190802092417.png



對於RAC來講至少有兩套物理上不一樣的網絡,私有網絡是專門用來實例之間的數據交互。若是私有網絡,全部的數據都在一個網絡下面,那麼那麼就會對數據形成影響,嚴重的影響RAC的性能了。實例之間數據之間傳遞使用私有網絡和對外服務提供的網絡之間是物理分開的。因此RAC至少有兩套網絡,一個是實例之間的數據的傳遞,另一個是公有網絡,是對外提供服務的,外面的業務是提供公有網絡的IP連接到數據庫的。數據庫


RAC特色:vim


微信圖片_20190802093347.png

RAC如何容錯的?安全


20180516200435248.png


使用SAN存儲,存儲和服務器就不在一塊兒了,而是和服務器分離了,是一個網絡的存儲系統,服務器是服務器,存儲是存儲,徹底分離的。

當節點1壞了,不只僅只是將業務切換到節點2,這個時候還要處理節點1壞了遺留下來的問題。主要是一些提交和未提交的事務。好比實例1壞了,實例2就要從實例1的redo裏面讀最後一次checkpoint以後的信息,就是實例1最後將全部的數據寫到磁盤以後產生的全部的redo應用,該回滾的回滾,該恢復的恢復。即現將以提交和未提交的事務產生的redo都先應用,由於是最後一次checkpoint以後的信息,以前的信息是已經寫到磁盤上面了,所謂的恢復是將未寫到磁盤上面的信息進行恢復。(雖然實例壞了,可是實例的redo並無壞,放置在共享存儲上面,它的redo仍是容許其餘實例訪問的)實例2讀取實例1的redo,而後所有應用一遍,以後再回滾未提交的事務修改的數據塊,這個有點像實例的恢復。
bash


實戰部分:服務器

 

建設背景:

建設本文檔的目的在於詳細梳理12c RAC圖形化安裝的流程,結合官方文檔儘量解釋安裝過程當中的各類操做的原理,提供不一樣的存儲配置方法和參數修改方法,最後造成一套完整的12c RAC圖形化安裝步驟以便於從此參考。


安裝流程:

1、軟件下載

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-linux-12201-3608234.html

下載 linuxx64_12201_database.zip 和 linuxx64_12201_grid_home.zip 就能夠了,而後上傳至節點1的任意目錄。


圖片.png

2、硬件和網絡環境

  • 檢查內存(至少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佔用一個。


*安裝環境小編使用的是共享存儲一塊 2TB的 用oracleasm 格式化後 分別在兩臺實例上掃描 實例1格式化後 實例二掃描便可;



3、安裝軟件包

一、oracleasm

用來配置asm的磁盤,若是將oracle數據文件放置在普通磁盤上,則略過;


wget http://public-yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracleasm-support-2.1.11-2.el7.x86_64.rpm


wget http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.12-1.el7.x86_64.rpm


yum install -y kmod-oracleasm


rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm oracleasm-support-2.1.11-2.el7.x86_64.rpm



配置ASM屬性:

oracleasm configure -i


Default user to own the driver interface [ ]: grid


Default group to own the driver interface [ ]: oinstall


Start Oracle ASM library driver on boot (y/n) [n]: y


Scan for Oracle ASM disks on boot (y/n) [y]: y


Writing Oracle ASM library driver configuration: done


建立分區 ;

注:在作如下步驟前可先重啓服務器,使前面的設置生效 ;這裏重啓以後咱們 oracleasm createdisk myasm01 /dev/sdb1 建立可能會出問題 能夠 oracleasm init 解決;記住不重啓的話oracleasm有時候會不生效;
 

reboot  #重啓  
   

fdisk -l  #查看磁盤

   

#分區/dev/sdb1,/dev/sdc1, /dev/sdd1
  

fdisk /dev/sdb
  

oracleasm createdisk myasm01 /dev/sdb1  
  

oracleasm createdisk myasm02 /dev/sdc1
  

oracleasm createdisk myasm03 /dev/sdd1
  

oracleasm scandisks
  

oracleasm listdisks


圖片.png


#小編這裏只用了1塊磁盤因此要記住oracleasm盤的路徑後面會用到;


部署正式開始:


圖片.png


  • 基礎包安裝

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。


圖片.png


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關閉防火牆,因此:


圖片.png


其餘的預安裝要求我的認爲再也不須要了,若是有更高的性能需求能夠查看官方文檔來進行更詳細的設置,但本着簡單安裝、簡單管理的原則,就這樣啦!CentOS7 版本 可用 systemctl stop firewalld; Selinux : vim /sysconfig/selinux ;


圖片.png


4、用戶、組、以及目錄


圖片.png

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/


給予權限後給grid&oracle用戶設置密碼:passwd grid  passwd oracle ;密碼自定義;


--修改用戶安全限制:

--若是你不使用oracle-database-server-12cR2-preinstall,那麼將如下內容複製到/etc/security/limits.conf文件中便可;

--若是你使用了oracle-database-server-12cR2-preinstall,那麼將如下內容複製到/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf中便可(將以前的內容清空);


vim /etc/security/limits.conf 填寫便可;


圖片.png


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


session  required  pam_limits.so


圖片.png


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<br>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


圖片.png


能夠把本身的兩個壓縮包放到剛纔建立的目錄中 linuxx64_12201_database.zip  /home/oracle ; linuxx64_12201_grid_home.zip  /u01/12.2.0/grid;以後給予相關權限;


# chown oracle.oinstall linuxx64_12201_database.zip

# chown oracle.oinstall linuxx64_12201_grid_home.zip #上面圖片中沒這個可是都提早給了吧一會解壓的時候還得給,記住進入相關目錄中直接給就行;

# su - oracle
$ unzip linuxx64_12201_database.zip
$ cd database /sshsetup/
$ ./sshUserSetup.sh - user oracle -hosts "node1 node2" -advanced -noPromptPassphrase  #本身的主機名,小編的是 rac-1&rac-2;

$ ./sshUserSetup.sh -user grid -hosts "node1 node2" -advanced -noPromptPassphrase


--最後在節點1使用oracle和grid用戶都執行如下兩條命令驗證互信:


$ ssh node2 date     #小編這裏的主機名字是 rac-1 因此 ssh rac-1 date便可;

$ ssh node2-priv date   


6、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,而後:


圖片.png


# chown grid.oinstall linuxx64_12201_grid_home.zip
# su - grid
$ unzip linuxx64_12201_grid_home.zip


# cp /home/oracle/ database /rpm/cvuqdisk-1.0.10-1.rpm /root
# rpm -ivh cvuqdisk-1.0.10-1.rpm


# cd /u01/12.2.0/grid/

# ./gridSetup.sh      # 執行過程當中會出現問題;


故障以下:


[grid@lsl crs]$ ./gridSetup.sh 

ERROR: Unable to verify the graphical display setup. This application requires X display. Make sure that xdpyinfo exist under PATH variable.

Can't connect to X11 window server using '10.138.135.167:1.0' as the value of the DISPLAY variable.


解決方法:


[root@lsl Desktop]# xdpyinfo            #切換的root目錄下執行;
name of display:    :1
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    11500000

...省略...只須要記錄name of display:的值
[root@lsl ]$ export DISPLAY=:1(這時設置爲name of display的值:1)   #這裏看xdpyinfo 的值,小編的是 export DISPLAY=:0 ;
[root@lsl ]# xhost +
access control disabled, clients can connect from any host

[root@jytest3 Desktop]# su - grid
Last login: Tue Mar  7 17:50:40 CST 2017 on pts/0 ;

su - grid 

cd /u01/12.2.0/grid 

./gridSetup.sh

圖片.png  

圖片.png


注意:scan的 name須要和/etc/hosts裏面的scan的名稱一致不然會出現錯誤;


圖片.png

圖片.png


注意:這裏的主機名字和虛擬主機名字也須要和/etc/hosts 的名稱同樣;


圖片.png


圖片.png


注意:在執行遠程的時候從服務(實例2&rac-2)安裝目錄不要有文件,若有會提示遠程失敗,須要把文件裏面的文件清除掉;


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


注意:這裏小編建議直接√上節省後面本身執行腳本了;


圖片.png


注意:這裏執行成功了會顯示全部節點(rac-1 rac-2)本身的主機名稱;若是沒有須要檢查下共享存儲;


圖片.png


圖片.png


注意:若是按照小編的方法√本身執行的話不會出現下方文件,注意執行腳本先在實例一(rac-1)上執行 /oracle/app/oraInventory/orainstROOt.sh ;

以後再到實例二(rac-2)上執行 /oracle/app/oraInventory/orainstROOt.sh; 以後再實例一(rac-1)執行/data/grid/root.sh 實例二(rac-2)執行;


圖片.png


注意!這裏實例一(rac-1)執行腳本通常不會出現問題,實例二(rac-2)會出現問題;問題總結以下;


TIM圖片20190802113905.jpg


這個問題基本上是oracleasm權限的問題須要給相應的權限須要對比下若是不一樣能夠修改;


修改方法以下;chown grid.asmadmin MYASM01  chmod 642 MYASM01 ;


圖片.png


圖片.png


圖片.png


注意:執行過程到90%會提示錯誤能夠直接忽略便可;


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


圖片.png


 echo "oracle soft memlock 3145728" >>/etc/security/limits.conf

 echo "oracle hard memlock 3145728" >>/etc/security/limits.conf


圖片.png


圖片.png


圖片.png


至此小編安裝結束後面喜歡繼續往下安裝的夥伴能夠到我百度雲盤下載pdf;


https://pan.baidu.com/s/1AiDlKVz77-mhpkHpf9F2OA    提取碼 9s5z;

相關文章
相關標籤/搜索