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

    参数介绍
    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环境变量没有匹配或者配置错误 
    解决方法: 根据具体日志 采取对应的解决措施

  • 相关阅读:
    bug终结者 团队作业第二周
    dropdownlist绑定数据
    virtual与vmware
    后台控制输出table(有数据库)
    label 绑定数据
    flash不能显示中文
    dataset 多表查询
    MVC3 Razor视图引擎基础语法 [转]
    CreateAlias()与setFetchMode() [转 李丽芬]
    Linq Like [转 韩天伟]
  • 原文地址:https://www.cnblogs.com/oscarli/p/12145663.html
Copyright © 2011-2022 走看看