Rhel 7 pcs 實現oracle 12c高可用

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

需求描述

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

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

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

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

實施步驟

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

硬件上架

 本機硬盤到位,線纜連接到位,包括網線、共享存儲連接卡及連接線,心跳網絡連接到位,管理網絡連接到位。
 安裝介質到位:包括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)

安裝pacemaker

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

安裝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高可用

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

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