1. 程式人生 > 其它 >達夢資料庫V8-搭建實時主備

達夢資料庫V8-搭建實時主備

技術標籤:達夢資料庫資料庫

前言

配置實時主備
配置實時主備,有以下幾種配置方案,可以根據實際情況部署:

  1. 只配置主庫和最多 8 個實時備庫。
  2. 只配置主庫和最多 8 個非同步備庫。
  3. 配置主庫、最多 8 個實時備庫,和最多 8 個非同步備庫。
    在實際應用中,如果資料庫規模很大,並且對資料的實時性要求不是很嚴格, 則可以配置多個非同步備庫用於分擔統計報表等任務。

一、準備資料

在配置資料守護 V4.0 之前,必須先通過備份還原方式同步各資料庫的資料,確保各資料的資料保持完全一致。 主庫可以是新初始化的資料庫,也可以是正在生產、使用中的資料庫。

不能使用分別初始化庫或者直接拷貝資料檔案的方法,原因如下:

1. 每個庫都有一個永久魔數(permenant_magic), 一經生成,永遠不會改變, 主 庫傳送日誌時會判斷這個值是否一樣,確保是來自同一個資料守護環境中的庫,否則傳送不 了日誌。

2. 由於 dminit 初始化資料庫時,會生成隨機金鑰用於加密,每次生成的金鑰都不 相同,備庫無法解析採用主庫金鑰加密的資料。

3. 每個庫都有一個數據庫魔數(DB_MAGIC), 每經過一次還原、恢復操作, DB_MAGIC 就會產生變化,需要通過這種方式來區分同一個資料守護環境中各個不同的庫。

需要注意:

對於新初始化的庫,首次啟動不允許使用 Mount 方式,需要先正常啟動並正常 退出,然後才允許 Mount 方式啟動。 準備資料時,如果主庫是新初始化的庫,先正常啟動並正常退出,然後再使用 備份還原方式準備備庫資料。

如果是初始搭建環境,可以通過對主庫離線備份、對備庫離線還原的方式來準備資料,如果主庫已經處於執行狀態,則可以對主庫進行聯機備份、對備庫離線還原的方式來準備資料。

需要注意:
在對資料庫進行聯機備份的時候需要開啟資料庫歸檔模式,才可以對資料庫進行聯機備份。

資料庫配置歸檔方法一:

1.配置 dm.ini,開啟 ARCH_INI 引數
ARCH_INI = 1 #開啟歸檔配置
2.配置 dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔型別
ARCH_DEST = /dm8/data/DAMENG/arch #本地歸檔檔案存放路徑
ARCH_FILE_SIZE =
128 #單位 Mb,本地單個歸檔檔案最大值 ARCH_SPACE_LIMIT = 0 #單位 Mb, 0 表示無限制,範圍 1024~4294967294M
3.重啟資料庫
[[email protected] ~]$ cd /dm8/bin
[[email protected] ~]$ ./DmServiceDMSERVER restart

資料庫配置歸檔方法二:

執行SQL語句配置歸檔模式
alter DATABASE MOUNT;
alter DATABASE ARCHIVELOG;
alter DATABASE ADD ARCHIVELOG 'DEST=/dm8/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=0';
alter DATABASE OPEN;

對資料庫進行備份下面方法任選其一,根據現場環境而定。

離線備份、離線還原 方法一:

1. 正常關閉資料庫
2. 進行離線備份
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1
BACKUPSET '/dm/data/BACKUP_FILE_01'"
3. 拷貝備份檔案到備庫所在機器
4. 執行離線資料庫還原與恢復
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET
'/dm/data/BACKUP_FILE_01'"  
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET
'/dm/data/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

聯機備份、離線還原 方法二:

1. 對主庫進行聯機備份操作
SQL> BACKUP DATABASE BACKUPSET '/dm/data/BACKUP_FILE_01';
2. 拷貝備份檔案到備庫所在機器
3. 執行離線資料庫還原與恢復
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET
'/dm/data/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET
'/dm/data/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

對資料庫例項檔案打包 方法三:

1、正常關閉資料庫
2、對資料庫例項進行打包壓縮
[[email protected] bin]$ cd /dm8/data/
[[email protected] data]$ ll
總用量 4
drwxr-xr-x. 7 dmdba dmdba 4096 12月  8 12:18 DAMENG
[[email protected] data]$ zip -r dameng.zip DAMENG/
3. 拷貝備份檔案到備庫所在機器例項目錄下

二、環境說明

準備三臺機器 A、B、C。A機器和B機器用來部署主備庫, C機器用來部署確認監視器。
其中 A 和 B 配置兩塊網絡卡,一塊接入內部網路交換模組,一塊接入到外部交換機, C 接入內部網路。如圖:

三臺機器都事先安裝了 DM,安裝路徑為’/dm8’,執行程式儲存在’/dm/bin’目錄中,資料存放路徑為’/dm8/data’。

各主備庫的例項名建議採用“組名_守護環境_序號” 的方式命名,方便按組區分不同例項,注意總長度不能超過 16。本示例中組名為“GRP1”,配置為實時主備,主庫命名為“GRP1_RT_01”,備庫命名為“GRP1_RT_02”。

在這裡插入圖片描述

在這裡插入圖片描述

三、環境搭建

1、安裝資料庫

2、A 機器上初始化庫至目錄/dm8/data:

[[email protected] data]$ cd /dm8/bin
[[email protected] bin]$ ./dminit path=/dm8/data
[[email protected] bin]$./dmserver /dm8/data/DAMENG/dm.ini 
--初始化完畢後關閉臨時啟動方式。

3、備份A機器上的例項檔案到B機器上進行還原、恢復

1、正常關閉資料庫
2、對資料庫例項進行打包壓縮
[[email protected] bin]$ cd /dm8/data/
[[email protected] data]$ ll
總用量 4
drwxr-xr-x. 7 dmdba dmdba 4096 12月  8 12:18 DAMENG
[[email protected] data]$ zip -r dameng.zip DAMENG/
3. 拷貝備份檔案到備庫所在機器例項目錄下
[[email protected] data]$ scp dameng.zip [email protected]:/dm8/data 
4.在B機器上對dameng.zip進行解壓
[[email protected] data]$ unzip dameng.zip

4、配置主庫 GRP1_RT_01

配置 dm.ini

[[email protected] /]$ cd /dm8/data/DAMENG/
[[email protected] DAMENG]$ vi dm.ini

在 A 機器上配置主庫的例項名為 GRP1_RT_01, dm.ini 引數修改如下:
INSTANCE_NAME = GRP1_RT_01 #例項名,建議使用―組名_守護環境_序號‖的命名方式,總長度不能超過 16
PORT_NUM = 5236 #資料庫例項監聽埠
DW_INACTIVE_INTERVAL = 60 #接收守護程序訊息超時時間
ALTER_MODE_STATUS = 0 #不允許手工方式修改例項模式/狀態/OGUID
ENABLE_OFFLINE_TS = 2 #不允許備庫 OFFLINE 表空間
MAL_INI = 1 #開啟 MAL 系統
ARCH_INI = 1 #開啟歸檔配置
RLOG_SEND_APPLY_MON = 64 #統計最近 64 次的日誌傳送資訊

配置 dmmal.ini

配置 MAL 系統,各主備庫的 dmmal.ini 配置必須完全一致, MAL_HOST 使用內部網路 IP,MAL_PORT 與 dm.ini 中 PORT_NUM 使用不同的埠值, MAL_DW_PORT 是各例項對應的守護程序之間,以及守護程序和監視器之間的通訊埠,配置如下:

[[email protected] /]$ cd /dm8/data/DAMENG/
[[email protected] DAMENG]$ vi  dmmal.ini

MAL_CHECK_INTERVAL = 5 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 鏈路斷開的時間
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #例項名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.2.193 #MAL 系統監聽 TCP 連線的 IP 地址
MAL_PORT = 5436 #MAL 系統監聽 TCP 連線的埠
MAL_INST_HOST = 192.168.1.193 #例項的對外服務 IP 地址
MAL_INST_PORT = 5236 #例項的對外服務埠,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5536 #例項本地的守護程序監聽 TCP 連線的埠
MAL_INST_DW_PORT = 5336 #例項監聽守護程序 TCP 連線的埠
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.2.194
MAL_PORT = 5436
MAL_INST_HOST = 192.168.1.194
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5436

配置 dmarch.ini

當前例項 GRP1_RT_01 是主庫,需要向 GRP1_RT_02(實時備庫)同步資料,因此實時歸檔的 ARCH_DEST 配置為 GRP1_RT_02。

[[email protected] /]$ cd /dm8/data/DAMENG/
[[email protected] DAMENG]$ vi  dmarch.ini

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #實時歸檔型別
ARCH_DEST = GRP1_RT_02 #實時歸檔目標例項名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔型別
ARCH_DEST = /dm8/data/DAMENG/arch #本地歸檔檔案存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔檔案最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb, 0 表示無限制,範圍 1024~4294967294M

配置 dmwatcher.ini

修改 dmwatcher.ini 配置守護程序,配置為全域性守護型別,使用自動切換模式。

[[email protected] /]$ cd /dm8/data/DAMENG/
[[email protected] DAMENG]$ vi  dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL #全域性守護型別
DW_MODE = AUTO #自動切換模式
DW_ERROR_TIME = 10 #遠端守護程序故障認定時間
INST_RECOVER_TIME = 60 #主庫守護程序啟動恢復的間隔時間
INST_ERROR_TIME = 10 #本地例項故障認定時間
INST_OGUID = 453331 #守護系統唯一 OGUID 值
INST_INI = /dm/data/DAMENG/dm.ini #dm.ini 配置檔案路徑
INST_AUTO_RESTART = 1 #開啟例項的自動啟動功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令列方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫傳送日誌到備庫的時間閾值,預設關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日誌的時間閾值,預設關閉

啟動主庫

以 Mount 方式啟動主庫

./dmserver /dm/data/DAMENG/dm.ini mount

注意:一定要以 Mount 方式啟動資料庫例項,否則系統啟動時會重構回滾表空間,生 成 Redo日誌;並且,啟動後應用可能連線到資料庫例項進行操作,破壞主備 庫的資料一致性。資料守護配置結束後,守護程序會自動 Open 資料庫。

設定 OGUID 並修改資料庫模式

啟動命令列工具 DIsql,登入主庫設定 OGUID 值。

[[email protected] DAMENG]$ cd /dm8/bin
[[email protected] bin]$ ./disql
disql V8
使用者名稱:
密碼:

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

SQL>alter database primary;  #修改資料庫為 Primary 模式

注意:系統通過 OGUID 值確定一個守護程序組,由使用者保證 OGUID 值的唯一性,並確保資料守護系統中,資料庫、守護程序和監視器配置相同的 OGUID 值。

5、配置備庫 GRP1_RT_02

配置 dm.ini

[[email protected] /]$ cd /dm8/data/DAMENG/
[[email protected] DAMENG]$ vi  dm.ini

在 A 機器上配置主庫的例項名為 GRP1_RT_01, dm.ini 引數修改如下:
INSTANCE_NAME = GRP1_RT_02 #例項名,建議使用―組名_守護環境_序號的命名方式,總長度不能超過 16
PORT_NUM = 5236 #資料庫例項監聽埠
DW_INACTIVE_INTERVAL = 60 #接收守護程序訊息超時時間
ALTER_MODE_STATUS = 0 #不允許手工方式修改例項模式/狀態/OGUID
ENABLE_OFFLINE_TS = 2 #不允許備庫 OFFLINE 表空間
MAL_INI = 1 #開啟 MAL 系統
ARCH_INI = 1 #開啟歸檔配置
RLOG_SEND_APPLY_MON = 64 #統計最近 64 次的日誌傳送資訊

配置 dmmal.ini

配置 MAL 系統,各主備庫的 dmmal.ini 配置必須完全一致, MAL_HOST 使用內部網 絡 IP,MAL_PORT 與 dm.ini 中 PORT_NUM 使用不同的埠值, MAL_DW_PORT 是各例項 對應的守護程序之間,以及守護程序和監視器之間的通訊埠,配置如下:

[[email protected] /]$ cd /dm8/data/DAMENG/
[[email protected] DAMENG]$ vi  dmmal.ini

MAL_CHECK_INTERVAL = 5 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 鏈路斷開的時間
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #例項名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.2.193 #MAL 系統監聽 TCP 連線的 IP 地址
MAL_PORT = 5436 #MAL 系統監聽 TCP 連線的埠
MAL_INST_HOST = 192.168.1.193 #例項的對外服務 IP 地址
MAL_INST_PORT = 5236 #例項的對外服務埠,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5536 #例項本地的守護程序監聽 TCP 連線的埠
MAL_INST_DW_PORT = 5336 #例項監聽守護程序 TCP 連線的埠
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.2.194
MAL_PORT = 5436
MAL_INST_HOST = 192.168.1.194
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5436

配置 dmarch.ini

當前例項 GRP1_RT_02 是備庫,守護系統配置完成後,可能在各種故障處理中, RP1_RT_02 切換為新的主庫,正常情況下, GRP1_RT_01 會切換為新的備庫,需要向 GRP1_RT_01 同步資料,因此實時歸檔的 ARCH_DEST 配置為 GRP1_RT_01。

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #實時歸檔型別
ARCH_DEST = GRP1_RT_01 #實時歸檔目標例項名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔型別
ARCH_DEST = /dm8/data/DAMENG/arch #本地歸檔檔案路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔檔案最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb, 0 表示無限制,範圍 1024~4294967294M

配置 dmwatcher.ini

修改 dmwatcher.ini 配置守護程序,配置為全域性守護型別,使用自動切換模式。

[GRP1]
DW_TYPE = GLOBAL #全域性守護型別
DW_MODE = AUTO #自動切換模式
DW_ERROR_TIME = 10 #遠端守護程序故障認定時間
INST_RECOVER_TIME = 60 #主庫守護程序啟動恢復的間隔時間
INST_ERROR_TIME = 10 #本地例項故障認定時間
INST_OGUID = 453331 #守護系統唯一 OGUID 值
INST_INI = /dm/data/DAMENG/dm.ini #dm.ini 配置檔案路徑
INST_AUTO_RESTART = 1 #開啟例項的自動啟動功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令列方式啟動
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日誌的時間閾值,預設關閉

啟動備庫

以 Mount 方式啟動備庫

./dmserver /dm/data/DAMENG/dm.ini mount

一定要以 Mount 方式啟動資料庫例項,否則系統啟動時會重構回滾表空間, 生成 Redo 日誌;並且,啟動後應用可能連線到資料庫例項進行操作,破壞主 備庫的資料一致性。資料守護配置結束後,守護程序會自動 Open 資料庫。

設定 OGUID 並修改資料庫模式

[[email protected] DAMENG]$ cd /dm8/bin
[[email protected] bin]$ ./disql
disql V8
使用者名稱:
密碼:

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

SQL>alter database primary;  #修改資料庫為 standby 模式

注意:如果當前資料庫不是 Normal 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值 為 1,允許修改資料庫模式,修改 Standby 模式成功後再改回為 0。

6、啟動守護程序

啟動各個主備庫上的守護程序:

機器A
[[email protected] DAMENG]$ cd /dm8/bin
[[email protected] bin]$  ./dmwatcher /dm8/data/DAMENG/dmwatcher.ini
機器B
[[email protected] DAMENG]$ cd /dm8/bin
[[email protected] bin]$  ./dmwatcher /dm8/data/DAMENG/dmwatcher.ini

7、配置備監視器。

1、在C機器安裝資料庫

2、在dm8目錄建立dmmonitor.ini

由於主庫和實時備庫的守護程序配置為自動切換模式,因此這裡選擇配置確認監視器。和普通監視器相比,確認監視器除了相同的命令支援外,在主庫發生故障時,能夠自動通知實時備庫接管為新的主庫,具有自動故障處理的功能。

故障自動切換模式下,必須配置確認監視器,且確認監視器最多隻能配置一個。

修改 dmmonitor.ini 配置確認監視器,其中 MON_DW_IP 中的 IP 和 PORT 和
dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置項保持一致。

MON_DW_CONFIRM = 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 = 453331 #組 GRP1 的唯一 OGUID 值
#以下配置為監視器到組 GRP1 的守護程序的連線資訊,以―IP:PORT‖的形式配置
#IP 對應 dmmal.ini 中的 MAL_HOST, PORT 對應 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.2.193:5536
MON_DW_IP = 192.168.2.194:5536

8、啟動監視器

機器C

[[email protected] DAMENG]$ cd /dm8/bin
[[email protected] bin]$  ./dmmonitor /dm/data/dmmonitor.ini

監視器提供一系列命令,支援當前守護系統狀態檢視以及故障處理,可輸入 help 命令,檢視各種命令說明使用,結合實際情況選擇使用。 至此一主一備的實時資料守護系統搭建完畢,在搭建步驟和各項配置都正確的情況下, 在監視器上執行 show 命令,可以監控到所有例項都處於 Open 狀態,所有守護程序也都處於 Open 狀態,即為正常執行狀態。

9、服務名配置

配置 DM 資料守護,一般要求配置連線服務名,以實現故障自動重連。連線服務名可以
在 DM 提供的 JDBC、 DPI 等介面中使用,連線資料庫時指定連線服務名,介面會隨機選擇
一個 IP 進行連線,如果連線不成功或者伺服器狀態不正確,則順序獲取下一個 IP 進行連
接,直至連線成功或者遍歷了所有 IP。
可以通過編輯 dm_svc.conf 檔案配置連線服務名。 dm_svc.conf 配置檔案在 DM 安
裝時生成, Windows 平臺下位於%SystemRoot%\system32 目錄, Linux 平臺下位於
/etc 目錄。
連線服務名格式:
SERVERNAME=(IP[:PORT],IP[:PORT],......)
dm_svc.conf 檔案中常用配置專案說明:
 SERVERNAME
連線服務名,使用者通過連線服務名訪問資料庫。
 IP
資料庫所在的 IP 地址,如果是 IPv6 地址,為了區分埠,需要用[]封閉 IP 地址。
 PORT
資料庫使用的 TCP 連線埠,可選配置,不配置則使用連線上指定的埠。
 LOGIN_MODE
指定優先登入的伺服器模式。 0: 優先連線 Primary 模式的庫, Normal 模式次之,
最後選擇 Stantby 模式; 1:只連線主庫; 2:只連線備庫; 3:優先連線 Standby 模式
的庫, Primary 模式次之,最後選擇Normal模式; 4:優先連線Normal模式的庫, Primary
模式次之,最後選擇 Standby 模式。 預設值為 0。
 SWITCH_TIME
檢測到資料庫例項故障時,介面在伺服器之間切換的次數;超過設定次數沒有連線到有
效資料庫時,斷開連線並報錯。有效值範圍 1~9223372036854775807,預設值為 3。
 SWITCH_INTERVAL
表 示 在 服 務 器 之 間 切 換 的 時 間 間 隔 , 單 位 為 毫 秒 , 有 效 值 範 圍
1~9223372036854775807,預設值為 200。
 RW_SEPARATE
指定是否啟用讀寫分離。 0 表示不啟用讀寫分離; 1 表示啟用讀寫分離,預設值為 0。
 RW_PERCENT
啟用讀寫分離時, 讀寫分離的分發比例,有效值範圍 0~100,預設值為 25。
例如,配置一個名為 dw_svc 的連線服務名,使用 dw_svc 連線資料守護中的資料庫,
即可實現故障自動重連。


dw_svc=(192.168.1.193:5236,192.168.1.194:5236)
LOGIN_MODE =(1)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(1000)