代码之家  ›  专栏  ›  技术社区  ›  Daniel Cukier

向群集添加新节点时Aerospike丢失数据

  •  0
  • Daniel Cukier  · 技术社区  · 7 年前

    我有一个Aerospike(3.11.1.1)集群,有6个节点。当我尝试添加一个新节点时,有时一些对象在集群迁移数据时“暂时”丢失。迁移完成后,丢失的数据将返回。这是虫子还是我做错了什么?如何避免

    注意,在进行迁移时,主对象计数低于迁移完成后的实际最终对象计数

    主副本计数 之前 正在完成迁移:

    Master and replica count before finishing migrations

    主副本计数 之后 正在完成迁移:

    Master and replica count after finishing migrations

    我的aerospike.conf公司:

    service {
        user root
        group root
        paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1.
            paxos-recovery-policy auto-reset-master
        pidfile /var/run/aerospike/asd.pid
        service-threads 32
        transaction-queues 32
        transaction-threads-per-queue 4
            batch-index-threads 40
        proto-fd-max 15000
            batch-max-requests 30000
            replication-fire-and-forget true
    }
    
    logging {
        # Log file must be an absolute path.
        file /var/log/aerospike/aerospike.log {
            context any info
        }
    }
    
    network {
        service {
            #address any
            port 3000
        }
    
        heartbeat {
                    mode mesh
                    mesh-seed-address-port 10.240.0.32 3002
                    mesh-seed-address-port 10.240.0.33 3002
                    port 3002
    
            interval 150
            timeout 20
        }
    
        fabric {
            port 3001
        }
    
        info {
            port 3003
        }
    }
    
    namespace mynamespace {
        replication-factor 2
        memory-size 1500M
        default-ttl 0 # 30 days, use 0 to never expire/evict.
            ldt-enabled true
            write-commit-level-override master
    
        storage-engine device {
              file /data/aerospike.dat
              #device /dev/sdb
              write-block-size 1M
              filesize 280G
            }
    }
    
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   kporter    7 年前

    其中一些差异是由于原始迁移/再平衡设计中的一个问题造成的,并在中的协议更改中得到了解决 Aerospike 3.13 . 在3.13中更改协议之前,运行时 replication-factor 2.运营商必须一次升级一个节点,然后等待迁移完成。

    额外的差异是避免过多计数 master-objects 和复制对象(即。 prole-objects )在迁移过程中。同样在3.13中,我们为 non-replica-objects 它们是当前不作为主对象或副本的对象。这些是(a)具有入站迁移并最终将作为副本的分区上的对象,或者(b)这些是不参与的分区上的对象,并且在该分区的迁移终止时将被丢弃。

    在3.13之前, non-replica-object 类型(a)将减少两者的计数 主对象 prole对象 . 这是因为在协议更改之前,当一个分区返回以前的主分区时,它会立即恢复为主分区,即使它没有在不在时发生的新写操作。这不是最佳行为,但不会丢失数据,因为我们将从 非副本对象 在其他节点上。在协议更改之后,返回的“主”分区将不会恢复为“主”分区,直到它接收到来自其他节点的所有迁移。

    在3.13之前, 非副本对象 类型(b)的将立即下降,并将减少 prole对象 . 这会导致 复制因子 当一个节点不在时写入的记录的数量减少一(例如。 replication-factor 2 暂时变成 replication-factor 1 ). 这也是在继续升级下一个节点之前等待迁移完成很重要的原因。协议更改后(除非仅在内存中运行),不再需要等待节点升级之间的迁移完成,因为不会删除临时“子集分区”,这会阻止记录的更新 复制因子 从减少(实际上,使用新协议,在迁移过程中 复制因子 +1份记录)。

    推荐文章