一、主備介紹
讀寫分離集群是基于即時歸檔實現(xiàn)的高性能數(shù)據(jù)庫集群累铅,不但提供數(shù)據(jù)保護、容災等數(shù)據(jù)守護基本功能站叼,還具有讀寫操作自動分離娃兽、負載均衡等特性。讀寫分離集群最多可以配置8個即時備庫尽楔,提供數(shù)據(jù)同步投储、備庫故障自動處理、故障恢復自動數(shù)據(jù)同步等功能阔馋,也支持自動故障切換和手動故障切換兩種守護模式玛荞。
一般情況下,應用系統(tǒng)中查詢等只讀操作的比例遠大于Insert/Delete/Update等DML操作呕寝,修改對象定義等DDL操作的比例則更低勋眯。但是,這些操作往往混雜在一起下梢,在高并發(fā)客蹋、高壓力情況下,會導致數(shù)據(jù)庫性能下降孽江,響應時間變長讶坯。借助讀寫分離集群,將只讀操作自動分發(fā)到備庫執(zhí)行岗屏,可以充分利用備庫的硬件資源辆琅,降低主庫的并發(fā)訪問壓力漱办,進而提升數(shù)據(jù)庫的吞吐量。
讀寫分離集群不依賴額外的中間件婉烟,而是通過數(shù)據(jù)庫接口與數(shù)據(jù)庫之間的密切配合娩井,實現(xiàn)讀、寫操作自動分離特性隅很。DM的JDBC撞牢、DPI、DCI叔营、ODBC屋彪、Provider等接口都可以用來部署讀寫分離集群。
根據(jù)是否滿足讀提交事務隔離級特性绒尊,讀寫分離集群可以配置為事務一致模式和高性能兩種模式畜挥。簡單的說,事務一致模式下婴谱,不論一個Select語句是在備庫執(zhí)行蟹但、還是在主庫執(zhí)行,其查詢結(jié)果集都是一樣的谭羔。高性能模式則不能保證查詢是一致的华糖,備庫的數(shù)據(jù)與主庫的數(shù)據(jù)同步存在一定的延遲,當Select語句發(fā)送到備庫執(zhí)行時瘟裸,返回的有可能是主庫上一個時間點的數(shù)據(jù)客叉。
二、數(shù)據(jù)準備
配置讀寫分離集群之前话告,必須先同步實例數(shù)據(jù)兼搏,確保兩者保持完全一致;主庫可以是新初始化的數(shù)據(jù)沙郭,也可以是正在生產(chǎn)佛呻、使用中的數(shù)據(jù)。DM提供了兩種方式初始化同步實例數(shù)據(jù)病线,數(shù)據(jù)文件拷貝以及備份還原方式吓著。
不能使用分別初始化庫的方法,原因如下:
1. 每個庫都有一個永久魔數(shù)(permenant_magic)送挑,主庫傳送日志時會判斷這個值是否一樣夜矗,確保來自同一個庫,不同的庫傳送不了日志
2. 由于dminit初始化數(shù)據(jù)庫時让虐,會生成隨機密鑰用于加密紊撕,每次生成的密鑰都不相同,備庫無法解析采用主庫密鑰加密的數(shù)據(jù)
三赡突、讀寫分離集群搭建
主庫搭建步驟
1.單機數(shù)據(jù)庫的搭建請參照“dm7單機數(shù)據(jù)庫的搭建”
2.關閉兩端防火墻
Service firewalld stop
3.主庫初始化實例
4.配置相關的配置文件
配置dm.ini
實例名对扶,建議使用“組名_守護環(huán)境_序號”的命名方式区赵,總長度不能超過 16
INSTANCE_NAME = GRP1_DM1
PORT_NUM = 5236 #數(shù)據(jù)庫實例監(jiān)聽端口
DW_PORT = 5336 #守護環(huán)境下,監(jiān)聽守護進程連接端口
DW_ERROR_TIME = 60 #接收守護進程消息超時時間
ALTER_MODE_STATUS = 0 #不允許手工方式修改實例模式/狀態(tài)
ENABLE_OFFLINE_TS = 2 #不允許備庫 OFFLINE 表空間
MAL_INI = 1 #打開 MAL 系統(tǒng)
ARCH_INI = 1 #打開歸檔配置
HA_INST_CHECK_FLAG = 1 #檢測是否多個實例進程同時啟動
RLOG_SEND_APPLY_MON = 64 #統(tǒng)計最近 64 次的日志發(fā)送信息
配置 dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 鏈路斷開的時間
[MAL_INST1]
MAL_INST_NAME = GRP1_DM1 #實例名浪南,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.13.142 #MAL 系統(tǒng)監(jiān)聽 TCP 連接的 IP 地址
MAL_PORT = 5237 #MAL 系統(tǒng)監(jiān)聽 TCP 連接的端口
MAL_INST_HOST = 192.168.13.142 #實例的對外服務 IP 地址
MAL_INST_PORT = 5236 #實例的對外服務端口笼才,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5239 #實例對應的守護進程監(jiān)聽 TCP 連接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_DM2
MAL_HOST = 192.168.13.155
MAL_PORT = 5237
MAL_INST_HOST = 192.168.13.155
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
配置 dmarch.ini
當前實例 GRP1_DM1 是主庫,需要向 GRP1_DM2(實時備庫)同步數(shù)據(jù)络凿,因此實時歸檔的 ARCH_DEST 配置為 GRP1_DM2骡送。
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = GRP1_DM2 #實時歸檔目標實例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm7/data/DAMENG/arch #本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb絮记,0 表示無限制摔踱,范圍 1024~4294967294M
配置 dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守護類型
DW_MODE = AUTO #自動切換模式
DW_ERROR_TIME = 10 #遠程守護進程故障認定時間
INST_RECOVER_TIME = 60 #主庫守護進程啟動恢復的間隔時間
INST_ERROR_TIME = 10 #本地實例故障認定時間
INST_OGUID = 453331 #守護系統(tǒng)唯一 OGUID 值
INST_INI = /dm7/data/DAMENG/dm.ini #dm.ini 配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啟動功能
INST_STARTUP_CMD = /dm7/bin/dmserver #命令行方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫發(fā)送日志到備庫的時間閥值,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日志的時間閥值怨愤,默認關閉
5.啟動數(shù)據(jù)庫確認單實例配置是否成功
./dmserverd start 派敷,查看日志是否有SYSTEM IS READY ,有打印改信息證明數(shù)據(jù)庫配置成功
./dmserverd stop撰洗,正常停止單實例
6.配置 dmwatcher.ctl
在配置完成 dmwatcher.ini 后篮愉,使用 dmctlcvt 工具生成 dmwatcher.ctl:./dmctlcvt TYPE=3 SRC=/dm7/data/DAMENG/dmwatcher.ini DEST=/dm7/data拷貝生成的 dmwatcher.ctl(生成的是一個目錄,文件在目錄里面/dm7/data/GRP1/dmwatcher.ctl)文件到數(shù)據(jù)文件目錄/dm7/data/DAMENG差导。
7.拷貝數(shù)據(jù)文件文件夾至備機相同路徑下
8.Mount啟動數(shù)據(jù)庫试躏,配置主庫狀態(tài)
./dmserver /dbdata/dm7/DAMENG/dm.ini mount
./disql sysdba/SYSDBA
SQL> sp_set_oguid(453331);
DMSQL 過程已成功完成
已用時間: 3.152(毫秒). 執(zhí)行號:5.
SQL> alter database primary;
操作已執(zhí)行
已用時間: 3.624(毫秒). 執(zhí)行號:0
備庫搭建步驟
1.解壓主庫拷貝過來的數(shù)據(jù)文件至相同路徑下,并修改相關配置文件
2.修改配置文件设褐,只需修改dm.ini中的INSTANCE_NAME與dmarch.ini中的ARCH_DEST即可颠蕴,修改處已標紅。
配置dm.ini
#實例名络断,建議使用“組名_守護環(huán)境_序號”的命名方式裁替,總長度不能超過 16
INSTANCE_NAME = GRP1_DM2
PORT_NUM = 5236 #數(shù)據(jù)庫實例監(jiān)聽端口
DW_PORT = 5336 #守護環(huán)境下项玛,監(jiān)聽守護進程連接端口
DW_ERROR_TIME = 60 #接收守護進程消息超時時間
ALTER_MODE_STATUS = 0 #不允許手工方式修改實例模式/狀態(tài)
ENABLE_OFFLINE_TS = 2 #不允許備庫 OFFLINE 表空間
MAL_INI = 1 #打開 MAL 系統(tǒng)
ARCH_INI = 1 #打開歸檔配置
HA_INST_CHECK_FLAG = 1 #檢測是否多個實例進程同時啟動
RLOG_SEND_APPLY_MON = 64 #統(tǒng)計最近 64 次的日志發(fā)送信息
Dmmal.ini 配置文件為全局唯一貌笨,兩個節(jié)點用同一個文件,無需修改,配置 dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 鏈路檢測時間間隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 鏈路斷開的時間
[MAL_INST1]
MAL_INST_NAME = GRP1_DM1 #實例名襟沮,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.13.142 #MAL 系統(tǒng)監(jiān)聽 TCP 連接的 IP 地址
MAL_PORT = 5237 #MAL 系統(tǒng)監(jiān)聽 TCP 連接的端口
MAL_INST_HOST = 192.168.13.142 #實例的對外服務 IP 地址
MAL_INST_PORT = 5236 #實例的對外服務端口锥惋,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5239 #實例對應的守護進程監(jiān)聽 TCP 連接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_DM2
MAL_HOST = 192.168.13.155
MAL_PORT = 5237
MAL_INST_HOST = 192.168.13.155
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
配置 dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #實時歸檔類型
ARCH_DEST = GRP1_DM1 #實時歸檔目標實例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地歸檔類型
ARCH_DEST = /dm7/data/DAMENG/arch #本地歸檔文件存放路徑
ARCH_FILE_SIZE = 128 #單位 Mb,本地單個歸檔文件最大值
ARCH_SPACE_LIMIT = 0 #單位 Mb开伏,0 表示無限制膀跌,范圍 1024~4294967294M
Dmwatcher.ini 配置文件為全局唯一,兩個節(jié)點用同一個文件固灵,無需修改,配置 dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守護類型
DW_MODE = AUTO #自動切換模式
DW_ERROR_TIME = 10 #遠程守護進程故障認定時間
INST_RECOVER_TIME = 60 #主庫守護進程啟動恢復的間隔時間
INST_ERROR_TIME = 10 #本地實例故障認定時間
INST_OGUID = 453331 #守護系統(tǒng)唯一 OGUID 值
INST_INI = /dm7/data/DAMENG/dm.ini #dm.ini 配置文件路徑
INST_AUTO_RESTART = 1 #打開實例的自動啟動功能
INST_STARTUP_CMD = /dm7/bin/dmserver #命令行方式啟動
RLOG_SEND_THRESHOLD = 0 #指定主庫發(fā)送日志到備庫的時間閥值捅伤,默認關閉
RLOG_APPLY_THRESHOLD = 0 #指定備庫重演日志的時間閥值,默認關閉
3.Mount 啟動數(shù)據(jù)庫巫玻,配置備庫狀態(tài)
./dmserver /dbdata/dm7/DAMENG/dm.ini mount
./disql sysdba/SYSDBA
SQL> sp_set_oguid(453331);
DMSQL 過程已成功完成
已用時間: 7.799(毫秒). 執(zhí)行號:1.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 過程已成功完成
已用時間: 6.622(毫秒). 執(zhí)行號:2.
SQL> alter database standby;
操作已執(zhí)行
已用時間: 3.450(毫秒). 執(zhí)行號:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 過程已成功完成
已用時間: 6.664(毫秒). 執(zhí)行號:3.
4.監(jiān)視器配置文件
修改 dmmonitor.ini 配置確認監(jiān)視器丛忆,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置項保持一致祠汇。
MON_DW_CONFIRM = 1 #確認監(jiān)視器模式
MON_LOG_PATH = /dmarch/log #監(jiān)視器日志文件存放路徑
MON_LOG_INTERVAL = 60 #每隔 60s 定時記錄系統(tǒng)信息到日志文件
MON_LOG_FILE_SIZE = 32 #每個日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件總占用空間
[GRP1]
MON_INST_OGUID = 453331 #組 GRP1 的唯一 OGUID 值
#以下配置為監(jiān)視器到組 GRP1 的守護進程的連接信息,以“IP:PORT”的形式配置
#IP 對應 dmmal.ini 中的 MAL_HOST熄诡,PORT 對應 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.0.141:5239
MON_DW_IP = 192.168.0.142:5239
5.兩節(jié)點啟動dmwatcher
./dmwatcherd start
6.啟動監(jiān)視器進程(該進程只起觀察作用可很,對主備運行無影響)
./dmmonitor /dbdata/dmdata/DAMENG/dmmonitor.ini
敲入show并回車,查看集群狀態(tài)
WSTATUS->OPEN INST_OK->OK INSTATUS->OPEN 兩節(jié)點LSN號(FLSN凰浮、CLSN我抠、SSLSN、SLSN)在同一數(shù)據(jù)級 即為正常狀態(tài)
四袜茧、修改dm_svc.conf 配置文件中參數(shù)
參數(shù) | 修改值 | 解釋 |
---|---|---|
RW_SEPARATE | 1 | 是否啟用讀寫分離菜拓。0:不啟用;1:啟用 |
RW_PERCENT | 25 | 讀寫分離分發(fā)比例惫周,有效值范圍0~100 |
五尘惧、驗證
1.主庫創(chuàng)建表并插入數(shù)據(jù),查看備庫是否可以接收到
主庫創(chuàng)建表
插入數(shù)據(jù)递递,并提交
查看備機是否有此表存在
以上為搭建兩節(jié)點讀寫分離集群的全部操作步驟O_O