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

时间:2019-03-12 14:29:55

标签: cluster-computing aerospike

我有一个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
        }
}

1 个答案:

答案 0 :(得分:1)

某些差异是由于原始迁移/重新平衡设计中的问题所致,Aerospike 3.13中的协议更改中已解决。在3.13中更改协议之前,运行replication-factor 2时,操作员必须一次升级一个节点,然后等待迁移完成。

Aerospike的另一个差异是避免在迁移过程中过多计算master-objects和副本对象(即prole-objects)。同样在3.13中,我们为non-replica-objects添加了一个统计信息,这些统计信息是当前不充当主数据库或副本数据库的对象。这些是(a)具有入站迁移并最终将充当副本的分区上的对象,或者(b)这些是分区上不参与的对象,并且在迁移终止后将被删除。

在3.13之前,类型(a)的non-replica-object将减少master-objectsprole-objects的计数。这是因为在更改协议之前,当分区返回以前是主分区的分区时,即使它没有离开分区时发生的新写操作,分区也会立即恢复为主分区。这不是最佳行为,但不会丢失数据,因为我们将解决其他节点上non-replica-objects中丢失的记录。协议更改后,返回的“主”分区在收到其他节点的所有迁移之前不会恢复为“主”分区。

在3.13之前,类型(b)的non-replica-objects将立即下降并减少prole-objects的计数。这会使节点离开时写入的记录replication-factor减少1(例如replication-factor 2暂时变为replication-factor 1)。这也是在继续升级下一个节点之前等待迁移完成很重要的原因。协议更改后(除非仅在内存中运行),不再需要在节点升级之间等待迁移完成,因为不会删除临时“子集分区”,这可以防止记录的replication-factor减少(实际上,使用新协议,在迁移期间通常有replication-factor +一条记录的1个副本。