做者:田逸(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
(5) 兩節點修改lvm.conf,把系統的卷排除在外。
(6) 兩節點執行 dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)oracle
準備yum源或者服務器鏈接到互聯網。
執行安裝 yum install pcs fence-agents-all。
配置pcs服務開機自啓動 systemctl enable pcsd.app
準備好安裝介質,並把其複製到服務器的相關目錄,解包後待用;
準備環境變量等所需配置的腳本,並給予執行權限;
執行該腳本,校驗之;
安裝並啓用vnc服務;
Vnc客戶端鏈接到系統;
把oracle 安裝目錄拷貝到/home/oracle並執行chown –R oracle:oinstall /home/oracle
執行 xhost + 受權;
-------------------以上是root用戶----------------------------
切換用戶到oracle:su – oracle
設置環境變量display: export DISPLAY=:1(這個值必定要與vncserver啓動的輸出值相匹配);
進入安裝軟件目錄 cd database,執行腳本./runInstaller ,調出圖形界面後,照提示進行下一步,直到安裝完成。
tcp
(1) 兩臺設備都執行netca 建立監聽器
(2) 修改兩臺設備的監聽器文件/u01/app/oracle/product/12.2.0/network/admin/listener.ora,使HOST的值爲vip。
(3) 暫時不要啓動監聽器,由於vip沒有被自動設置到系統。若是須要驗證,修改HOST的值爲本機地址或者主機別名。
(1) 兩臺服務器繼續執行指令 netca ,鼠標選取第三個單選項—本地網絡服務命名。
(2) 確保兩臺設備的命名地址爲vip。
啓動pcs服務。執行命令 systemctl start pcsd (前邊配置了開啓啓動,所以重啓系統就不須要再執行此命令;另外corosync服務也不須要手動去啓動,pcs會自動處理)。
設置pcs用戶hacluster密碼。Passwd hacluster (hacluster帳號是安裝pacemaker時自動生成的,能夠把兩臺服務器的hacluster帳號設置成一樣的密碼,也能夠不同)。
---------------------------以上操做要在兩臺物理機上分別進行--------------
驗證用戶。在任一服務器執行 pcs cluster auth ora101 ora102 按提示輸入上述步驟設定的密碼,完成驗證。
瀏覽器訪問任一服務器的地址,pcs的端口號爲:2224,輸入用戶名hackuster及密碼。
(1) 建立集羣,填寫相應的信息。
等待幾秒鐘,建立好集羣。
鼠標點連接「my-cls01」,查看更多的信息。
鼠標選點連接「ora102」,也能夠看到其上運行的服務(pacemaker等),這個時候,咱們能夠返回到系統命令行,查看corosync服務是否啓動,配置文件是否自動生成。沒建立集羣以前,corosync配置文件不存在的,只有個例子文件corosync.conf.example。
(2) 按以下順序添加資源及組
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)))
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.
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
確保shm的值大於等於2G。若是不是,則執行下列步驟改變其值。
(1) 在 /etc/fstab文件添加一行
tmpfs /dev/shm tmpfs defaults,size=2048M 0 0
(2) 執行命令從新掛載 mount -o remount /dev/shm
(3) 執行 df –h驗證其正確性。
用vnc客戶端登陸到運行資源組的服務器(就是有vip,掛接文件系統到目錄/oradata的這個系統),跟前邊安裝oracle軟件同樣,切換到用戶oracle,設置好環境變量DISPLAY=:1,執行數據庫助手執行 dbca,片刻就彈出配置圖形界面,按提示輸入相關信息。須要注意的是,數據庫文件位置要選(或者填)共享文件系統掛節點/oradata,快閃恢復區(FRA)也要填寫在/oradata目錄,以下圖所示。
建立過程須要用root執行一個腳本,照着作就好。建立完畢,試着啓動一下實例,看是否正常。
建立數據庫實例資源。前邊的步驟已經正確無誤的建立了數據庫,而且能夠正常啓動實例。關閉該實例,待建立好oracle實例資源後,pcs應該正常拉起oracle實例自動啓動。
特別須要注意資源組(Resource Group)順序問題,它必須在文件系統掛接之後才能夠往下進行。若是建立數據庫資源出錯,多半是選項參數部分輸入錯誤,仔細覈對就好了。建立成功之後,運行狀態以下圖:
左側框中,只有所有是藍色才爲正常,不正常必定是紅色!!!那麼oracle數據庫實例真的起來了麼?登陸系統,驗證一下。
Oracle進程有了,再看鏈接狀況。
監聽器故障模擬,分監聽器中止與監聽器啓動不了兩種狀況。
監聽器中止。登陸運行資源組的服務器系統,用以下命令進行操做:
[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
監聽器確實中止了,但並無發生資源漂移。
等待片刻之後,監聽器會又在原服務器自動啓動。
中止監聽器,並故意修改監聽器配置,使其不能被正常啓動。
改完後,中止監聽器,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...
如今,咱們再來看集羣的狀態,發現資源組發生了轉移,漂移到另外一臺服務器上去了。
再把修改過的監聽器配置恢復回來,手動啓動監聽器,提示不能被正確的驗證。
數據庫實例故障模擬,也可分中止實例及破壞致使實例不能鏈接兩種情形。
中止數據庫實例,觀察是否可以被pcs從新啓動。
數秒中之後,數據庫實例又會在這個服務器自動啓動。
修改運行資源組所在服務器的oracle環境變量文件 .bash_profile,使數據庫實例不能被正常鏈接。
實例關閉之後,嘗試用手工啓動實例(自動起不來),應該不會成功。
數據庫實例被中止之後,pcs會去嘗試數次重啓oracle,不像監聽器那麼迅速就實現了資源的漂移。
由此可知,修改oracle環境變量並不能形成orace實例啓動,要使數據庫實例不能啓動,能夠破壞掉數據庫參數文件達到目的,這裏就再也不嘗試。
模擬服務器死機故障
登陸運行資源組的服務器,直接關機,再另外一臺服務器上執行指令查看運行狀態。
目前,資源都在節點ora102上運行,那麼咱們就把節點ora102系統關機。
徹底關閉之後,資源所有漂移到另一個節點ora101,咱們從命令行及web頁面分別驗證一下。
(1) 命令行查看狀態:
(2) Web管理界面查看狀態:
配置存儲位置,在文件/var/lib/pacemaker/cib/cib.xml 中。 主要日誌文件:/var/log/pcsd/pcsd.log。 集羣同步文件:/etc/corosync/corosync.conf