實戰 Centos7 oracle12c rac集羣部署;


Oracle RAC 工作原理:

微信圖片_20190802091514.png

單節點數據庫,如果實例宕機了,如果一個業務鏈接在實例上面,那麼這個業務就中斷了。這個時候系統就不具有可用性了,那麼這個時候單節點的可用性是很差的。

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

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



什麼是 RAC ?


20180516200338534.png


一般每個實例都放在不同的服務器上面,這樣可以起到冗餘作用。所有的數據庫文件都放在共享存儲上面,但是還有一些文件放在每個實例自己的本地的磁盤上面,比如參數文件,每一個實例都可以有自己的參數文件,這個參數文件既可以放在本地也可以放在共享存儲上面,多個實例都使用同一個參數文件。

 
在RAC裏面,最重要的就是實例和實例之間的交互,即使是分離的實例,但是讀取的數據是相同的,RAC不是分佈式的系統,因爲它只有一個存儲,分佈式系統是指數據發佈在不同的數據庫上面,然後通過中間件來協調做查詢。RAC還是一臺數據庫,多個實例。


RAC架構:

微信圖片_20190802092417.png



對於RAC來說至少有兩套物理上不同的網絡,私有網絡是專門用來實例之間的數據交互。如果私有網絡,所有的數據都在一個網絡下面,那麼那麼就會對數據造成影響,嚴重的影響RAC的性能了。實例之間數據之間傳遞使用私有網絡和對外服務提供的網絡之間是物理分開的。所以RAC至少有兩套網絡,一個是實例之間的數據的傳遞,另外一個是公有網絡,是對外提供服務的,外面的業務是提供公有網絡的IP鏈接到數據庫的。


RAC特點:


微信圖片_20190802093347.png

RAC如何容錯的?


20180516200435248.png


使用SAN存儲,存儲和服務器就不在一起了,而是和服務器分離了,是一個網絡的存儲系統,服務器是服務器,存儲是存儲,完全分離的。

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


實戰部分:

 

建設背景:

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


安裝流程:

一、軟件下載

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

二、硬件和網絡環境

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


*安裝環境小編使用的是共享存儲一塊 分別掛載到實例1&實例2上; 首先格式化磁盤;小編的是sda ;(使用nfs共享存儲也可以);


圖片.png


mkfs.xfs /dev/sda

fdisk /dev/sda

mkfs.xfs  /dev/sda1

fdisk /dev/sda1

mkdir -p /data                   #文件名稱自定義;

mount /dev/sda1 /data       #分別在兩臺實例上掛載即可 ;



三、安裝軟件包

1、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


四、用戶、組、以及目錄


圖片.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   


六、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;







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章