REdis Asynchronous AOF fsync is taking too long

redis.conf中的no-appendfsync-on-rewrite
默認值爲no,表示在重寫AOF文件或RDB文件時阻塞fsync。node

若是重寫AOF或RDB文件時長過長,則在日誌中能夠看到以下信息:
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.redis

嚴重時會致使該節點被判斷爲fail,從而觸發主從切換,建議儘量將配置項「appendfsync」的值設置爲「no」。app

相關源代碼(以REdis-5.0.4爲例):this

void flushAppendOnlyFile(int force) { // aof.c:331
    。。。。。。
   /* Don't fsync if no-appendfsync-on-rewrite
    * is set to yes and there are
    * children doing I/O in the background. */
    // no-appendfsync-on-rewrite值爲yes,
    // 而且存在AOF或RDB進程時,直接返回而不調用fsync。
    if (server.aof_no_fsync_on_rewrite &&
       (server.aof_child_pid != -1 ||
       server.rdb_child_pid != -1))
     return;
    。。。。。。
}

int rewriteAppendOnlyFileBackground() { // aof.c:1532
  。。。。。。
  childpid = fork();
  。。。。。。
  server.aof_child_pid = childpid;
  。。。。。。
}

int rdbSaveBackground( // rdb.c:1282
    char *filename,
    rdbSaveInfo *rsi) {
  。。。。。。
  childpid = fork();
  。。。。。。
  server.rdb_child_pid = childpid;
  。。。。。。
}

  

22301:M 19 Apr 2019 20:49:39.391 * Starting automatic rewriting of AOF on 100% growth
22301:M 19 Apr 2019 20:49:39.520 * Background append only file rewriting started by pid 38549
22301:M 19 Apr 2019 20:49:59.080 * Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
22301:M 19 Apr 2019 20:50:32.008 * Background AOF buffer size: 80 MB
22301:M 19 Apr 2019 20:50:47.406 * AOF rewrite child asks to stop sending diffs.
38549:C 19 Apr 2019 20:50:47.406 * Parent agreed to stop sending diffs. Finalizing AOF...
38549:C 19 Apr 2019 20:50:47.406 * Concatenating 647.71 MB of AOF diff received from parent.
38549:C 19 Apr 2019 20:50:53.097 * SYNC append only file rewrite performed
38549:C 19 Apr 2019 20:50:53.248 * AOF rewrite: 3998 MB of memory used by copy-on-write
22301:M 19 Apr 2019 20:50:53.975 * Background AOF rewrite terminated with success
22301:M 19 Apr 2019 20:50:54.030 * Residual parent diff successfully flushed to the rewritten AOF (69.97 MB)
22301:M 19 Apr 2019 20:50:54.214 * Background AOF rewrite finished successfully
22301:M 19 Apr 2019 20:51:30.085 * Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
22301:M 19 Apr 2019 20:51:54.071 * Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
22301:M 19 Apr 2019 20:52:23.040 * Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
22301:M 19 Apr 2019 20:53:12.043 * Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
22301:M 19 Apr 2019 20:55:06.226 * Marking node 720a9ead7beb61042fd56a873deec6b2cb0daec5 as failing (quorum reached).
22301:M 19 Apr 2019 20:55:06.226 # Cluster state changed: fail
22301:M 19 Apr 2019 20:55:38.186 * Clear FAIL state for node 720a9ead7beb61042fd56a873deec6b2cb0daec5: is reachable again and nobody is serving its slots after some time.
22301:M 19 Apr 2019 20:55:38.186 # Cluster state changed: ok
22301:M 19 Apr 2019 20:55:44.322 * FAIL message received from 252b3bb2f902bc81926c8ae04b6eefa8c3133bd4 about 1d5315824f9ce14f3076ff04c7330590b942efb8
22301:M 19 Apr 2019 20:55:44.322 # Cluster state changed: fail3d

相關文章
相關標籤/搜索