Rhel 7 pcs 實現oracle 12c高可用

做者:田逸(v**x:formyz)

需求描述

兩節點物理服務器,外掛虛擬化後的共享存儲(兩臺存儲設備),存儲經過多路徑與物理服務器直接鏈接。linux

網絡劃分爲三個:數據網絡、心跳網絡及管理網絡(遠程控制卡)。web

工具組件包括:rhel 7系統,pcsd工具包(包括corosync等),oracle數據庫。數據庫

高可用HA資源包括:虛擬網絡地址(vip)、oracle監聽器、邏輯卷資源(LVM)、文件系統(filesystem)、oracle數據庫實例。瀏覽器

實施步驟

硬件上架部署系統存儲準備安裝pacemaker 安裝oracle數據庫配置監控器配置oracle命名服務配置pcs高可用建立數據庫實例模擬故障驗收bash

硬件上架

 本機硬盤到位,線纜鏈接到位,包括網線、共享存儲鏈接卡及鏈接線,心跳網絡鏈接到位,管理網絡鏈接到位。
 安裝介質到位:包括redhat 系統盤或者iso文件,oracle安裝介質,受權許可。
 安裝所需的軟件源,最好是能聯網,安裝好pcs及oracle之後,再接入正式生成網絡。如條件不具有,則用iso掛接本地,作yum源。服務器

部署系統

 設置好服務器的遠程控制卡網絡。
 按要求分區並分配容量。
 配置好網絡。本案分兩個網絡:數據網絡及心跳網絡,而且須要兩兩綁定,用工具nmtui進行操做,不會犯輸入上的低級錯誤。
 關閉防火牆systemctl disable firewalld && systemctl stop firewalld
 關閉selinux
 修改文件/etc/hosts,映射主機別名網絡

存儲準備--掛接存儲及建立邏輯卷

安裝iscsi鏈接器
識別共享設備塊
兩臺設備執行:
(1) 建立物理卷pvcreate /dev/sdc
(2) 建立物理卷組 vgcreate vgdb /dev/sdc
任意設備執行(只在一個節點執行一次):
(1) 建立邏輯卷lvcreate -n dblv -l 100%VG vgdb
(2) 建立文件系統 mkfs.xfs /dev/mapper/vgdb-dblv
(3) 掛接文件系統 mount /dev/mapper/vgdb-dblv /oradata/
(4) 另外一設備檢驗邏輯卷 lvscan
Rhel 7 pcs 實現oracle 12c高可用
(5) 兩節點修改lvm.conf,把系統的卷排除在外。
(6) 兩節點執行 dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)oracle

安裝pacemaker

 準備yum源或者服務器鏈接到互聯網。
 執行安裝 yum install pcs fence-agents-all。
 配置pcs服務開機自啓動 systemctl enable pcsd.app

安裝oralce數據庫軟件(不建立數據庫)

 準備好安裝介質,並把其複製到服務器的相關目錄,解包後待用;
 準備環境變量等所需配置的腳本,並給予執行權限;
 執行該腳本,校驗之;
 安裝並啓用vnc服務;
Rhel 7 pcs 實現oracle 12c高可用
 Vnc客戶端鏈接到系統;
Rhel 7 pcs 實現oracle 12c高可用
 把oracle 安裝目錄拷貝到/home/oracle並執行chown –R oracle:oinstall /home/oracle
 執行 xhost + 受權;
Rhel 7 pcs 實現oracle 12c高可用
-------------------以上是root用戶----------------------------
 切換用戶到oracle:su – oracle
 設置環境變量display: export DISPLAY=:1(這個值必定要與vncserver啓動的輸出值相匹配); Rhel 7 pcs 實現oracle 12c高可用
 進入安裝軟件目錄 cd database,執行腳本./runInstaller ,調出圖形界面後,照提示進行下一步,直到安裝完成。
Rhel 7 pcs 實現oracle 12c高可用
Rhel 7 pcs 實現oracle 12c高可用tcp

listener監聽器準備

(1) 兩臺設備都執行netca 建立監聽器
Rhel 7 pcs 實現oracle 12c高可用
(2) 修改兩臺設備的監聽器文件/u01/app/oracle/product/12.2.0/network/admin/listener.ora,使HOST的值爲vip。
Rhel 7 pcs 實現oracle 12c高可用
(3) 暫時不要啓動監聽器,由於vip沒有被自動設置到系統。若是須要驗證,修改HOST的值爲本機地址或者主機別名。

Oracle網絡命名配置

(1) 兩臺服務器繼續執行指令 netca ,鼠標選取第三個單選項—本地網絡服務命名。
Rhel 7 pcs 實現oracle 12c高可用
(2) 確保兩臺設備的命名地址爲vip。
Rhel 7 pcs 實現oracle 12c高可用

配置pcs高可用

 啓動pcs服務。執行命令 systemctl start pcsd (前邊配置了開啓啓動,所以重啓系統就不須要再執行此命令;另外corosync服務也不須要手動去啓動,pcs會自動處理)。
 設置pcs用戶hacluster密碼。Passwd hacluster (hacluster帳號是安裝pacemaker時自動生成的,能夠把兩臺服務器的hacluster帳號設置成一樣的密碼,也能夠不同)。
---------------------------以上操做要在兩臺物理機上分別進行--------------
 驗證用戶。在任一服務器執行 pcs cluster auth ora101 ora102 按提示輸入上述步驟設定的密碼,完成驗證。
 瀏覽器訪問任一服務器的地址,pcs的端口號爲:2224,輸入用戶名hackuster及密碼。
Rhel 7 pcs 實現oracle 12c高可用
(1) 建立集羣,填寫相應的信息。
Rhel 7 pcs 實現oracle 12c高可用
等待幾秒鐘,建立好集羣。
Rhel 7 pcs 實現oracle 12c高可用
鼠標點連接「my-cls01」,查看更多的信息。
Rhel 7 pcs 實現oracle 12c高可用
鼠標選點連接「ora102」,也能夠看到其上運行的服務(pacemaker等),這個時候,咱們能夠返回到系統命令行,查看corosync服務是否啓動,配置文件是否自動生成。沒建立集羣以前,corosync配置文件不存在的,只有個例子文件corosync.conf.example。
Rhel 7 pcs 實現oracle 12c高可用
(2) 按以下順序添加資源及組

  1. 添加虛擬ip(vip)
    Rhel 7 pcs 實現oracle 12c高可用
    建立好vip之後,其狀態可能爲blocked狀態,須要先禁止掉stonish。進入任一服務器系統,執行命令行 pcs property set stonith-enabled=false 。
    Rhel 7 pcs 實現oracle 12c高可用
  2. 添加資源組。若是是兩個或者兩個以上的資源組,系統會自動分配這些組到不一樣的服務器,以達到充分利用資源的目的。
    Rhel 7 pcs 實現oracle 12c高可用
    把資源vip歸於db_grp資源組。
  3. 有了vip資源並生效之後,就能夠啓動oracle監聽器(監聽器依賴於vip)。切換到命令行模式(只在有vip啓動的服務器上),執行以下命令啓用及驗證oracle監聽器。
    [root@ora101 pcsd]# su - oracle
    Last login: Fri May 29 03:19:28 EDT 2020
    [oracle@ora101 ~]$ lsnrctl start

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 07:19:12

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Starting /u01/app/oracle/product/12.2.0/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.35.66)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.66)(PORT=1521)))
STATUS of the LISTENER

Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 29-MAY-2020 07:19:12
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.35.66)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@ora101 ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 07:19:37

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.66)(PORT=1521)))
STATUS of the LISTENER

Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 29-MAY-2020 07:19:12
Uptime 0 days 0 hr. 0 min. 24 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.35.66)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

  1. 建立監聽器資源,內容必定要填寫正確,要與oracle用戶.bash_profile裏邊定義的相一致,不然監聽器不能被正確建立。
    Rhel 7 pcs 實現oracle 12c高可用
    tsn_amin那一行,填寫的是ORACLE_HOME/network/admin,也就是監聽器配置文件及本地命名服務配置文件所在的路徑。
    Rhel 7 pcs 實現oracle 12c高可用
    若是建立成功,此資源的狀態應該爲綠色的「running」,並運行於有vip存在的節點。
    Rhel 7 pcs 實現oracle 12c高可用
  2. 建立邏輯LVM卷資源。此資源是建立文件系統及建立數據庫所必須的前提條件,前邊的步驟,已經對共享文件塊作了掛接及文件系統的建立,如今須要把文件掛接卸載掉。先用df查看是否被掛接,若是掛接,用umount 處理。這裏再在登陸任一服務器,在命令行執行vgscan查看共享卷組的名稱,在web界面添加LVM資源的時候須要這個值。繼續回到瀏覽器管理界面,進行LVM資源添加,使其在組db_grp之下。
    Rhel 7 pcs 實現oracle 12c高可用
    注意:exclusive的默認值爲false,須要改爲true,否則邏輯卷組會一直處於非激活狀態。
    Rhel 7 pcs 實現oracle 12c高可用
    建立成功後,運行資源組的服務器上,再執行指令 lvscan ,邏輯卷的狀態爲ACTIVE,而另一臺服務器的狀態則繼續爲inactive。
  3. 建立文件系統資源。文件系統以來於邏輯卷資源,必須在LVM卷正常的狀況下,再進行這個步驟纔是有效的方法。
    Rhel 7 pcs 實現oracle 12c高可用
    建立完文件系統資源,除了頁面上看見此資源狀態爲綠色的「running」外,還能夠登陸運行資源組的系統,執行指令df –h 查看文件系統是否被自動掛接到目錄。
    Rhel 7 pcs 實現oracle 12c高可用
    Rhel 7 pcs 實現oracle 12c高可用
    接下來要暫時中斷資源的建立,而轉向建立數據庫。由於共享的文件系統(實際被運行資源的主機獨佔)已經掛接,oracle數據庫的相關文件,就要在其上生成即建立。等到數據庫建立完畢,實例成功啓動,再回到web管理界面進行oracle數據庫資源的建立。

建立數據庫

 確保shm的值大於等於2G。若是不是,則執行下列步驟改變其值。
(1) 在 /etc/fstab文件添加一行
tmpfs /dev/shm tmpfs defaults,size=2048M 0 0
(2) 執行命令從新掛載 mount -o remount /dev/shm
(3) 執行 df –h驗證其正確性。
Rhel 7 pcs 實現oracle 12c高可用
 用vnc客戶端登陸到運行資源組的服務器(就是有vip,掛接文件系統到目錄/oradata的這個系統),跟前邊安裝oracle軟件同樣,切換到用戶oracle,設置好環境變量DISPLAY=:1,執行數據庫助手執行 dbca,片刻就彈出配置圖形界面,按提示輸入相關信息。須要注意的是,數據庫文件位置要選(或者填)共享文件系統掛節點/oradata,快閃恢復區(FRA)也要填寫在/oradata目錄,以下圖所示。
Rhel 7 pcs 實現oracle 12c高可用
建立過程須要用root執行一個腳本,照着作就好。建立完畢,試着啓動一下實例,看是否正常。
Rhel 7 pcs 實現oracle 12c高可用
 建立數據庫實例資源。前邊的步驟已經正確無誤的建立了數據庫,而且能夠正常啓動實例。關閉該實例,待建立好oracle實例資源後,pcs應該正常拉起oracle實例自動啓動。
Rhel 7 pcs 實現oracle 12c高可用
特別須要注意資源組(Resource Group)順序問題,它必須在文件系統掛接之後才能夠往下進行。若是建立數據庫資源出錯,多半是選項參數部分輸入錯誤,仔細覈對就好了。建立成功之後,運行狀態以下圖:
Rhel 7 pcs 實現oracle 12c高可用
左側框中,只有所有是藍色才爲正常,不正常必定是紅色!!!那麼oracle數據庫實例真的起來了麼?登陸系統,驗證一下。
Rhel 7 pcs 實現oracle 12c高可用
Oracle進程有了,再看鏈接狀況。
Rhel 7 pcs 實現oracle 12c高可用

故障模擬

 監聽器故障模擬,分監聽器中止與監聽器啓動不了兩種狀況。
 監聽器中止。登陸運行資源組的服務器系統,用以下命令進行操做:
[root@ora101 ~]# su - oracle
Last login: Fri May 29 22:31:52 EDT 2020
[oracle@ora101 ~]$ lsnrctl stop

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 22:32:10

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.66)(PORT=1521)))
The command completed successfully
[oracle@ora101 ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 22:32:15

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.66)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory
監聽器確實中止了,但並無發生資源漂移。
Rhel 7 pcs 實現oracle 12c高可用
等待片刻之後,監聽器會又在原服務器自動啓動。
 中止監聽器,並故意修改監聽器配置,使其不能被正常啓動。
Rhel 7 pcs 實現oracle 12c高可用
改完後,中止監聽器,pcs如今應該沒法重啓監聽器。甚至於,手工啓動也不行。
[oracle@ora101 ~]$ lsnrctl start

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 23:05:56

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Starting /u01/app/oracle/product/12.2.0/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.166)(PORT=1521)))
TNS-12545: Connect failed because target host or object does not exist
TNS-12560: TNS:protocol adapter error
TNS-00515: Connect failed because target host or object does not exist
Linux Error: 99: Cannot assign requested address

Listener failed to start. See the error message(s) above...
如今,咱們再來看集羣的狀態,發現資源組發生了轉移,漂移到另外一臺服務器上去了。
Rhel 7 pcs 實現oracle 12c高可用
再把修改過的監聽器配置恢復回來,手動啓動監聽器,提示不能被正確的驗證。
Rhel 7 pcs 實現oracle 12c高可用

 數據庫實例故障模擬,也可分中止實例及破壞致使實例不能鏈接兩種情形。
 中止數據庫實例,觀察是否可以被pcs從新啓動。
Rhel 7 pcs 實現oracle 12c高可用
數秒中之後,數據庫實例又會在這個服務器自動啓動。
Rhel 7 pcs 實現oracle 12c高可用
 修改運行資源組所在服務器的oracle環境變量文件 .bash_profile,使數據庫實例不能被正常鏈接。
Rhel 7 pcs 實現oracle 12c高可用
實例關閉之後,嘗試用手工啓動實例(自動起不來),應該不會成功。
Rhel 7 pcs 實現oracle 12c高可用
數據庫實例被中止之後,pcs會去嘗試數次重啓oracle,不像監聽器那麼迅速就實現了資源的漂移。
Rhel 7 pcs 實現oracle 12c高可用
由此可知,修改oracle環境變量並不能形成orace實例啓動,要使數據庫實例不能啓動,能夠破壞掉數據庫參數文件達到目的,這裏就再也不嘗試。

 模擬服務器死機故障
登陸運行資源組的服務器,直接關機,再另外一臺服務器上執行指令查看運行狀態。
Rhel 7 pcs 實現oracle 12c高可用
目前,資源都在節點ora102上運行,那麼咱們就把節點ora102系統關機。
Rhel 7 pcs 實現oracle 12c高可用
徹底關閉之後,資源所有漂移到另一個節點ora101,咱們從命令行及web頁面分別驗證一下。
(1) 命令行查看狀態:
Rhel 7 pcs 實現oracle 12c高可用
(2) Web管理界面查看狀態:

Rhel 7 pcs 實現oracle 12c高可用

其餘相關

 配置存儲位置,在文件/var/lib/pacemaker/cib/cib.xml 中。 主要日誌文件:/var/log/pcsd/pcsd.log。  集羣同步文件:/etc/corosync/corosync.conf

相關文章
相關標籤/搜索