摘要
这份数据库年终总结你看过了吗?去选出你期待学习的内容吧,还有限量版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 等众多数据库专栏,欢迎关注学习!