實時主備概述
實時主備由一個主庫以及一個或者多個配置了實時(Realtime)歸檔的備庫組成,其主要目的是保障數據庫可用性,提高數據安全性。實時主備系統中,主庫提供完整的數據庫功能,備庫提供只讀服務。主庫修改數據產生的Redo日志,通過實時歸檔機制,在寫入聯機Redo日志文件之前發送到備庫,實時備庫通過重演Redo日志與主庫保持數據同步。當主庫出現故障時,備庫在將所有Redo日志重演結束后,就可以切換為主庫對外提供數據庫服務
1 環境准備
服務器 主庫IP:192.168.118.120 dm8數據庫 實例名 :RAC1 端口號:5236
服務器 備庫IP:192.168.118.121 dm8數據庫 實例名 :RAC2 端口號:5236
# 數據庫啟動服務命令路徑/dm8/bin,實例配置文件路徑/dm8/data/DAMENG/
2 主備庫分別初始化實例(按客戶要求)
./dminit path=/dm8/data page_size=32 instance_name=RAC1
./dminit path=/dm8/data page_size=32 instance_name=RAC2
3 備份還原
# 如果是初始搭建環境,可以通過對主庫脫機備份、對備庫脫機還原的方式來准備數據, 如果主庫已經處於運行狀態,則可以對主庫進行聯機備份、對備庫脫機還原的方式來准備數據。
3.1 主庫創建實例之后,啟動數據庫並登錄
./dmserver /dm8/data/DAMENG/dm.ini
3.2 關閉數據庫,以dmrman備份數據庫
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' BACKUPSET '/dm8/data/backup';
3.3 將備份文件復制到備庫對應目錄下(
如果是root用戶,復制成功需要將備份文件設置屬於dmdba:dinstall用戶組
)
scp -r /dm8/data/backup
dmdba@192.168.118.121:/dm8/data/backup
3.4 備庫啟動dmrman執行數據庫還原
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
4 配置集群文件
4.1 vim dm.ini #主備庫實例都需更改下面參數
ALTER_MODE_STATUS = 0 #不允許手工方式修改實例模式/狀態/OGUID
ENABLE_OFFLINE_TS = 2 #不允許備庫 OFFLINE 表空間
MAL_INI = 1 #打開 MAL 系統
ARCH_INI = 1 #打開歸檔配置
4.2 vim dmmal.ini #主備庫配置必須完全一致
MAL_CHECK_INTERVAL = 5 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 鏈路斷開的時間
[MAL_INST1]
MAL_INST_NAME = RAC1 #實例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.118.120 #MAL 系統監聽 TCP 連接的 IP 地址
MAL_PORT = 61141 #MAL 系統監聽 TCP 連接的端口
MAL_INST_HOST = 192.168.118.120 #實例的對外服務 IP 地址
MAL_INST_PORT = 5236 #實例的對外服務端口,dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #實例對應的守護進程監聽 TCP 連接的端口
MAL_INST_DW_PORT = 33141 #實例監聽守護進程 TCP 連接的端口
[MAL_INST2]
MAL_INST_NAME = RAC2
MAL_HOST = 192.168.118.121
MAL_PORT = 61141
MAL_INST_HOST = 192.168.118.121
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
4.3 vim dmarch.ini #主備庫歸檔目標實例名不一致,其他一致
#與聯機 Redo 日志文件可以被覆蓋重用不同,本地歸檔日志文件不能被覆蓋,寫入其中Redo 日志信息會一直保留,直到用戶主動刪除;如果配置了歸檔日志空間上限,系統會自動刪除最早生成的歸檔 Redo 日志文件,騰出空間。如果磁盤空間不足,且沒有配置歸檔日志空間上限(或者配置的上限超過實際空間),系統將自動掛起,直到用戶主動釋放出足夠的空間后繼續運行。配置如下:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = RAC2 #實時歸檔目標實例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm8/data/DAMENG/arch #本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 500000 #單位 Mb,0 表示無限制,范圍 1024~4294967294M
4.4 配置dmwatcher.ini #主備庫配置一致
[GRP1]
DW_TYPE = GLOBAL #全局守護類型
DW_MODE = MANUAL # 手工切換
AUTO自動切換模式必須部署一個確認監視器
DW_ERROR_TIME = 10 #遠程守護進程故障認定時間
INST_RECOVER_TIME = 60 #主庫守護進程啟動恢復的間隔時間
INST_ERROR_TIME = 10 #本地實例故障認定時間
INST_OGUID = 453332 #守護系統唯一 OGUID 值
INST_INI = /dm8/data/DAMENG/dm.ini #dm.ini配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啟動功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫發送日志到備庫的時間閥值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日志的時間閥值,默認關閉
4.5 vim dmmonitor.ini #生產環境如果是自動切換需單獨一台服務器配置監視器
MON_DW_Confirm = 0 #
0表示普通監視器 ,最多配置8個,1 確認監視器模式
MON_LOG_PATH = /dm8/data/log #監視器日志文件存放路徑
MON_LOG_INTERVAL = 60 #每隔 60s 定時記錄系統信息到日志文件
MON_LOG_FILE_SIZE = 32 #每個日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件總占用空間
[GRP1]
MON_INST_OGUID = 453332 #組 GRP1 的唯一OGUID 值
#配置為監視器到組GRP1的守護進程的連接信息以―IP:PORT‖的形式配置
#IP對應dmmal.ini中的 MAL_HOST,PORT 對應 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.118.120:52141
MON_DW_IP = 192.168.118.121:52141
5 以 Mount方式啟動主備庫
./dmserver /dm8/data/DAMENG/dm.ini mount
#一定要以 Mount 方式啟動數據庫實例,否則系統啟動時會重構回滾表空間,生成 Redo 日志;啟動后應用可能連接到數據庫實例進行操作,破壞主備庫的數據一致性。數據守護配置結束后,守護進程會自動 Open 數據庫
6 啟動命令行工具 disql,登錄主備庫設置 OGUID 值和數據庫模式。
6.1 主庫
sp_set_oguid(453332);
alter database primary;
6.2 備庫
sp_set_oguid(453332);
alter database standby;
7 啟動各個主備庫上的守護進程
./dmwatcher /dm8/data/DAMENG/dmwatcher.ini
8 啟動監視器
./dmmonitor /dm8/data/DAMENG/dmmonitor.ini


監視器提供一系列命令,支持當前守護系統狀態查看以及故障處理,可輸入help 命令查看各種命令說明使用,結合實際情況選擇使用。至此一主一備的實時數據守護系統搭建完畢,在搭建步驟和各項配置都正確的情況下, 在監視器上執行 show 命令,可以監控到所有實例都處於 Open 狀態,所有守護進程也都處於Open 狀態,即為正常運行狀態。
9 創建服務(root用戶,安裝目錄script/root下,輸入./dm_service_installer.sh -h查看幫助,過程略)
#如果是自動切換,一定要創建監視器服務並啟動
創建成功之后,由於前面已經前台方式啟動,以服務方式啟動會報錯,需要將前台服務關閉。關閉順序如下
1. 如果啟動了確認監視器,先關閉確認監視器(防止自動接管)
2. 關閉備庫守護進程(防止重啟實例)
3. 關閉主庫守護進程(防止重啟實例)
4.先關主庫,后關備庫(主庫 Shutdown 過程中,需要 Purge 所有已提交事務,會修改數據,並產生 Redo 日志。如果先 Shutdown 備庫,會導致主庫發送歸檔日志失敗,並且由於主庫已經處於 Shutdown 狀態,會導致主庫異常關閉)
10 服務名配置
配置 DM 數據守護,一般要求配置連接服務名,以實現故障自動重連。連接服務名可以在 DM 提供的 JDBC、DPI 等接口中使用,連接數據庫時指定連接服務名,接口會隨機選擇一個 IP 進行連接,如果連接不成功或者服務器狀態不正確,則順序獲取下一個 IP 進行連接,直至連接成功或者遍歷了所有 IP。可以通過編輯 dm_svc.conf 文件配置連接服務名。
dm_svc.conf 配置文件在 DM 安裝時生成,Windows 平台下位於%SystemRoot%\system32 目錄,Linux 平台下位於/etc 目錄,詳細配置見系統管理員手冊
10.1 vim dm_svc.conf
dw_svc=(192.168.118.120:5236,192.168.118.121:5236)
LOGIN_MODE =(1)
JDBC連接串寫法:#具體參考程序員手冊
使用連接串:jdbc:
dm://ip:port
使用服務名:jdbc:dm://服務名
類名為:dm.jdbc.driver.DmDriver
10.2 可直接字符串連接,無需在每個dm_svc.conf文件配置。
主備示例: url="jdbc:dm://dmconn?dmconn=(192.168.10.11:5236,192.168.10.12:5236)&LOGIN_MODE=(1)";