快速重启

在系统运行中,我们经常需要对服务器的操作系统进行升级或更新安全补丁,而在升级或更新之后,我们希望在服务器上运行的数据库可以快速启动,瞬间开始可连接应用,提供服务。如果这时需要很长时间重启数据库,对生产应用会产生负面的影响,降低用户满意度,甚至会影响公司的业务。

Aerospike企业版具有一项功能,使节点可以更快地启动并重新加入集群。拥有超过10亿条记录的节点可以在大约10秒内重新启动(与之相比,没有此企业版功能的需要40分钟以上),这使群集升级和其他各种操作变得更快。

它是如何工作的?

此功能使服务器节点可以使用Linux系统共享内存。服务器节点的主索引以及各种其他关键数据都分配在系统共享内存中,即使服务器进程停止,该共享内存仍将保留。重新启动后,该进程将重新连接到包含索引和其他数据的持久性内存,并快速重建所需的内部状态并重新加入其集群,它不需要从存储驱动器中读取所有记录数据来重建索引。

怎样才能做到这一点?

您不需要做任何事。对于配置了闪存或数据在索引中的命名空间,该节点的默认行为是始终尝试快速重启,因此只需正常启动即可:

$ sudo systemctl start aerospike

您可以检查日志以查看节点是否对命名空间执行快速重启(也称为WARM重新启动).

INFO (namespace): (namespace_ee.c:361) {test} beginning warm restart

什么时候快速重启不会发生?

在某些情况下,服务器节点将尝试快速重启,但却无法这样做,并会切换到“冷重启”,在这种情况下,Aerospike将从存储驱动器读取所有记录数据来重建索引:

命名空间被配置为“数据在内存中”。由于记录数据未存储在系统共享内存中,因此必须读取所有记录数据才能将数据恢复到内存中。但是,从企业版本3.15.1.3开始,不会重建索引,避免了在这种情况下从存储中恢复已删除记录的情况(当节点不在群集中时未持久删除的记录将被带回来)。如果内存中数据为true(data-in-memory true),在3.15.1.3之前的服务器版本上:

INFO (namespace): (namespace_ee.c:162) {test} can't warm restart if data-in-memory
INFO (namespace): (namespace_ee.c:243) {test} beginning COLD start`

从3.15.1.3和更高版本的服务器开始:

INFO (namespace): (namespace_ee.c:360) {test} beginning cool restart

更改partition-tree-sprigs的值,例如原始值512更改为1024:

WARNING (namespace): (namespace_ee.c:495) {nsSSD} persistent memorypartition-tree-sprigs 512 doesn't match config 1024
  • 服务器节点宕机时,存储驱动器会被抹除。这种状况只有偶尔会发生,例如修复具有物理故障的驱动器时。显然,如果记录数据被删除,则持久索引就无效了。幸运的是,在这种情况下“冷重启”会很快——因为没有要读取的数据!
  • 先前的关机可能有问题。如果服务器节点意外宕机,我们不确定持久索引是否可靠且与存储的数据一致,所以最好重建索引。
  • 机器已重启。系统共享内存可以在服务器进程停止但不重新启动计算机的情况下保存下来。
  • 在3.13.0之前的版本中,如果配置中命名空间的顺序已更改。
  • 如果节点确实切换到“冷重启”,则日志文件将提及它,并会列出切换的原因。

请注意,在定义二级索引时,节点的启动时间会大大减慢,具体取决于二级索引的数量及其大小。如果命名空间满足快速重新启动的条件但建立了二级索引,则在快速重新启动(仅主索引)之后,命名空间将必须重建定义的每个二级索引,这将需要从持久性存储中查找记录数据.

有关冷重启的详细信息,请参见此处

我可以强制“冷重启”吗?

是的,尽管不是必需的,但是您可以使用以下命令手动强制“冷启动”:

sudo /etc/init.d/aerospike coldstart

我可以监视Aerospike使用的系统共享内存吗?

您可以使用以下命令查看系统的共享内存块:

$ sudo ipcs -m

列出的所有带有键开头的块:

0xae...

ae(如Aerospike中一样)是Aerospike共享内存块。对于每个命名空间,一个或多个1GB块。例如,对于具有两个命名空间的节点,您可能会看到:

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0xae0011000          root       666        10737418241                      
0xae00210032769      root       666        10737418241                      
...

快速重启内存中的数据命名空间

如果您的“数据在内存中”(data-in-memory )命名空间是仅包含数字数据(整数或双精度)的单列(bin)命名空间,则它也可以利用快速重启功能。

为此,将“数据在索引中”(data-in-index)配置添加到您的命名空间节中:

namespace <namespace-name> {
...
    single-bin true
    data-in-index true
...
}

然后,只需重新启动Aerospike,就应该进行快速重新启动!

如果数据库中存在非数字数据类型,在减少快速重启索引的同时,我们将检查每个记录的确是整数或者双精度数字数据类型。如果有记录不是数字数据类型,Aerospike进程将退出并显示一条消息。成功重新启动后,任何尝试写入非数字数据的尝试都将被拒绝,错误代码为12

英文版介绍请看 https://www.aerospike.com/docs/operations/manage/aerospike/fast_start/