Nextcloudサーバを冗長構成する際に気を付ける点


Nextcloud で Webサーバ (=Nextcloud サーバー ) を可用性や負荷分散の考慮して冗長構成にすることが必要となった場合に気を付ける点を簡単にまとめました。

データベースの分離

Nextcloud は内部でユーザー情報、ファイルメタ情報、各種設定情報など、様々な情報をデータベースで管理しています。複数台の Nextcloud サーバーで同じデータベースの情報を参照できる必要があります。
データベースを別サーバーに構築して、これを Nextcloud サーバーから参照するように設定するとよいでしょう。
【Configuration Parameters - Default Parameters】dbhost パラメータ

セッション情報の共有

Nextcloud は PHP で動作する Web アプリケーションです。複数台の Nextcloud サーバーで全てのセッション情報を共有しておく必要があります。
データベースサーバーに Redis または memcached といった KVS を導入し、ここに保管するように設定するとよいでしょう。
【Qiita - PHPセッションをPhpRedisに保存する】

Nextcloud ファイルロック情報の共有

Nextcloud では ファイルロック情報を管理しています。この情報もすべての Nextcloud サーバーで共有しておく必要があります。
この保管先も、先ほどの KVS に保管するように設定するとよいでしょう。
【Configuration Parameters - Memory caching backend configuration】

Nextcloud データディレクトリ(保管ファイル)

Nextcloud に保管されるファイルの実体をすべての Nextcloud サーバーで参照できるように共有しておく必要があります。
別途 NFS を準備し、 Nextcloud サーバーからこの NFS をマウント、ここにファイルを保管するように設定するとよいでしょう。
【Configuration Parameters - Default Parameters】datadirectory パラメータ

Nextcloud Config ファイル

Nextcloud の設定ファイルである Config ファイル (=config.php) は、基本的にはすべての Nextcloud サーバーで同じ内容である必要がありますが、管理者の設定変更作業により、まれにこの設定ファイルの内容が変更されることがあります。Nextcloud で設定変更を行ったのに反映されてたりされてなかったり挙動が変になっている場合は、このファイルの内容が Nextcloud サーバー間で異なっている場合があります。

Nextcloud アプリ

Nextcloud は様々なプラグインアプリを追加することができます。プラグインアプリはすべての Nextcloud サーバーで同じものを参照できる必要があります。Nextcloud 画面でアプリを追加した場合、残念ながら追加の処理を行った Nextcloud サーバー以外のサーバーにも自動的にアプリがインストールされることはありません。
冗長構成としている Nextcloud でプラグインアプリを追加する場合は、それぞれの Nextcloud サーバー個別に occ app:install コマンドでインストールするとよいでしょう。