達夢數據庫讀寫分離集群搭建


實現原理

實現讀寫分離集群的基本思路是:利用備庫提供只讀服務、無法修改數據的特性,優先將所有操作發送到備庫執行,一旦備庫執行報錯,則發送到主庫重新執行。通過備庫“試錯”這么一個步驟,自然地將只讀操作分流到備庫執行。並且,備庫“試錯”由接口層自動完成,對應用透明。讀寫分離集群不依賴額外的中間件,而是通過數據庫接口與數據庫之間的密切配合,實 現讀、寫操作自動分離特性。DM 的 JDBC、DPI、DCI、ODBC、Provider 等接口都可以用來部署讀寫分離集群。

環境准備

服務器 主庫IP:192.168.10.11   dm8數據庫 實例名 :RAC1 端口號:5236

服務器 備庫IP:192.168.10.12   dm8數據庫 實例名 :RAC2 端口號:5236

服務器 備庫IP:192.168.10.13  dm8數據庫 實例名 :RAC3 端口號:5236

數據庫啟動服務命令路徑/dm8/bin,實例配置文件路徑/dm8/data/DAMENG/

主備庫分別初始化實例

./dminit path=/dm8/data page_size=16 instance_name=RAC1

./dminit path=/dm8/data page_size=16 instance_name=RAC2

./dminit path=/dm8/data page_size=16 instance_name=RAC3

主庫備份

主庫創建實例之后,啟動數據庫並登錄

./dmserver /dm8/data/DAMENG/dm.ini

關閉數據庫,以dmrman備份數據庫

BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' BACKUPSET '/dm8/data/backup';

將備份文件復制到備庫對應目錄下

scp -r /dm8/data/backup root@192.168.10.11:/dm8/data/backup

scp -r /dm8/data/backup root@192.168.10.12:/dm8/data/backup

備庫啟動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;

配置 dm.ini    #主備庫實例都需更改下面參數

ALTER_MODE_STATUS = 0 #不允許手工方式修改實例模式/狀態/OGUID
ENABLE_OFFLINE_TS = 2 #不允許備庫 OFFLINE 表空間
MAL_INI = 1 #打開 MAL 系統
ARCH_INI = 1 #打開歸檔配置

配置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.10.11 #MAL 系統監聽 TCP 連接的 IP 地址

  MAL_PORT          = 61141    #MAL 系統監聽 TCP 連接的端口

  MAL_INST_HOST     = 192.168.10.11 #實例的對外服務 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.10.12

  MAL_PORT               = 61141

  MAL_INST_HOST          = 192.168.10.12

  MAL_INST_PORT          = 5236

  MAL_DW_PORT            = 52141

  MAL_INST_DW_PORT       = 33141

 [MAL_INST3]

  MAL_INST_NAME          = RAC3

  MAL_HOST               = 192.168.10.13

  MAL_PORT               = 61141

  MAL_INST_HOST          = 192.168.10.13

  MAL_INST_PORT          = 5236

  MAL_DW_PORT            = 52141

  MAL_INST_DW_PORT       = 33141

配置dmarch.ini#主備庫歸檔目標實例名不一致,其他一致

實時歸檔(REALTIME)的讀寫分離的事務一致模式僅在數據守護配置為自動切換模式下才會生效

[ARCHIVE_TIMELY1 ]

ARCH_TYPE        =  TIMELY#即時歸檔類型

ARCH_DEST        = RAC2 #即時歸檔目標實例名

[ARCHIVE_TIMELY2] 

ARCH_TYPE        = TIMELY #即時歸檔類型

ARCH_DEST        = RAC3 #即時歸檔目標實例名

[ARCHIVE_LOCAL1]

ARCH_TYPE        = LOCAL #本地歸檔類型

ARCH_DEST        = /dm8/data/DAMENG/arch #本地歸檔文件存放路徑

ARCH_FILE_SIZE   = 128 #單位 Mb,本地單個歸檔文件最大值

ARCH_SPACE_LIMIT = 500000 #單位 Mb,0 表示無限制,范圍 1024~4294967294M

ARCH_WAIT_APPLY = 1  # 事務一致性

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 #指定備庫重演日志的時間閥值,默認關閉

dmmonitor.ini #生產環境需單獨一台服務器配置。

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    = 453332 #組 GRP1 的唯一 OGUID 值

#配置為監視器到組 GRP1 的守護進程的連接信息,以―IP:PORT‖的形式配置

#IP 對應 dmmal.ini 中的 MAL_HOST,PORT 對應 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP     = 192.168.10.11:52141

MON_DW_IP     = 192.168.10.12:52141

MON_DW_IP     = 192.168.10.13:52141

以 Mount 方式啟動主備庫
./dmserver /dm8/data/DAMENG/dm.ini mount
啟動命令行工具 DIsql,登錄主庫設置 OGUID 值。
sp_set_oguid(453332);
alter database primary;
啟動命令行工具 DIsql,登錄備庫設置 OGUID 值。
sp_set_oguid(453332);
alter database standby;
啟動各個主備庫上的守護進程
./dmwatcher /dm8/data/DAMENG/dmwatcher.ini
啟動監視器
./dmmonitor /dm8/data/DAMENG/dmmonitor.ini

接口說明

DM 多種客戶端接口都支持讀寫分離集群連接設置,詳細可參考《DM8 程序員手冊》。

讀寫分離集群(DMRWC)服務名配置:
TIME_ZONE=(480)
LANGUAGE=(en)
DM_RWW=(192.168.0.151:5236,192.168.0.152:5236,192.168.0.153:5236)
RW_SEPARATE=(1)
RW_PERCENT=(30)
LOGIN_PRIMARY=(1)
SWITCH_TIME=6000
SWITCH_INTERVAL=500
2.2 配置URL字符串:
<URL>jdbc:dm://DM_RWW?rwSeparate=1&rwPercent=30</URL>
2.3 說明
RW_SEPARATE:取值0和1,默認0,表示不使用讀寫分離方式
RW_PERCENT:取值0~100,默認值25。表示分發總事務的百分之多少到主機上執行。
LOGIN_PRIMARY表示是否僅登錄到主機,支持的選項為1(只連接主機)和0(主機不存在的情況下可連接備機)。可以不指定,若不指定,默認值為1

碰到問題

剛開始啟動監視器出現如下情況,查看守護日志和實例日志都沒有發現問題,最后原因是主備沒有做備份還原操作導致,重新做下備份還原,啟動ok

 

腦裂是同一個守護進程組中同時出現兩個或者多個活動主庫,並且這些主庫都接收用戶請求,提供完整數據庫服務。一旦發生腦裂,將無法保證數據一致性,對數據安全造成嚴重
后果。造成腦裂的主要原因有兩個:網絡不穩定或錯誤的人工干預。為了避免出現腦裂,
1. 設置 dm.ini 參數 ALTER_MODE_STATUS=0,限制用戶進行直接通過 SQL 修改數據庫模式、狀態以及 OGUID。
2. 提供穩定、可靠的網絡環境。
3. 配置自動切換數據守護時,將確認監視器部署在獨立的第三方機器上,不要與某一個數據庫實例部署在一起,避免由於網絡問題觸發自動故障切換,導致腦裂發生。
4. 通過人工干預,將備庫切換為主庫之前,一定要確認主庫已經發生故障,避免主庫活動情況下,備庫強制接管,人為造成腦裂。

                 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM