【HICP Gaussdb】数据库 数据库管理(主备配置 常用视图 主备切换 故障处理 逻辑复制 逻辑复制回滚) -16

时间:2024-02-26 06:57:53

参数介绍
ARCHIVE_DEST_N
archive_dest_2 = local_host =192.168.0.1 service =ip:port[sync| async] [primary_role | standby_role | all_roles ] [affirm | noaffirm ] [ zstd | LZ4]
         sync async :同步数据 异步数据
         local_host : 本机ip地址
         service = ip:port 服务机器 ip+port
         primary_role standby_role all_roles :参数生效针对角色: 主机 备机 还是全部生效
         affirm noaffirm : 事务提交时候 是否需要等待备机回复
         zstd LZ4 :压缩算法
LSNR_ADDR 地址 LSNR_PORT 端口 ----------> 主备机配置

 

# nomount 启动主机
         zengine nomount -D /home/gaussdb &
# 在主机上建库
         create database gauss archivelog
# nomount 启动备机
         zengine nomount -D /home/gaussdb &
# 在备机上进行build
         build database
# 在主机上查询角色和状态
         select database_role ,database_condition from V$database;

 

 

常用视图
V$DATABASE
database_role 数据库角色 【 primary 主机 | physical_standby 备机| cascaded_physical_standby 级联备机】
database_condition 数据库状态 【normal 状态正常| disconnected 主备机断开 | demoting /promoting /failover promoting /faft failover /wait to promote 主备切换状态| need repair 需要重建】
switchover_status 主备切换状态【to primary 可执行swith升主 | not allowed 不允许升主】
failover_status 是否可以执行failover操作【to primary 可以指定failver升主 | not allowed 不允许执行】

V$HA_SYNC_INFO
status 日志发送线程状态【not running 对应链路没有使用| disconnected 断开 尝试连接 | connected 未进入发送日志状态 | shifting 完全就绪 】
role_valid 本机使用archive_dest_n生效场景【all_role 主机和备机都会对等连接| primary_role 该实例是主机 会连接对端| primary_role 备机时 连接对端】
net_mode 日志传输 【sync 同步| async 异步 】
peer_host/peer_port 对端地址和端口
local_send_point 本地日志发送点
peer_flush_point 对端日志接收点 【peer_building 对端是否执行build操作 | local_LFN/peer_LFN 本地对端的LFN | local_LSN/peer_LSN 本地对端的LSN 】
flush_lag 对端日志接受的延迟时间
replay_lag 对端日志回放的延迟时间

V$MANAGED_STANDYBY
process 线程名称【RFS 日志接收线程 | MRP 日志重演线程 | ARCH 归档线程 | FAL 归档日志获取线程】
STATUS 线程状态 【open 运行 | connected 主备连接 未发送日志 | catching_up 备机处于追赶状态 | streaming 备机处于正常的日志复制状态 】
RESETLOG_ID 归档redo日志的resetlog号
thread 归档redo log线程号
Sequence 归档redo log序列号
flush_point 备机当前的日志罗盘点
primary_curr_point 主机当前的日志罗盘点
replay_point 备机当前的日志重演点

常用视图
查询主机切换状态

 


查询日志同步状态

 

查询备机重演状态

 

 

 

switchover 主备倒换
在主备实例均正常的情况下, 零数据丢失地完成主备角色切换 ,主要应用于有计划的停服 滚动升级
failover 故障倒换
备机在断开状态 ,可以在备机上执行failover 升主 继续对外提供服务 , 可能会造成数据损失, 原主机要启动mount状态 降为备 , 主要用于故障接管场景

举例: select database_role , database_condition,switchover_status from V$DATABASE ;
alter database switchover ; # 切换主备
select database_role , database_condition,switchover_status from V$DATABASE ;

 

 

failover
举例: select database_role , database_condition,switchover_status from V$DATABASE ;
alter database failover # 切换主备
select database_role , database_condition,switchover_status from V$DATABASE ;
zengine mount -D /home/gaussdba & # 原主机mount启动
starting instance(mount) # 原主机mount启动
alter database convert to physical standby ; # 原主机降备

 

 

 

 

故障处理
故障1: RFS is not ready can not get peer role
场景: 一般出现在备机做build 由于这个报错造成build失败
原因分析: 直接原因是因为主机没有链接上备机
1、 主机没有启动 主机在停止状态下 build不可能成功
2、 主机没有open 主机只有在open状态下 才会去连接备机
3、 防火墙问题: 主备机器上任一防火墙没有关闭 都会造成build失败
4、 archive_dest_2 参数配置问题 , IP或者端口错误 ,role_valid错误
5、achive_dest_state_2 参数配置问题: 该参数配置成了defer 主机不在连接备机
排查: 根据上述原因逐一排查

故障2:备机状态显示 need repair
场景: 主机在执行业务的过程中被异常中断, 备机failver升主 , 原主降备 备机可能显示 need repair
原因分析: 备机显示 need repair 在运行日志里面都会打印相应原因
1、 主备不同源 主机的DBID和备机的DBID不一致 , 两者来自不同源头
2、主备redo日志不尽一致,主备的日志个数 大小 类型 block size等信息都要一致
3、resetid 大小有误 :主机的resetid必须要大于或者等于备机 但差值又不能超过1 ;
4、备机日志 比主机日志还多:主机的日志 至少要和备机一样多 但是绝对不能比备机少
5、主机归档文件不存在 :备机在回放日志过程中,如果缺少归档文件, 会向主机请求 如果主机上的归档文件找不到,则备机无法继续回放 ,备机显示 needrepir
排查: 重建备机来恢复主备关系
# build database

 

 

逻辑复制的原理:
逻辑复制工具 是通过解析包含逻辑日志信息的REDO日志和归档日志 获取数据变更信息 。然后将改变的变更信息放到目标端数据源。
逻辑复制主要场景如下:
1、主备数据库的增量数据备份
2、不同业务系统之间的数据同步
3、系统升级过程中的在线迁移

逻辑复制相当于屋里复制的优势:
1、物理复制对日志物理格式依赖强,而逻辑复制可以灵活实现gaussdb跨版本复制以及数据库异构
2、 逻辑复制可以支持源,目标数据库表结构不一致时的判定

 

 

 

 

步骤 :1、登录数据库
         2、 mkdir -p /opt/software/tools # 按规划创建存放逻辑复制工具的目录 将逻辑复制工具 安装包上传至目录 解压 进入 logicrep 目录
         3、进入逻辑复制工具的conf目录下 , 修改进程 启动参数的取值, 所有改动需要重启逻辑复制服务生效 conf/init.properties配置如下
thread.number 线程个数 ,replayer.class 回放类 ,dispath.queue.size 工作队列大小


         4、使用zsql登录源数据库 、执行一下sql


         5、在源数据库上 为源数据库和目录数据库 中逻辑复制服务使用的用户生成密码密文 。逻辑复制秘钥配置文件目录 conf/sec
         key1.properties 保存随机秘钥因子 ,key2.properity 保存工作秘钥
         ./zencrypt -e AES256 -f 秘钥因子 -k 工作秘钥 ---> 将生成的密码密文 填入 conf目录下的datasrouce.properity文件对应的ds.passwd配置项中
         修改参数如下: ds.type 数据源类型 当前支持 gauss oracle kafka 、 ds.url 数据库url地址 、 dsusername 逻辑复制服务使用的用户名称 、ds.passwd 逻辑密码


         6、配置conf/repconf 目录下的reconf_db.xml 该文件是映射关系
              repname 复制关系名称、 datasource 复制的源数据库名称和目标数据库名称、filtereduser 过滤信息的用户 、 modemapping 定义复制关系中 模型映射

 

常见故障
Sql回放失败 
     源端数据和目标数据库中要复制的表 没有匹配好映射关系 【用户 、表明、表结构不同】
     由于某种原因导致目标数据库进程退出 
     变更源端某张要复制的表结构 ,而目标端的表没有加对应列 
解决方法: 根据逻辑复制打印出来的日志信息排查错误

解析源端逻辑日志失败 
原因:用户删除了某张已经开启逻辑复制的表 , 但是逻辑日志中还残留这张表的数据时 重启了逻辑复制工具的进程 
解决方法: 在逻辑复制启动时 指定要跳过的某个用户下对应的表 

启动逻辑复制工具进程失败
原因: 配置文件配置错误、 java环境变量没有匹配或者配置错误 
解决方法: 根据具体日志 采取对应的解决措施