• 揭密 GaussDB T 主备物理复制搭建过程(全)


    摘要

    这份数据库年终总结你看过了吗?去选出你期待学习的内容吧,还有限量版DBA专属日历等你拿哦~

    华为在数据库领域默默深耕多年,近两年才真正进入大众视野,GaussDB作为国产数据库受到广泛关注,其中GaussDB T主打交易型场景,与Oracle使用上十分相似,降低了oracle dba的学习成本。本文主要介绍了GaussDB主从物理复制部署过程,和oracle adg十分相似,供大家参考。

    另:墨天轮组建了一个GaussDB学习的扣扣群(640663596),会分享 GaussDB T 的测试账号,供大家直接上手 GaussDB T数据库,揭开面纱。
     

    背景


    华为公司与今年五月份发布了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.3Checking 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 fileInitialize 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
    

    另:想了解更多 GaussDB 数据库的知识与用法,欢迎关注墨天轮“GaussDB 专栏”(地址:https://www.modb.pro/db,点击左下角的“阅读原文”或者扫描下方二维码可直达),此外,墨天轮开放了很多数据库专栏,如 GaussDB、PolarDB、OceanBase、TDSQL、GoldenDB 等众多数据库专栏,欢迎关注学习!
     

  • 相关阅读:
    Linux显示2015年日历表
    Linux显示系统日期
    Dialogs 对话框
    grid 属性
    VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 嵌入清单
    Perl Tk grid 布局
    Perl Tk pack布局示例
    Perl Tk grid布局管理器
    Perl DBI模块
    输入文本框模型
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13311842.html
Copyright © 2020-2023  润新知