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 となっています。これはホスト名から自動導出されたフォールバック値です。
以上、現場からお届けしました。
