達夢資料庫DM8主備叢集測試記錄
一、安裝計劃
系統環境:CentOS_7 + Docker
資料庫版本:dm8_docker :v01
Docker 映象dm8a為primary節點,例項名CRM1
Docker 映象dm8b為standby節點,例項名CRM2
Docker 映象dm8m為monitor節點
目錄劃分
|
Linux 系統目錄 |
對映Docker內路徑 |
說明 |
1 |
/dm/data_1 |
dm8a :/dm8/data |
資料庫檔案目錄 |
2 |
/dm/archlog_1 |
dm8a :/dm8/archlog |
歸檔目錄 |
3 |
/dm/data_2 |
dm8b :/dm8/ data |
資料庫檔案目錄 |
4 |
/dm/archlog_2 |
dm8b :/dm8/archlog |
歸檔目錄 |
5 |
/dm/backup |
dm8a :/dm8/ backup dm8b :/dm8/ backup |
資料庫備份目錄(共用) |
6 |
/dm/ini |
dm8a :/dm8/ ini dm8b :/dm8/ ini |
指令碼和ini配置檔案目錄(共用) |
/dm/ini 目錄下包含以下檔案:
|
|
|
|
1 |
CRM_1_dm.ini |
主庫初始化dm.ini |
|
2 |
CRM_1_dmarch.ini |
主庫arch.ini |
|
3 |
CRM_2_dm.ini |
備庫初始化dm.ini |
|
4 |
CRM_2_dmarch.ini |
備庫arch.ini |
|
5 |
dmmal.ini |
MAL.INI 配置(共用) |
|
6 |
dmmonitor.ini |
Monitor 配置(共用) |
|
7 |
dmwatcher_1.ini |
主庫守護配置檔案 |
|
8 |
dmwatcher_2.ini |
備庫守護配置檔案 |
|
9 |
init_crm1.sh |
主庫初始化指令碼 |
|
10 |
init_crm2.sh |
備庫初始化指令碼 |
|
二、啟動Docker映象
# 建立dockers network網段 docker network ls docker network create --subnet=172.18.0.0/16 mynetwork
docker run -it -p 5236:5236 --name dm8a --hostname crm_1 --net mynetwork --ip 172.18.0.10 -v /dm/ini:/dm8/ini -v /dm/data_1:/dm8/data -v /dm/archlog_1:/dm8/archlog -v /dm/backup:/dm8/backup -d dm8:v01 /bin/bash
docker run -it -p 5237:5236 --name dm8b --hostname crm_2 --net mynetwork --ip 172.18.0.20 -v /dm/ini:/dm8/ini -v /dm/data_2:/dm8/data -v /dm/archlog_2:/dm8/archlog -v /dm/backup:/dm8/backup -d dm8:v01 /bin/bash
docker run -it --name dm8m --hostname crm_m --net mynetwork --ip 172.18.0.30 -v /dm/ini:/dm8/ini -d dm8:v01 /bin/bash
|
三、初始化資料庫
在dm8a映象當中執行init_crm1.sh指令碼
##init_crm1.sh 樣例 #!/bin/bash
# 映象內更改目錄所屬許可權 chown dmdba:dinstall -R /dm8/data /dm8/archlog /dm8/backup
# 以下登入dmdba使用者,初始化資料庫 su - dmdba<<EOF cd /dm8/bin ./dminit CONTROL=/dm8/ini/CRM_1_dm.ini
# 將寫好的ini配置檔案拷貝至資料庫路徑下 cp -if /dm8/ini/CRM_1_dmarch.ini /dm8/data/crm1/dmarch.ini cp -if /dm8/ini/dmmal.ini /dm8/data/crm1/dmmal.ini cp -if /dm8/ini/dmwatcher_1.ini /dm8/data/crm1/dmwatcher.ini chown dmdba:dinstall /dm8/data/crm1/*.ini
# 修改dm.ini配置檔案主備叢集相關引數項 find /dm8/data/crm1/ -type f -name "dm.ini" | xargs sed -i 's/MAL_INI = 0/MAL_INI = 1/g' find /dm8/data/crm1/ -type f -name "dm.ini" | xargs sed -i 's/ALTER_MODE_STATUS = 1/ALTER_MODE_STATUS = 0/g' find /dm8/data/crm1/ -type f -name "dm.ini" | xargs sed -i 's/ENABLE_OFFLINE_TS = 1/ENABLE_OFFLINE_TS = 2/g' EOF
# 以下在root使用者下注冊資料庫服務,生成服務檔案 cd /dm8/script/root ./dm_service_installer.sh -t dmwatcher -p CRM1 -watcher_ini /dm8/data/crm1/dmwatcher.ini ./dm_service_installer.sh -t dmserver -p CRM1 -dm_ini /dm8/data/crm1/dm.ini # 首次啟動,即初始化啟動 /dm8/bin/DmServiceCRM1 start /dm8/bin/DmAPService start /dm8/bin/DmServiceCRM1 stop
# 切換dmdba使用者,主庫進行全量備份,備份集儲存至/dm8/backup/目錄(共享) su - dmdba<<EOF /dm8/bin/dmrman CTLSTMT="backup database '/dm8/data/crm1/dm.ini' backupset '/dm8/backup/';" EOF
# 使用dmserver命令將資料庫啟動到mount狀態,目的是修改oguid引數和設定primary nohup /dm8/bin/dmserver /dm8/data/crm1/dm.ini mount > /tmp/dm.out 2>&1 & for((i=1;i<=10;i++));do #for 迴圈判斷資料庫是否啟動完畢 text=`cat /tmp/dm.out|grep "SYSTEM IS READY"` if [ -n "$text" ] ; then break fi sleep 1 done su - dmdba<<EOF /dm8/bin/disql SYSDBA/SYSDBA -e "sp_set_oguid(453331);" /dm8/bin/disql SYSDBA/SYSDBA -e "alter database primary;" EOF # 設定完成後kill掉資料庫程式 ps -ef|grep dmserver|grep -v grep |awk '{print $2}'|xargs kill -9 #rm -rf /tmp/dm.out sleep 3
# 主庫完成初始化,啟動全部資料庫服務 source /startDm.sh exit |
在dm8b映象當中執行init_crm2.sh指令碼。
##init_crm2.sh 樣例 #!/bin/bash
chown dmdba:dinstall -R /dm8/data /dm8/archlog /dm8/backup
su - dmdba<<EOF cd /dm8/bin ./dminit CONTROL=/dm8/ini/CRM_2_dm.ini cp -if /dm8/ini/CRM_2_dmarch.ini /dm8/data/crm2/dmarch.ini cp -if /dm8/ini/dmmal.ini /dm8/data/crm2/dmmal.ini cp -if /dm8/ini/dmwatcher_2.ini /dm8/data/crm2/dmwatcher.ini chown dmdba:dinstall /dm8/data/crm2/*.ini find /dm8/data/crm2/ -type f -name "dm.ini" | xargs sed -i 's/MAL_INI = 0/MAL_INI = 1/g' find /dm8/data/crm2/ -type f -name "dm.ini" | xargs sed -i 's/ALTER_MODE_STATUS = 1/ALTER_MODE_STATUS = 0/g' find /dm8/data/crm2/ -type f -name "dm.ini" | xargs sed -i 's/ENABLE_OFFLINE_TS = 1/ENABLE_OFFLINE_TS = 2/g' EOF
cd /dm8/script/root ./dm_service_installer.sh -t dmwatcher -p CRM2 -watcher_ini /dm8/data/crm2/dmwatcher.ini ./dm_service_installer.sh -t dmserver -p CRM2 -dm_ini /dm8/data/crm2/dm.ini
/dm8/bin/DmServiceCRM2 start /dm8/bin/DmAPService start /dm8/bin/DmServiceCRM2 stop
# 以下使用主庫備份集進行還原資料庫操作 su - dmdba<<EOF /dm8/bin/dmrman CTLSTMT="restore database '/dm8/data/crm2/dm.ini' from backupset '/dm8/backup/';" /dm8/bin/dmrman CTLSTMT="recover database '/dm8/data/crm2/dm.ini' update DB_MAGIC;" EOF
nohup /dm8/bin/dmserver /dm8/data/crm2/dm.ini mount > /tmp/dm.out 2>&1 & for((i=1;i<=10;i++));do text=`cat /tmp/dm.out|grep "SYSTEM IS READY"` if [ -n "$text" ] ; then break fi sleep 1 done
su - dmdba<<EOF /dm8/bin/disql SYSDBA/SYSDBA -e "sp_set_oguid(453331);" /dm8/bin/disql SYSDBA/SYSDBA -e "alter database standby;" EOF
ps -ef|grep dmserver|grep -v grep |awk '{print $2}'|xargs kill -9 #rm -rf /tmp/dm.out sleep 3 source /startDm.sh exit |
四、啟動監視器
在dm8m映象當中啟動監視器,觀察系統狀態。
./dmmonitor /dm8/ini/dmmonitor.ini
五、測試主備叢集功能
## 測試用例 create tablespace CRM_DATA datafile 'crm_data_01.dbf' size 1024 autoextend on next 64; create tablespace CRM_INDEX datafile 'crm_index_01.dbf' size 512 autoextend on next 64;
create user crm identified by "*" default TABLESPACE "CRM_DATA" default INDEX TABLESPACE "CRM_INDEX"; grant PUBLIC to crm; grant RESOURCE to crm;
create table tab_01 (c1 int, c2 char(10), c3 varchar, c4 numeric(5,2), c5 smallint, c6 bigint, c7 byte,c8 binary,c9 float, c10 double, c11 real,c12 bit,c13 date,c14 time, c15 timestamp, c16 interval year to month, c17 time with time zone, c18 text,c19 image ,c20 blob, c21 clob);
insert into tab_01 values (1, 'abcd', 'testdatatype', '-123.45', '-32768', '-92233720', 123, '1', 5, 7.8, 9.1, null, '2012-12-24', '21:59:59', '2012-12-21 07:59:59', '15-08', '19:59:59 +02:03', 'test text data type','0x123456789','0x987654321','test clob data type');
|
1 、模擬備庫當機,檢視叢集狀態
# 正常關閉CRM2庫或直接停止dm8b映象
# 備庫當機後,主庫狀態為:OPEN-->STARTUP-->MON CONFIRM-->FAILOVER--> OPEN
# 備庫當機期間主庫刪除資料,然後正常啟動備庫
# 備庫啟動後,監視器顯示叢集狀態: CRM2 狀態:NONE-->STARTUP-->OPEN CRM1 狀態:OPEN-->RECOVERY-->OPEN
# 最後確認主備資料一致,符合預期
|
2 、模擬主庫當機,檢視叢集狀態
# 關閉CRM1例項所在的docker映象,模擬主庫當機場景,觀察監視器
#show 命令檢視節點狀態
# 在CRM2庫升級為主庫後,刪除測試資料
# 正常啟動CRM1庫,檢視監視器中叢集狀態變化
# 最後確認資料一致,符合預期
|
3 、模擬CRM2節點故障不可恢復,重新加入叢集
# 關閉dm8b映象,清空資料檔案。CRM1節點狀態正常,完成聯機備份
BACKUP DATABASE FULL BACKUPSET '/dm8/backup/' device type disk backupinfo ' 聯機備份';
# 確保備份集正常,在重新開啟的dm8b映象當中重新執行初始化指令碼
#CRM2 節點加入主備叢集成功
#CRM2 節點追平CRM1節點日誌
# 測試資料一致,符合預期。
|
【監視器常用命令】
show [group_name] 顯示指定組的例項資訊,如果未指定組名,則顯示所有組資訊
list [[group_name.]db_name] 列出指定組的庫對應的守護程式配置資訊,如果都未指定,則列出所有守護程式配置資訊
show open info [group_name.]db_name 顯示指定庫的Open歷史資訊
show apply stat [group_name.]db_name 檢視指定組的指定庫的日誌重演資訊
tip
choose switchover [group_name] 選擇可切換為Primary庫的備庫列表
switchover [group_name[.]] [db_name] 切換指定組的指定庫為Primary庫
choose takeover [group_name] 選擇可接管故障Primary庫的備庫列表
choose takeover force [group_name] 選擇可強制接管故障Primary庫的備庫列表
takeover [group_name[.]] [db_name] 使用指定組的指定庫接管故障Primary庫
takeover force [group_name[.]] [db_name] 使用指定組的指定庫強制接管故障Primary庫
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015510/viewspace-2885685/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢資料庫DM8共享叢集測試記錄資料庫
- 達夢資料庫主備實時叢集搭建和維護資料庫
- 【達夢】Docker安裝達夢資料庫 dm8Docker資料庫
- 達夢資料庫之初步測試資料庫
- 達夢資料庫(DM8)大規模並行叢集MPP 2節點安裝部署資料庫並行
- 達夢資料庫單例項轉實時同步叢集資料庫單例
- 達夢資料庫DM8中WITH子句的簡單用法資料庫
- 達夢資料庫備份恢復資料庫
- 達夢DMDSC叢集搭建
- 達夢6.0試用之資料庫物件資料庫物件
- 國產化之銀河麒麟安裝達夢資料庫DM8資料庫
- Kylin Desktop V10部署達夢資料庫(DM8)資料庫
- 達夢資料庫DM8之資料快速載入工具dmfldr使用方法資料庫
- 達夢資料庫初體驗-單機環境部署記錄資料庫
- 達夢資料庫學習筆記資料庫筆記
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- 達夢資料守護系統(主備架構)如何正確重啟備庫架構
- 達夢資料庫DM8之REDOLOG重做日誌檔案管理資料庫
- 達夢資料庫DM8之刪除歸檔日誌檔案資料庫
- 借力中國資料庫技術大會 達夢DM8資料庫新品正式釋出資料庫
- 達夢資料庫的備份與還原資料庫
- 達夢資料庫DM8在LINUX環境下安裝步驟資料庫Linux
- 國產化之 .NET Core 操作達夢資料庫DM8的兩種方式資料庫
- 達夢資料庫如何解除主從關係資料庫
- GBase XDM(單機/分片叢集)資料庫 新增記錄資料庫
- GBase XDM(單機/分片叢集)資料庫修改記錄資料庫
- DM8 資料守護實時主備搭建
- 資料庫叢集資料庫
- GBase XDM(單機/分片叢集)資料庫 刪除記錄資料庫
- DM8搭建MPP叢集
- 達夢資料庫開發資料庫
- 初識達夢資料庫資料庫
- 達夢資料庫學習資料庫
- 達夢資料庫安裝資料庫
- 最快方式搭建docker大資料 測試叢集Docker大資料
- 淺談達夢資料庫的備份與恢復資料庫
- 達夢6.0試用之資料字典
- MySQL 主備庫切換記錄MySql