Nextcloud

Nextcloud 33 で新登場: serverid パラメータと Snowflake ID を理解する

1.はじめに

Nextcloud 33 では、config.php に serverid というパラメータが追加されました。WEBサーバを複数台構成している環境では適切な設定が必要です。

この記事では serverid が何であるか、なぜ必要なのか、設定の考え方を整理します。

2.Snowflake ID とは何か

Nextcloud 33 から導入された、データベースの各レコードを一意に識別するための新しいID生成方式です。従来の auto-increment ID から段階的に置き換えられています。

1つのIDに以下のような情報が埋め込まれています:

  • タイムスタンプ
  • シーケンス番号
  • サーバ識別子 (← これが serverid)
  • CLI/WEBコンテキスト (どこからリクエストされたかの情報)

背景情報として、Nextcloud は「ADA(Accelerated Direct Access)エンジン」という大規模なアーキテクチャ改善を進めています。その中核を担うDBシャーディングを実現するための基盤として、Snowflake ID は導入されました。

従来の auto-increment ID から部分的に置き換えられており、auto-increment ID の問題点であった read-after-write 処理の問題が軽減しています。
Nextcloud 33 時点では段階的な導入となっています。

参考: A new data access architecture for Nextcloud: introducing the ADA engine

3.serverid パラメータの概要

Nextcloud 33 より config.php に追加された新しいパラメータです。複数のWEBサーバが同時にIDを生成しても衝突しないよう、どのサーバがIDを生成したかを識別する役割を持ちます。

仕様

  • 設定可能な値は 0〜1023 の整数です
  • デフォルト値は -1(未設定扱い)。この場合 serverid にはホスト名から導出された値が埋め込まれます
  • 一度明示的に設定した値は、別の値に変更すべきではありません

構成別の設定方針

シングル構成(PHP/WEBサーバ1台)の場合には、未設定のままでも通常は問題ありませんが、将来的にWEBサーバを拡張する可能性がある場合には、設定しておくのが無難でしょう。

マルチノード構成(PHP/WEBサーバ複数台)の場合には、各ノードに一意の serverid を割り当てる必要があります。
※Snowflake ID が衝突(競合)した場合には、DBへの書き込みが失敗するリスクがあります

アップグレード時の設定タイミング

Nextcloud 32 から 33へのアップグレードの際に、serverid パラメータは自動設定されません。
マルチノード構成の場合には、”occ upgrade” の実行前に設定することをおすすめ致します。

4.おまけ

Snowflake IDは、oc_jobsテーブルなどに従来の auto-increment ID に置き換わって導入されています。
実際のテーブル内の情報は以下のような内容です。

MariaDB [nextcloud]> select * from oc_jobs limit 1 \G
*************************** 1. row ***************************
                id: 57667190723895297
             class: OCA\FilesReminders\BackgroundJob\CleanUpReminders
          argument: null
          last_run: 1775411701
      last_checked: 1775498101
       reserved_at: 0
execution_duration: 0
     argument_hash: 74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
    time_sensitive: 0
1 row in set (0.000 sec)

この”id”を “occ snowflake:decode” コマンドでデコードすることで Snowflake ID の情報を確認することができます。

occ snowflake:decode 57667190723895297
+--------------------+-------------------------+
| Snowflake ID       | 57667190723895297       |
| Seconds            | 13426689                |
| Milliseconds       | 137                     |
| Created from CLI   | no                      |
| Server ID          | 87                      |
| Sequence ID        | 1                       |
| Creation timestamp | 1772703489.137          |
| Creation date      | 2026-03-05 09:38:09.137 |
+--------------------+-------------------------+

※この環境は serverid を明示的に設定していないため、Server ID が 87 となっています。これはホスト名から自動導出されたフォールバック値です。

以上、現場からお届けしました。