華為GaussDB T資料庫主備物理複製搭建過程

資料和雲發表於2020-01-03

本文來源於: 資料庫架構之美  

作者:dbaer


摘要



這份資料庫年終總結你看過了嗎?去選出你期待學習的內容吧,還有限量版DBA專屬日曆等你拿哦~


華為在資料庫領域默默深耕多年,近兩年才真正進入大眾視野,GaussDB作為國產資料庫受到廣泛關注,其中GaussDB T主打交易型場景,與Oracle使用上十分相似,降低了oracle dba的學習成本。本文主要介紹了GaussDB主從物理複製部署過程,和oracle adg十分相似,供大家參考。



背景



華為公司與今年五月份釋出了GaussDB100、200、300三個產品線,但近期GaussDB產品組織架構有了調整,產品規劃發生了變化,以後將會有兩個產品線GaussDB T和GaussDB A,T產品將納入原來GaussDB100的產品及能力,主打交易型場景,A將納入GaussDB200及300的產品和能力,主打分析型場景。100對標oracle,號稱完全自研,在使用上和oracle非常像,主打單機版,也有分散式版,明年將會有叢集版對標oracle rac,200、300基於pg開發,對pg核心做了非常多的改動和最佳化,主打分散式版,當然也有單機版。最近高斯資料庫很火,蹭蹭熱度。

 

主備部署



本文主要介紹對標oracle的GaussDBT資料庫的主備高可用部署,比較簡單,適合入門,如果有oracle基礎的話會發現和oracle ADG非常類似,整個資料庫也很oracle高度相似。GaussDBT資料庫核心名為zengine,編譯完的二進位制包只有7M,非常小巧。下面具體看看部署過程。


主庫DB1:192.168.1.1

備庫DB2:192.168.1.2

備庫DB3:192.168.1.3


01 主備機安裝資料庫軟體


解壓安裝包,進入安裝路徑,使用root執行安裝命令:

[root@DB1 GaussDB_100_1.0.1-DATABASE-KYLINREDHAT-64bit]#./install.py -U omm:dbgrp -R /gaussdb/software -D /gaussdata/data -C LSNR_ADDR=127.0.0.1,192.168.1.3

Checking runner.

Checking parameters.

End check parameters.

Checking user.

End check user.

Checking old install.

End check old install.

Checking kernel parameters.

Checking directory.

Checking integrality of run file...

Decompressing run file.

Setting user env.

Checking data dir and config file

Initialize db instance.

Creating database.

Creating database succeed.

Changing file permission due to security audit.

Install successfully, for more detail information see /home/omm/zengineinstall.log.


02 引數調整


主備機修改相關引數,包括表空間調整,歸檔路徑調整,上線引數調整,當然不調整也不影響主備搭建:

ALTER SYSTEM SET CBO = on;ALTER SYSTEM SET data_buffer_size = 8G;

ALTER SYSTEM SET shared_pool_size=4G;

ALTER SYSTEM SET temp_buffer_size=2G;

ALTER SYSTEM SET buf_pool_num=8;

ALTER SYSTEM SET large_pool_size=256M;

ALTER SYSTEM SET cr_pool_size=1G;

ALTER SYSTEM SET cr_pool_count=8;

ALTER SYSTEM SET max_worker_threads=550;

ALTER SYSTEM SET optimized_worker_threads=500;

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;

ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME UNLIMITED;

alter tablespace temp drop datafile '/gaussdata/data/data/temp1_02';

alter database datafile '/gaussdata/data/data/temp1_01' resize 20G;

alter tablespace users drop datafile '/gaussdata/data/data/user5';

alter tablespace users drop datafile '/gaussdata/data/data/user4';

alter tablespace users drop datafile '/gaussdata/data/data/user3';

alter tablespace users drop datafile '/gaussdata/data/data/user2';

alter database datafile '/gaussdata/data/data/user1' resize 100M;

alter tablespace temp2 drop datafile '/gaussdata/data/data/temp2_02';

alter database datafile '/gaussdata/data/data/temp2_01' resize 1G;

alter database datafile '/gaussdata/data/data/temp2_undo' resize 1G;

alter database datafile '/gaussdata/data/data/sysaux' resize 5G;

alter database datafile '/gaussdata/data/data/system' resize 5G;

alter database datafile '/gaussdata/data/data/temp1_01' autoextend off;

alter database datafile '/gaussdata/data/data/user1' autoextend off;

alter database datafile '/gaussdata/data/data/temp2_01' autoextend off;

alter database datafile '/gaussdata/data/data/sysaux' autoextend off;

alter system set log_archive_dest_1='location=/gaussarch';

alter database delete archivelog all;


03 調整redo


也可以不調整

alter database drop logfile('/gaussdata/data/data/log6');

alter database drop logfile('/gaussdata/data/data/log5');

alter database drop logfile('/gaussdata/data/data/log4');

alter database add logfile('/gaussdata/data/data/log4' size 512M,'/gaussdata/data/data/log5' size 512M,'/gaussdata/data/data/log6' size 512M);

alter system switch logfile;

alter database drop logfile('/gaussdata/data/data/log3');

alter database drop logfile('/gaussdata/data/data/log2');

alter database drop logfile('/gaussdata/data/data/log1');

alter database add logfile('/gaussdata/data/data/log1' size 512M,'/gaussdata/data/data/log2' size 512M,'/gaussdata/data/data/log3' size 512M);


04 主庫設定遠端歸檔目錄


alter system set log_archive_dest_2='local_host=192.168.1.1 service=192.168.1.2:1898 sync affirm primary_role';

alter system set repl_port=1898;


05 備庫上設定遠端歸檔目錄


alter system set log_archive_dest_2='local_host=192.168.1.2 service=192.168.1.1:1898 sync affirm primary_role';

alter system set repl_port=1898;


06 重建備庫


重啟主機,停止備機,刪除資料目錄和歸檔目錄下的檔案,cfg目錄不刪,並在nomout模式下進行重建

zctl.py -t start -m nomount[omm@DB2 data]$ zsql / as sysdba -qconnected.SQL> build database;GS-00323, RFS is not ready, can not get peer role


檢查原因發現是備機沒有執行設定遠端歸檔目錄和複製埠。

修改後重新執行

SQL> build database;

Succeed.


07 測試同步


主庫建立表

SQL> create table test(id int);

Succeed.


備庫檢視

SQL> desc test;

Name                                Null?    Type                                

----------------------------------- -------- ------------------------------------

ID                                           BINARY_INTEGER


資料保護模式



資料保護模式,和oracle一樣,有三種保護模式,保護模式只在主機上有用,但是生產環境建議主備都進行設定,防止主備切換後保護模式變化,保護模式不會自動同步。


01 最大保護模式


最大保護模式下:

SQL> alter database set standby database to maximize protection;

Succeed.


①LOG歸檔的備機地址ARCHIVE_DEST_n(n不等於1),至少有一個備機的Redo日誌傳輸模式必須配置為同步模式SYNC,如果所有的備機都配置為非同步模式ASYNC,資料庫會啟動失敗。


②如果LOG歸檔的備機地址ARCHIVE_DEST_n(n不等於1)指定了SYNC和AFFIRM屬性,那麼事務日誌寫入所有指定AFFIRM的備庫日誌檔案後,才會在主庫上提交。


③如果LOG歸檔的備機地址ARCHIVE_DEST_n(n不等於1)指定了SYNC和NAFFIRM屬性,那麼無需等待備機寫入,事務日誌將直接寫入主庫。


02 最大可用模式


建議生產環境下使用該模式,最大可用模式下:

SQL> alter database set standby database to maximize availability;

Succeed.


①如果LOG歸檔的備機地址ARCHIVE_DEST_n(n不等於1)指定了SYNC和AFFIRM屬性,且指定了AFFIRM的備機和主機連線正常時,那麼事務日誌寫入所有指定AFFIRM的備庫日誌檔案後,才會在主庫上提交。


②如果LOG歸檔的備機地址ARCHIVE_DEST_n(n不等於1)指定了SYNC和NAFFIRM屬性,那麼無需等待備機寫入,事務日誌將直接寫入主庫。


03 最大效能模式


這是預設的模式,不建議生產環境使用,最大效能模式下:

SQL> alter database set standby database to maximize performance;

Succeed.


主庫可以使用LGWR SYNC/ASYNC複製到備庫,該保護模式設定沒有狀態要求


主備switchover



主備庫分別檢視切換狀態

SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;

DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   

------------------------------ ------------------ --------------------

PRIMARY                        NORMAL             NOT ALLOWED



SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;

DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   

------------------------------ ------------------ --------------------

PHYSICAL_STANDBY               NORMAL             TO PRIMARY


備機執行switchover後檢視狀態已經變為主庫

SQL> alter database switchover;Succeed.SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   ------------------------------ ------------------ --------------------PRIMARY                        NORMAL             NOT ALLOWED


一主兩備



如果是一主兩備的情況,需要在每臺機器上都建立兩條複製通道,每臺機器設定log_archive_dest_2和log_archive_dest_3,記得重啟資料庫,這樣在主備切換後備庫會自動連到新的主庫。


如果想修改log_archive_dest_2的值,需要先將log_archive_dest_state_2設為defer,然後進行修改,再改為enable

SQL> alter system set log_archive_dest_state_2=defer;

Succeed.

SQL> alter system set log_archive_dest_2='local_host=192.168.1.2 service=192.168.1.1:1898 sync affirm primary_role';

Succeed.

SQL> alter system set log_archive_dest_state_2=ENABLE;

Succeed.


主備failover



一主兩備,a主,bc備

停止a庫,在b機執行failover

SQL> alter database failover;Succeed.SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   ------------------------------ ------------------ --------------------PRIMARY                        NORMAL             NOT ALLOWED


C機狀態,已經連上新主庫b

SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;

DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   

------------------------------ ------------------ --------------------

PHYSICAL_STANDBY               NORMAL             TO PRIMARY


啟動a庫到mount狀態,檢視狀態

SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;

DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   

------------------------------ ------------------ --------------------

PRIMARY                        NORMAL             NOT ALLOWED


此時a機也是primary,切換a機為standby角色

SQL> alter database convert to physical standby;Succeed.SQL> select DATABASE_ROLE,DATABASE_CONDITION,SWITCHOVER_STATUS from dv_database;DATABASE_ROLE                  DATABASE_CONDITION SWITCHOVER_STATUS   ------------------------------ ------------------ --------------------PHYSICAL_STANDBY               NORMAL             TO PRIMARY


注意,a機一定要啟動到nomount狀態,如果啟動到open狀態會有雙主腦裂,而且必須重建備庫。另外如果a機異常當機,b執行failover後a機在mount狀態下轉換為standby也是不用執行重建的。


另外,在業務不斷執行的情況下,如果主庫a當機,在b執行failover,b上的業務也一直執行,然後此時c機檢視狀態可能有短暫的disconnect,追平後就會變為normal,同時原a庫啟動到mount再轉換為備庫後也可能會有短暫的disconnect,追平後會變為normal。


監控檢視


主機檢視相關狀態及位點資訊,其中的一些位點資訊可以用於切換的判斷介面。

SQL> select * from dv_ha_sync_info;

THREAD#      STATUS               LOCAL_HOST                                                       ROLE_VALID    NET_MODE PEER_HOST                                                        PEER_PORT    LOCAL_SEND_POINT                                                 PEER_FLUSH_POINT                                                 PEER_BUILDING LOCAL_LFN            LOCAL_LSN            PEER_LFN             PEER_LSN             FLUSH_LAG            REPLAY_LAG          

------------ -------------------- ---------------------------------------------------------------- ------------- -------- ---------------------------------------------------------------- ------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------

1            SHIFTING             192.168.1.1                                                      PRIMARY_ROLE  SYNC     192.168.1.2                                                      1898         0-22/85                                                          0-22/86                                                          FALSE         126144               2566593              126144               2566593              0                    0                   

2            SHIFTING             192.168.1.1                                                      PRIMARY_ROLE  SYNC     192.168.1.3                                                      1898         0-22/85                                                          0-22/86                                                          FALSE         126144               2566593              126144               2566593              0                    0


SQL> select * from dv_archive_gaps;

THREAD#      LOW_SEQUENCE#                    HIGH_SEQUENCE#                  

------------ -------------------------------- --------------------------------

0 rows fetched.


SQL> col FLUSH_POINT for a20;

SQL> col PRIMARY_CURR_POINT for a20;

SQL> col REPLAY_POINT for a20;

SQL> set line 200;

SQL> select * from dv_standbys;

PROCESS              STATUS               RESETLOG_ID  THREAD#              SEQUENCE#    FLUSH_POINT          PRIMARY_CURR_POINT   REPLAY_POINT        

-------------------- -------------------- ------------ -------------------- ------------ -------------------- -------------------- --------------------

RFS                  STREAMING            3            fffbb02f5f20         32           3-32/8137/146945     3-32/8136/146944                         

MRP                  OPEN                 3            fffbb0345f20         32                                                     3-32/8137/146945    

ARCH                 OPEN                 3            fffbbd1f5f20         31                                                                         

FAL                                       0                                 0



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556440/viewspace-2671752/,如需轉載,請註明出處,否則將追究法律責任。

相關文章