DM數據守護集群搭建-讀寫分離
讀寫分離集群由一個主庫以及一個或者多個配置了即時(Timely)歸檔或實時(Realtime)歸檔的備庫組成,其主要目標是在保障數據庫可用性基礎上,實現讀、寫操作的自動分離,進一步提升數據庫的業務支撐能力。讀寫分離集群通過配置事務一致模式保證主、備庫數據一致性,并配合達夢數據庫管理系統的各種接口(JDBC、DPI等),將只讀操作自動分流到備庫,有效降低主庫的負載,提升系統吞吐量。
一、環境規劃
配置項 | A機器(主節點) | B機器(從節點) | C機器(從節點) |
---|---|---|---|
心跳IP | 192.168.148.128 | 192.168.148.130 | 192.168.148.133 |
實例名 | DM_01 | DM_02 | DM_03 |
實例端口 | 5236 | 5236 | 5236 |
MAL端口 | 5336 | 5336 | 5336 |
MAL守護進程端口 | 5436 | 5436 | 5436 |
守護進程端口 | 5536 | 5536 | 5536 |
OGUID | 45331 | 45331 | 45331 |
守護組 | GRP1 | GRP1 | GRP1 |
安裝目錄 | /home/dmdba/dmdbms | /home/dmdba/dmdbms | /home/dmdba/dmdbms |
實例歸檔 | /home/dmdba/dmdbms/data | /home/dmdba/dmdbms/data | /home/dmdba/dmdbms/data |
歸檔上限 | 51200 | 51200 | 51200 |
二、環境搭建
初始化主庫實例DM_01
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=DM INSTANCE_NAME=DM_01 PORT_NUM=5236 BUFFER=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123
初始化從庫實例DM_02
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=DM INSTANCE_NAME=DM_02 PORT_NUM=5236 BUFFER=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123
初始化從庫實例DM_03
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=DM INSTANCE_NAME=DM_03 PORT_NUM=5236 BUFFER=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123
主節點注冊服務
su root
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/DM/dm.ini -p DMSERVER
創建成功后啟動服務
systemctl start DmServiceDMSERVER.service
注意:三臺機器關閉防火墻
systemctl stop firewalld
systemctl disable firewalld
1、配置DM_01主庫
修改dm.ini
#configuration fileMAL_INI = 1 #dmmal.iniARCH_INI = 1 #dmarch.ini
#data watchALTER_MODE_STATUS = 0ENABLE_OFFLINE_TS = 2
創建dmarch.ini
vim /home/dmdba/dmdbms/data/DM/dmarch.ini
#DaMeng Database Archive Configuration file
#0:高性能,1:事務一致
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
#本地歸檔類型
ARCH_TYPE = LOCAL
#本地歸檔存放路徑
ARCH_DEST = /home/dmdba/dmdbms/data/DM/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_TIMELY1]
#實時歸檔類型
ARCH_TYPE = TIMELY
#實時歸檔目標實例名
ARCH_DEST = DM_02
[ARCHIVE_TIMELY2]
#實時歸檔類型
ARCH_TYPE = TIMELY
#實時歸檔目標實例名
ARCH_DEST = DM_03
創建dmmal.ini
vim /home/dmdba/dmdbms/data/DM/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 鏈路斷開的時間
MAL_TEMP_PATH = /home/dmdba/dmdbms/data/malpath/ #臨時文件目錄
MAL_BUF_SIZE = 512 #單個 MAL 緩存大小,單位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 總大小限制,單位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息壓縮等級,0 表示不壓縮[MAL_INST1]
MAL_INST_NAME = DM_01 #實例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.148.128 #MAL 系統監聽 TCP 連接的 IP 地址
MAL_PORT = 5336 #MAL 系統監聽 TCP 連接的端口
MAL_INST_HOST = 192.168.148.128 #實例的對外服務 IP 地址
MAL_INST_PORT = 5236 #實例對外服務端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #實例對應的守護進程監聽 TCP 連接的端口
MAL_INST_DW_PORT = 5536 #實例監聽守護進程 TCP 連接的端口[MAL_INST2]
MAL_INST_NAME = DM_02
MAL_HOST = 192.168.148.130
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536[MAL_INST3]
MAL_INST_NAME = DM_03
MAL_HOST = 192.168.148.133
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.133
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
創建dmwatcher.ini
vim /home/dmdba/dmdbms/data/DM/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守護類型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #遠程守護進程故障認定時間
INST_ERROR_TIME = 20 #本地實例故障認定時間
INST_RECOVER_TIME = 60 #主庫守護進程啟動恢復的間隔時間
INST_OGUID = 45331 #守護系統唯一 OGUID 值
INST_INI = /home/dmdba/dmdbms/data/DM/dm.ini #dm.ini 文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啟動功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫發送日志到備庫的時間閾值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日志的時間閾值,默認關閉
2、配置DM_02從庫參數
修改 dm.ini
#configuration file
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
#data watch
ALTER_MODE_STATUS = 0 #Whether to permit database user to alter database mode
ENABLE_OFFLINE_TS = 2 #Whether tablespace can be offline
創建dmarch.ini
vi /home/dmdba/dmdbms/data/DM/dmarch.ini
#DaMeng Database Archive Configuration file
#0:高性能,1:事務一致
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
#本地歸檔類型ARCH_TYPE = LOCAL
#本地歸檔存放路徑 ARCH_DEST = /home/dmdba/dmdbms/data/DM/arch ARCH_FILE_SIZE = 1024ARCH_SPACE_LIMIT = 51200
[ARCHIVE_TIMELY1]
#實時歸檔類型ARCH_TYPE = TIMELY
#實時歸檔目標實例名ARCH_DEST = DM_01
[ARCHIVE_TIMELY2]
#實時歸檔類型ARCH_TYPE = TIMELY
#實時歸檔目標實例名ARCH_DEST = DM_03
創建dmmal.ini
vi /home/dmdba/dmdbms/data/DM/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 鏈路斷開的時間
MAL_TEMP_PATH = /home/dmdba/dmdbms/data/malpath/ #臨時文件目錄
MAL_BUF_SIZE = 512 #單個 MAL 緩存大小,單位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 總大小限制,單位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息壓縮等級,0 表示不壓縮[MAL_INST1]
MAL_INST_NAME = DM_01 #實例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.148.128 #MAL 系統監聽 TCP 連接的 IP 地址
MAL_PORT = 5336 #MAL 系統監聽 TCP 連接的端口
MAL_INST_HOST = 192.168.148.128 #實例的對外服務 IP 地址
MAL_INST_PORT = 5236 #實例對外服務端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #實例對應的守護進程監聽 TCP 連接的端口
MAL_INST_DW_PORT = 5536 #實例監聽守護進程 TCP 連接的端口[MAL_INST2]
MAL_INST_NAME = DM_02
MAL_HOST = 192.168.148.130
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536[MAL_INST3]
MAL_INST_NAME = DM_03
MAL_HOST = 192.168.148.133
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.133
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
創建 dmwatcher.ini
vi /home/dmdba/dmdbms/data/DM/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守護類型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #遠程守護進程故障認定時間
INST_ERROR_TIME = 20 #本地實例故障認定時間
INST_RECOVER_TIME = 60 #主庫守護進程啟動恢復的間隔時間
INST_OGUID = 45331 #守護系統唯一 OGUID 值
INST_INI = /home/dmdba/dmdbms/data/DM/dm.ini #dm.ini 文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啟動功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫發送日志到備庫的時間閾值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日志的時間閾值,默認關閉
3、配置DM_03從庫參數
修改 dm.ini
#configuration file
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
#data watch
ALTER_MODE_STATUS = 0 #Whether to permit database user to alter database mode
ENABLE_OFFLINE_TS = 2 #Whether tablespace can be offline
創建dmarch.ini
vi /home/dmdba/dmdbms/data/DM/dmarch.ini
#DaMeng Database Archive Configuration file
#0:高性能,1:事務一致
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
#本地歸檔類型
ARCH_TYPE = LOCAL
#本地歸檔存放路徑
ARCH_DEST = /home/dmdba/dmdbms/data/DM/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_TIMELY1]
#實時歸檔類型
ARCH_TYPE = TIMELY
#實時歸檔目標實例名
ARCH_DEST = DM_01
[ARCHIVE_TIMELY2]
#實時歸檔類型
ARCH_TYPE = TIMELY
#實時歸檔目標實例名
ARCH_DEST = DM_02
創建dmmal.ini
vi /home/dmdba/dmdbms/data/DM/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 鏈路斷開的時間
MAL_TEMP_PATH = /home/dmdba/dmdbms/data/malpath/ #臨時文件目錄
MAL_BUF_SIZE = 512 #單個 MAL 緩存大小,單位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 總大小限制,單位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息壓縮等級,0 表示不壓縮[MAL_INST1]
MAL_INST_NAME = DM_01 #實例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.148.128 #MAL 系統監聽 TCP 連接的 IP 地址
MAL_PORT = 5336 #MAL 系統監聽 TCP 連接的端口
MAL_INST_HOST = 192.168.148.128 #實例的對外服務 IP 地址
MAL_INST_PORT = 5236 #實例對外服務端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #實例對應的守護進程監聽 TCP 連接的端口
MAL_INST_DW_PORT = 5536 #實例監聽守護進程 TCP 連接的端口[MAL_INST2]
MAL_INST_NAME = DM_02
MAL_HOST = 192.168.148.130
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536[MAL_INST3]
MAL_INST_NAME = DM_03
MAL_HOST = 192.168.148.133
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.133
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
創建 dmwatcher.ini
vi /home/dmdba/dmdbms/data/DM/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守護類型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #遠程守護進程故障認定時間
INST_ERROR_TIME = 20 #本地實例故障認定時間
INST_RECOVER_TIME = 60 #主庫守護進程啟動恢復的間隔時間
INST_OGUID = 45331 #守護系統唯一 OGUID 值
INST_INI = /home/dmdba/dmdbms/data/DM/dm.ini #dm.ini 文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啟動功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫發送日志到備庫的時間閾值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日志的時間閾值,默認關閉
4、主節點備份,從節點恢復
主節點停止服務
systemctl stop DmServiceDMSERVER.service
主從庫均啟動AP服務
cd /home/dmdba/dmdbms/bin/service_template/
./DmAPService start
備份主節點
cd /home/dmdba/dmdbms/bin
./dmrman
backup database '/home/dmdba/dmdbms/data/DM/dm.ini' backupset '/home/dmdba/dmdbms/data/DM/bak/dmbackup';
備份文件拷貝到從庫
scp -r /home/dmdba/dmdbms/data/DM/bak/dmbackup root@192.168.148.130:/home/dmdba/dmdbms/data/DM/bak
scp -r /home/dmdba/dmdbms/data/DM/bak/dmbackup root@192.168.148.133:/home/dmdba/dmdbms/data/DM/bak
恢復從節點(兩節點均要執行)
su dmdba
cd /home/dmdba/dmdbms/bin
./dmrman
restore database '/home/dmdba/dmdbms/data/DM/dm.ini' from backupset '/home/dmdba/dmdbms/data/DM/bak/dmbackup';
recover database '/home/dmdba/dmdbms/data/DM/dm.ini' from backupset '/home/dmdba/dmdbms/data/DM/bak/dmbackup';
recover database '/home/dmdba/dmdbms/data/DM/dm.ini' update db_magic;
注冊服務
#主節點DM_01執行
su root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM_01 -dm_ini /home/dmdba/dmdbms/data/DM/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DM/dmwatcher.ini
#從庫DM_02執行
su root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM_02 -dm_ini /home/dmdba/dmdbms/data/DM/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DM/dmwatcher.ini
#從庫DM_03執行
su root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM_03 -dm_ini /home/dmdba/dmdbms/data/DM/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DM/dmwatcher.ini
5、啟動主節點和從節點服務并修改參數
主庫執行
/home/dmdba/dmdbms/bin/DmServiceDM_01 start
/home/dmdba/dmdbms/bin/disql SYSDBA/DaMeng123:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
從節點DM_02執行
/home/dmdba/dmdbms/bin/DmServiceDM_02 start
/home/dmdba/dmdbms/bin/disql SYSDBA/Dameng:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
從節點DM_03執行
/home/dmdba/dmdbms/bin/DmServiceDM_03 start
/home/dmdba/dmdbms/bin/disql SYSDBA/Dameng:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
啟動守護進程(三臺機器均需要啟動)
/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
配置監視器
可以使用備節點創建監視器,生產環境還是需要獨立部署監視器。
創建監視器配置文件
vi /home/dmdba/dmdbms/data/DM/dmmonitor.ini
MON_DW_CONFIRM = 1 #確認監視器模式(0非確認監視器)
MON_LOG_PATH = ../log #監視器日志文件存放路徑
MON_LOG_INTERVAL = 60 #每隔60秒定時記錄系統信息到日志文件
MON_LOG_FILE_SIZE = 512 #日志文件最大512M
MON_LOG_SPACE_LIMIT = 2048 #不限定日志文件總占用空間
[GRP1]
MON_INST_OGUID = 45331 #組GRP1的唯一OGUID值
MON_DW_IP = 192.168.148.128:5436 #集群內部節點1
MON_DW_IP = 192.168.148.130:5436 #集群內部節點2
MON_DW_IP = 192.168.148.133:5436 #集群內部節點3
創建dmmonitor_manual.ini
vi /home/dmdba/dmdbms/data/DM/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #確認監視器模式(0非確認監視器)
MON_LOG_PATH = ../log #監視器日志文件存放路徑
MON_LOG_INTERVAL = 60 #每隔60秒定時記錄系統信息到日志文件
MON_LOG_FILE_SIZE = 512 #日志文件最大512M
MON_LOG_SPACE_LIMIT = 2048 #不限定日志文件總占用空間
[GRP1]
MON_INST_OGUID = 45331 #組GRP1的唯一OGUID值
MON_DW_IP = 192.168.148.128:5436 #集群內部節點1
MON_DW_IP = 192.168.148.130:5436 #集群內部節點2
MON_DW_IP = 192.168.148.133:5436 #集群內部節點3
注冊監視器服務
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/data/DM/dmmonitor.ini
啟動監視器
#后臺啟動
/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start#手動啟動
cd /home/dmdba/dmdbms/bin
./dmmonitor /home/dmdba/dmdbms/data/DM/dmmonitor_manual.ini
三、環境驗證及讀寫分離配置
啟動監視器驗證
cd /home/dmdba/dmdbms/bin
./dmmonitor /home/dmdba/dmdbms/data/DM_02/dmmonitor_manual.ini
#使用show global info
show global info
讀寫分離配置
#修改dm_svc.conf(文件具體位置可使用 find / -name dm_svc.conf進行查找)
vi /home/dmdba/dmdbms/bin/dm_svc.conf
#文件修改為
TIME_ZONE=(480)
LANGUAGE=(cn)
DMRW=(192.168.220.130:5236,192.168.220.131:5236,192.168.220.132:5236)
[DMRW]
#優先登錄的服務器模式
LOGIN_MODE=(1)
#表示是否啟用讀寫分離。0:不啟用;1:啟用;
RW_SEPARATE=(1)
#表示讀寫分離分發比例,有效值范圍 0~100,主庫占所有事物數的比例。可以根據主備庫的實際壓力來設定。
RW_PERCENT=(30)
#未找到符合條件的庫成功建立連接,將嘗試遍歷服務名中庫列表的次數
SWITCH_TIMES=(60)
#服務器之間切換的時間間隔,單位為毫秒
SWITCH_INTERVAL=(1000)