Polardb資料庫掛庫後,如何恢復主備關係
一、前言
Polardb-O 主從高可用模式會出現主庫節點主機或是網路卡故障等問題,只要主從發生切換,備庫節點切換成新主庫,而老主庫主機重啟恢復後,無法自動切換成新備庫,甚至影響較大出現主備這間流複製關係失效。因此出現備庫恢復失敗問題,需要全量重建備庫和流複製建立。
二、環境資訊
2.1 主機資訊
Polardb-O 資料庫 |
實際地址IP |
資料庫架構 |
異常節點 |
Polardb-O 叢集 |
192.168.58.130 |
原主庫 |
down機 |
192.168.58.131 |
原備庫 |
變成新主庫 | |
|
192.168.58.129 |
VIP |
/ |
叢集管理軟體 |
192.168.58.132 |
/ |
/ |
2.2 架構圖
三、備庫恢復過程
當主庫因主機或是網路卡其中某中原因要對主庫進行重啟恢復,此時CM 會自動觸發主從切換,自然備庫被切換成新主庫,而老主庫重啟後需要恢復成新備庫,但測試驗證後,發現老主庫主機重啟恢復後,無法恢復成備庫。只能通過手工重建方式來恢復備庫。
3.1、新備庫恢復過程
1、 清除新備庫檔案系統環境
# 刪除本地配置目錄 sudo rm -rf $PGDATA # 清理 PFS 檔案系統中資料 sudo pfs -C disk rm -r /sdb/pgdata # 建立資料目錄 pfs -C disk mkdir /sdb/polar_data |
2、 主庫同步資料到備庫
使用主庫資料目錄和PFS 初始化備庫資料目錄(在新備庫使用polardb 登入)
polar_basebackup -h 192.168.58.131 -p5432 -U replicator -D $PGDATA --polardata=$PFSDIR --polar_storage_cluster_name=disk --polar_disk_name=$PFSDISK --polar_host_id=2 -X stream --progress --write-recovery-conf -v
ls -lrt $PGDATA -rw------- 1 polardb polardb 216 Oct 11 10:16 backup_label.old drwx------ 8 polardb polardb 74 Oct 11 10:16 base drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_snapshots drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_serial drwx------ 4 polardb polardb 34 Oct 11 10:16 pg_multixact -rw------- 1 polardb polardb 1636 Oct 11 10:16 pg_ident.conf -rw------- 1 polardb polardb 4513 Oct 11 10:16 pg_hba.conf drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_dynshmem -rw------- 1 polardb polardb 88 Oct 11 10:16 postgresql.auto.conf drwx------ 2 polardb polardb 6 Oct 11 10:16 polar_rel_size_cache drwx------ 2 polardb polardb 27 Oct 11 10:16 polar_fullpage -rw------- 1 polardb polardb 3 Oct 11 10:16 PG_VERSION drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_tblspc drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_stat -rw------- 1 polardb polardb 7478 Oct 11 10:16 postgresql.conf drwx------ 2 polardb polardb 6 Oct 11 10:16 dbms_pipe -rw------- 1 polardb polardb 168 Oct 11 10:16 polar_node_static.conf drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_commit_ts drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_csnlog drwx------ 2 polardb polardb 17 Oct 11 10:16 pg_notify -rw------- 1 polardb polardb 49 Oct 11 10:16 postmaster.opts drwx------ 2 polardb polardb 142 Oct 11 10:16 polardb_log -rw------- 1 polardb polardb 178 Oct 11 10:16 current_logfiles drwx------ 2 polardb polardb 17 Oct 11 10:16 pg_xact drwx------ 2 polardb polardb 6 Oct 11 10:16 polar_cache_trash -rw------- 1 polardb polardb 82 Oct 11 10:16 postmaster.pid drwx------ 2 polardb polardb 4096 Oct 11 10:16 global drwx------ 2 polardb polardb 17 Oct 11 10:16 pg_subtrans drwx------ 2 polardb polardb 6 Oct 11 10:16 pg_replslot drwx------ 4 polardb polardb 65 Oct 11 10:16 pg_logical drwx------ 2 polardb polardb 135 Oct 11 10:16 pg_stat_tmp
可以看到備庫上面的檔案已經從主庫同步過來。 |
注意:主備庫的host_id 不能一致,否則會影響備庫資料同步。
3、 啟動和檢查備庫節點
啟動與檢查備節點可驗證資料庫是否連線成功。具體操作如下:
pg_ctl -c start -D $PGDATA waiting for server to start.... 38650 2020-10-11 02:26:59 UTC 00000 LOG: polar_vfs loaded in postmaster 38650
38650 2020-10-11 02:26:59 UTC 00000 LOG: listening on IPv4 address "0.0.0.0", port 5432
38650 2020-10-11 02:26:59 UTC 00000 LOG: listening on IPv6 address "::", port 5432 ......................... >>>>>>>>>>>>>>>>>>>>>>>中間省略部分日誌資訊<<<<<<<<<<<<<<<<<<<<<<<<< ......................... 38650 2020-10-11 02:27:02 UTC 00000 LOG: removing file "pg_notify/0000" 38650 2020-10-11 02:27:02 UTC 00000 LOG: vfs_unlink pg_notify/0000 38650 2020-10-11 02:27:02 UTC 00000 LOG: forked new process, pid is 38665, true pid is 38665 38650 2020-10-11 02:27:02 UTC 00000 LOG: redirecting log output to logging collector process 38650 2020-10-11 02:27:02 UTC 00000 HINT: Future log output will appear in directory "polardb_log". ... done server started psql -h$PGDATA -p$PGPORT
polardb=# select sysdate from dual; sysdate -------------------- 11-OCT-20 02:27:57 (1 row) |
如果能連通,則證明資料庫安裝成功,並且啟動成功。
3.2、 CM 管理軟體
為了保障主從能正常切換,需要在CM 中將異常備庫清除掉,以免後面加入新備庫時出現衝突。
curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/app/polardb_ data\",\"ip\":\" 192.168.58.130 \",\"port\":\"5432\",\"type\":\"Standby\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}" http://127.0.0.1:5000/v1/remove_ins
curl -H ""Content-Type:application/json"" http://127.0.0.1:5000/v1/status?type=visual
[polardb@polardb04 ~]$ curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual { "phase": "RunningPhase", "master": { "endpoint": " 192.168.58.131:5432", "data_path": "/app/polardb_data", "user": "polardb", "phase": "RUNNING", "start_at": "2020-10-11 10:15:16", "sync_status": "SYNC" }, "vip": [ { "vip": "192.168.58.129", "interface": "team0", "mask": "255.255.255.0", "endpoint": "192.168.58.131:5432" } |
將原來當機主庫恢復成備庫並將備節點使用CM 管理軟體加入polardb叢集。
curl -H " Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/app/polardb_data\",\"ip\":\" 192.168.58.130 \",\"port\":\"5432\",\"type\":\"Standby\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}" http://127.0.0.1:5000/v1/add_ins |
3.3、 主備庫流複製狀態
1 、叢集環境檢查
curl -H ""Content-Type:application/json"" http://127.0.0.1:5000/v1/status?type=visual { "phase": "RunningPhase", "master": { "endpoint": " 192.168.58.131:5432", "data_path": "/app/polardb_data", "user": "polardb", "phase": "RUNNING", "start_at": "2020-10-11 10:15:16", "sync_status": "SYNC" }, "standby": [ { "endpoint": " 192.168.58.130:5432", "data_path": "/app/polardb_data", "user": "polardb", "phase": "RUNNING", "start_at": "2020-10-11 10:27:17", "sync_status": "SYNC" } ], "vip": [ { "vip": " 192.168.58.129", "interface": "team0", "mask": "255.255.255.0", "endpoint": " 192.168.58.131:5432" }
|
2 、檢查主庫流複製程式
ps -ef |grep wal # 主庫 – walwriter ps -ef |grep wal # 備庫 – walreceiver |
3 、檢查主備庫讀寫模式
[polardb@polardb02 app]$ psql -h$PGDATA -p$PGPORT -c "show transaction_read_only"; transaction_read_only ----------------------- off
[polardb@polardb01 local]$ psql -h$PGDATA -p$PGPORT -c "show transaction_read_only"; transaction_read_only ----------------------- on 注意:主庫狀態: off, 備庫: on |
4
、主庫檢視複製狀態
polardb=# select * from pg_stat_replication ; -[ RECORD 1 ]----+--------------------------------- pid | 41023 usesysid | 356380346 usename | repuser application_name | standby_184492244_5432 client_addr | 192.168.58.130 client_hostname | client_port | 60751 backend_start | 11-OCT-20 10:52:43.643961 +08:00 backend_xmin | state | streaming sent_lsn | 7E/80001518 write_lsn | 7E/80001518 flush_lsn | 7E/80001518 replay_lsn | 7E/80001518 write_lag | 00:00:00.000503 flush_lag | 00:00:00.000515 replay_lag | 00:00:00.000724 sync_priority | 2 sync_state | sync
以上主從同步複製狀態正常。 |
5、
測試資料同步是否正常
在主庫建立一個表,看備庫是否存在 , 如果存在說明資料同步正常。
# 主庫 ztdb=# ztdb=# create table zttab_sync_test01(id int ,name char(20)); CREATE TABLE ztdb=# ztdb=# insert into zttab_sync_test01 values(1,'alan'),(2,'jinxu'); INSERT 0 2 ztdb=# ztdb=# select * from zttab_sync_test01; id | name ----+---------------------- 1 | alan 2 | jinxu
# 備庫 ztdb=# ztdb=# select * from zttab_sync_test01; id | name ----+---------------------- 1 | alan 2 | jinxu
測試主庫建立一張表並插入幾條資料,備庫也正常同步過來。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2733515/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- SCN與資料庫恢復的關係資料庫
- 【備份恢復】從備份恢復資料庫資料庫
- SCN號與oracle資料庫恢復的關係Oracle資料庫
- 關閉資料庫的備份與恢復資料庫
- MSSQL-最佳實踐-資料庫恢復模式與備份的關係SQL資料庫模式
- 如何恢復在全備後新增了資料檔案的資料庫資料庫
- (轉)SCN號與oracle資料庫恢復的關係Oracle資料庫
- 資料庫中主庫和從庫的關係資料庫
- failover切換後恢復原來主庫為新備庫AI
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- rman資料庫全庫備份與恢復資料庫
- 3.5 掛起和恢復資料庫資料庫
- 資料庫備份與恢復(使用歸檔後滾)資料庫
- 達夢資料庫如何解除主從關係資料庫
- 【資料庫資料恢復】ASM例項不能掛載的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- SCN, Checkpoint 與 oracle資料庫恢復的關係(final)Oracle資料庫
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- 達夢資料庫備份恢復資料庫
- Oracle資料庫冷備和恢復Oracle資料庫
- postgresql備份與恢復資料庫SQL資料庫
- mongo資料庫備份與恢復Go資料庫
- 資料庫的備份與恢復資料庫
- Informix資料庫備份與恢復ORM資料庫
- 備份和恢復postgreSQL資料庫SQL資料庫
- 資料庫異機冷備恢復資料庫
- Mysql資料庫備份及恢復MySql資料庫
- 資料庫資料的恢復和備份資料庫
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- 資料庫資料恢復—NTFS分割槽損壞如何恢復SqlServer資料庫資料資料庫資料恢復SQLServer
- 【資料庫資料恢復】Oracle資料庫ASM磁碟組掉線如何恢復資料?資料庫資料恢復OracleASM
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- 用物理備庫的檔案來恢復主庫
- 【資料庫資料恢復】SQL server資料庫被加密怎麼辦?如何恢復?資料庫資料恢復SQLServer加密
- 【備份恢復】noarchive模式下使用增量備份恢復資料庫Hive模式資料庫
- 【備份恢復】在 ARCHIVELOG 模式下執行資料庫還原和恢復操作(源庫備份源庫恢復)Hive模式資料庫
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer