• OVN数据库备份和恢复


    1.数据库备份

    利用 kubectl 插件的 backup 命令可以对数据库文件进行备份,以用于故障时恢复:

    # kubectl ko nb backup
    tar: Removing leading `/' from member names
    backup ovn-nb db to /root/ovnnb_db.060223191654183154.backup
    
    # kubectl ko sb backup
    tar: Removing leading `/' from member names
    backup ovn-nb db to /root/ovnsb_db.060223191654183154.backup
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 集群部分故障恢复

    若集群中存在部分节点因为断电,文件系统故障或磁盘空间不足导致工作异常, 但是集群仍可正常工作可以通过如下步骤进行恢复。

    查看日志确认状态异常¶
    查看对应节点 /var/log/ovn/ovn-northd.log,若提示类似错误则可判断数据库存在异常

     * ovn-northd is not running
    ovsdb-server: ovsdb error: error reading record 2739 from OVN_Northbound log: record 2739 advances commit index to 6308 but last log index is 6307
     * Starting ovsdb-nb
    
    • 1
    • 2
    • 3

    从集群中踢出对应节点¶
    根据日志提示是 OVN_Northbound 还是 OVN_Southbound 选择对应的数据库进行操作。 上述日志提示为 OVN_Northbound 则对 ovn-nb 进行操作:

    # kubectl ko nb status
    9182
    Name: OVN_Northbound
    Cluster ID: e75f (e75fa340-49ed-45ab-990e-26cb865ebc85)
    Server ID: 9182 (9182e8dd-b5b0-4dd8-8518-598cc1e374f3)
    Address: tcp:[10.0.128.61]:6643
    Status: cluster member
    Role: leader
    Term: 1454
    Leader: self
    Vote: self
    
    Last Election started 1732603 ms ago, reason: timeout
    Last Election won: 1732587 ms ago
    Election timer: 1000
    Log: [7332, 12512]
    Entries not yet committed: 1
    Entries not yet applied: 1
    Connections: ->f080 <-f080 <-e631 ->e631
    Disconnections: 1
    Servers:
        f080 (f080 at tcp:[10.0.129.139]:6643) next_index=12512 match_index=12510 last msg 63 ms ago
        9182 (9182 at tcp:[10.0.128.61]:6643) (self) next_index=10394 match_index=12510
        e631 (e631 at tcp:[10.0.131.173]:6643) next_index=12512 match_index=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    从集群中踢出状态异常节点:

    kubectl ko nb kick e631
    
    • 1

    登录异常节点,删除对应的数据库文件:

    mv /etc/origin/ovn/ovnnb_db.db /tmp
    
    • 1

    删除对应节点的 ovn-central Pod,等待集群自动恢复:

    kubectl delete pod -n kube-system ovn-central-xxxx
    
    • 1

    3.集群不能正常工作下的恢复

    若集群多数节点受损无法选举出 leader,请参照下面的步骤进行恢复。

    停止 ovn-central¶

    记录当前 ovn-central 副本数量,并停止 ovn-central 避免新的数据库变更影响恢复:

    kubectl scale deployment -n kube-system ovn-central --replicas=0
    
    • 1

    选择备份

    由于多数节点受损,需要从某个数据库文件进行恢复重建集群。如果之前备份过数据库 可使用之前的备份文件进行恢复。如果没有进行过备份可以使用下面的步骤从已有的数据库文件 中生成一个备份。

    由于默认文件夹下的数据库文件为集群格式数据库文件,包含当前集群的信息,无法直接 用该文件重建数据库,需要使用 ovsdb-tool cluster-to-standalone 进行格式转换。
    
    • 1

    选择 ovn-central 环境变量 NODE_IPS 中排第一的节点恢复数据库文件, 如果第一个节点数据库文件已损坏,从其他机器 /etc/origin/ovn 下复制文件到第一台机器 , 执行下列命令生成数据库文件备份。

    docker run -it -v /etc/origin/ovn:/etc/ovn kubeovn/kube-ovn:v1.10.7 bash
    cd /etc/ovn/
    ovsdb-tool cluster-to-standalone ovnnb_db_standalone.db ovnnb_db.db
    ovsdb-tool cluster-to-standalone ovnsb_db_standalone.db ovnsb_db.db
    
    • 1
    • 2
    • 3
    • 4

    删除每个 ovn-central 节点上的数据库文件¶
    为了避免重建集群时使用到错误的数据,需要对已有数据库文件进行清理:

    mv /etc/origin/ovn/ovnnb_db.db /tmp
    mv /etc/origin/ovn/ovnsb_db.db /tmp
    
    • 1
    • 2

    恢复数据库集群¶
    将备份数据库分别重命名为 ovnnb_db.db 和 ovnsb_db.db,并复制到 ovn-central 环境变量 NODE_IPS 中排第一机器的 /etc/origin/ovn/ 目录下:

    mv /etc/origin/ovn/ovnnb_db_standalone.db /etc/origin/ovn/ovnnb_db.db
    mv /etc/origin/ovn/ovnsb_db_standalone.db /etc/origin/ovn/ovnsb_db.db
    
    • 1
    • 2

    恢复 ovn-central 的副本数:

    kubectl scale deployment -n kube-system ovn-central --replicas=3
    kubectl rollout status deployment/ovn-central -n kube-system
    
    • 1
    • 2
  • 相关阅读:
    基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传
    List 接口
    回归算法详解
    面向对象设计有六大原则
    Oracle数据库 sql优化
    MATLAB选择结构之if语句
    递归和递推
    pycharm debug调试点击结束断点报错KeyboardInterrupt
    QuantLib学习笔记——看看几何布朗运动有没有股票走势的感觉
    20天零基础自学Python | Day8 String字符串
  • 原文地址:https://blog.csdn.net/qq_21127151/article/details/128178798