• 自己写了一个CM管理GBase数据库集群


    GBase8s数据库集群管理程序介绍

    介绍数据库自带的集群管理程序 Connection Manager

    • 弊端:

      • 没有vip,需要代理或者转发。

      • 源码复杂,并且谨慎有余灵活不足,不能满足客户特殊的集群需求。

    介绍我自己开发的集群管理程序 WeiCM.exe

    • 组件:
      • WeiDbManager :对DB实施操作的代理接口,提供数据库启停,角色切换,集群关系定义接口。
      • WeiOsManager :对OS实施操作的代理接口,提供vip绑定解绑接口。
      • WeiCM : 负责集群定义,负责节点自恢复,负责节点角色切换,负责主角色选举,负责VIP切换。

    开始部署我的集群管理程序

    • 部署架构图
      在这里插入图片描述

    下文示例中:管理端windoes的ip是1.1.1.1;两个docker的宿主机IP是1.1.1.2和1.1.1.3; 其中1.1.1.2上运行gbase001容器, 其中1.1.1.2上运行gbase002容器。

    数据库集群端-部署

    导入镜像

    docker load < gbase_v2.tar
    
    • 1

    创建docker

    docker run -p 16060:6060 -p 19088:19088 -p 9088:9088 --name gbase001 -itd gbase:v2 su - gbasedbt -c "/home/gbase/start.sh ; /bin/bash "
    
    docker run -p 26060:6060 -p 29088:29088 -p 9088:9088 --name gbase002 -itd gbase:v2 su - gbasedbt -c "/home/gbase/start.sh ; /bin/bash "
    
    • 1
    • 2
    • 3

    修改DB配置一:profile onconfig sqlhosts

    docker exec -it gbase001 /bin/bash
    docker exec -it gbase002 /bin/bash
    su - gbasedbt
    rm   -fr /home/gbase/sysInfo/WeiShell/
    mkdir -p /home/gbase/sysInfo/WeiShell/
    sh g01.init.instance.name.sh gbase001 1.1.1.2 
    sh g01.init.instance.name.sh gbase002 1.1.1.3
    . .bash_profile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改DB配置二:sqlhosts

    #1.1.1.2上:
    cat > /opt/gbase/etc/sqlhosts << EOF
    gbase001 onsoctcp 0.0.0.0 19088
    gbase002 onsoctcp 1.1.1.3 29088
    gbase    onsoctcp 0.0.0.0  9088
    EOF
    
    #1.1.1.3上:
    cat > /opt/gbase/etc/sqlhosts << EOF
    gbase001 onsoctcp 1.1.1.2 19088
    gbase002 onsoctcp 0.0.0.0 29088
    gbase    onsoctcp 0.0.0.0  9088
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    修改DB配置三:onconfig

    sed -i 's/^DBSERVERALIASES.*/DBSERVERALIASES gbase/' /opt/gbase/etc/$ONCONFIG
    
    • 1

    修改DB配置四:cluster

    # sed -i 's/FULL_DISK_INIT 0/FULL_DISK_INIT 1/' $GBASEDBTDIR/etc/$ONCONFIG
    chmod 777 0b
    ontape -p -t 0b
    
    #gbase001主
    onmode -m
    onmode -d add RSS gbase002
    #gbase002备
    onmode -d RSS gbase001
    
    #查看结果
    onstat -g cluster
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    修改Docker配置一:WeiDbManager 和 pingtest.sh 和 GetNodeInfo.sh

    #宿主机上传 WeiDbManager
    #宿主机上传 pingtest.sh
    #宿主机上传 GetNodeInfo.sh
    mkdir -p /opt/gbase/sysInfo/WeiShell/
    cd /opt/gbase/sysInfo/WeiShell/
    rm -fr  /opt/gbase/sysInfo/WeiShell/*
    rm WeiDbManager -f
    rz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    #宿主机复制文件到Docker里面
    chmod 755 /opt/gbase/sysInfo/WeiShell/WeiDbManager
    chmod 755 /opt/gbase/sysInfo/WeiShell/pingtest.sh
    chmod 755 /opt/gbase/sysInfo/WeiShell/GetNodeInfo.sh
    cd /opt/gbase/sysInfo/WeiShell/
    docker cp WeiDbManager gbase001:/home/gbase/sysInfo/WeiShell/
    docker cp WeiDbManager gbase002:/home/gbase/sysInfo/WeiShell/
    docker cp pingtest.sh  gbase001:/home/gbase/sysInfo/WeiShell/
    docker cp pingtest.sh  gbase002:/home/gbase/sysInfo/WeiShell/
    docker cp GetNodeInfo.sh gbase001:/home/gbase/sysInfo/WeiShell/
    docker cp GetNodeInfo.sh gbase002:/home/gbase/sysInfo/WeiShell/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    修改Docker配置二: Start

    #容器里面
    cat > ~/start.sh << EOF
    #!/bin/bash
    
    echo "---start---"
    nohup /home/gbase/sysInfo/WeiShell/WeiDbManager &
    nohup /home/gbase/sysInfo/WeiShell/pingtest.sh 1.1.1.1 &
    
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    修改OS配置一:WeiOsManager And Start

    #宿主机上传: WeiOsManager ,并用root用户运行即可。
    mkdir -p /opt/gbase/sysInfo/WeiShell/
    cd /opt/gbase/sysInfo/WeiShell/
    rz
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    #宿主机上传:用root用户运行即可。
    chmod 755 /opt/gbase/sysInfo/WeiShell/WeiOsManager
    nohup /opt/gbase/sysInfo/WeiShell/WeiOsManager &chmod 755 /opt/gbase/sysInfo/WeiShell/WeiOsManager
    nohup /opt/gbase/sysInfo/WeiShell/WeiOsManager -l 1.1.1.3 &
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    重启Docker

    docker stop gbase001
    docker stop gbase002
    docker start gbase001
    docker start gbase002
    
    • 1
    • 2
    • 3
    • 4

    手动启动第1个主节点

    #1.1.1.2上绑定IP
    ip addr add 1.1.1.6/24 dev ens33
    ip a |grep 1.1.1.
    
    docker exec -it gbase001 /bin/bash
    su - gbasedbt
    oninit -v
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    数据库集群端-完成

    ​ 至此,自切换集群 DB-SERVER端境搭建完成。包含程序: WeiOsManager 和 WeiDbManager 。


    调度管理端-部署

    ​ 准备一台到DB服务器网络通的Windows主机,这里配置IP为1.1.1.1。

    ​ 上传WeiCM.exe执行程序到Windows主机。

    调度管理端-完成WeiCM.exe Start

    ​ 在Winddows机器上运行WeiCM.exe程序即可。

    ​ 程序会检测数据库集群状态,并完成集群故障切换,集群节点自动修复,集群VIP切换。

    保留最终解释权

    其他说明1:

    极端情况下如果有双主情况出现,请决策者取舍:

    02:39:14  DR_ERR set to -5
    02:39:14  Assert Failed: DR: Log Record Apply Thread Exited Abnormally. Internal Error.
                  A restart of the database server shall be required to correct
                  this problem.
    
    02:39:14  GBase Database Server Version 12.10.FC4G1AEE
    02:39:14   Who: Session(19, gbasedbt@, 0, 0x45df7fa8)
                    Thread(44, RSS_apply, 45db9228, 1)
                    File: hdr/hdrApply.c Line: 580
    02:39:14   Results: Database Server must abort
    02:39:14   Action: Reinitialize shared memory
    02:39:14  stack trace for pid 82 written to /opt/gbase/tmp/af.41456d2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    其他说明2:

    • 本程序功能:
      1、集群中只要有一个节点活着,业务就不会中断。
      2、对于故障的节点,只要外部条件修复了,会自动加入新集群。
      3、提供故障切换和Vip漂移功能。

    • 友情提示:
      1、如果想手动配置集群,比如:想手动决定主节点归属,想从备份恢复从节点。时,请先停止本集群,待你配置完成后,再启动本程序让它帮助你管理和维护集群服务。

    • 测试结果:

      ​ 1、停数据库库,可以故障切换业务正常。

      ​ 2、停容器,可以故障切换业务正常。

      ​ 3、断宿主机网络,可以故障切换业务正常。

    其他说明3:

    ​ 本程序更像一个外挂程序,从数据库运维工程的角度出发,解决了一些实际生成需求。

  • 相关阅读:
    云存储空间的动态分配技术
    C++项目实战——基于多设计模式下的同步&异步日志系统-④-日志系统框架设计
    linux下的文本处理工具awk学习
    (九)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4(一)简单配置
    初识动态内存分配
    中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费
    [架构之路-19]:目标系统 - 硬件平台 - 案例1 - 用单片机STM8/STM32搭建目标系统(以无线传感器LoRa终端为例)
    【每日一题】ABC202D - aab aba baa | 组合数 | 简单
    k8s Pod简介与探针实现零宕机发布
    中国聚合支付行业市场全景调研及投资价值评估研究报告
  • 原文地址:https://blog.csdn.net/m0_46426259/article/details/127133540