Matomoを高可用性マルチサーバー環境に設定するには?
デフォルトでは、Matomoはデータベースサーバーとアプリサーバーの1つ(または2つ)だけを使用するように設定されています。これはうまく機能しますが、この単純なセットアップには欠点があります。特に可用性が高くないことです。
Matomoのマルチサーバー設定とは、Matomoを複数のウェブサーバーで実行し、データベースを2つのサーバーに複製することです。こうすることで、ウェブサーバの1台がダウンしたり、データベースサーバの1台がダウンしても、Matomoのサービスは影響を受けません。
マルチサーバー構成は、水平方向に拡張して、より多くのトラフィックや大きなトラフィックのピークを処理するのにも便利です。(現在のサーバーのRAMとCPUを増やすことで垂直方向に拡張することもできますが、Matomoを1つの大きなアプリサーバーで動作させるということは、高い可用性が得られないということです)。
スケーラブルなマルチサーバーの構成図
この図は、スケーラブルなマルチサーバー構成の標準的なセットアップを示しています:
この構成に含まれる要素は以下の通り:
- ロードバランサー
すべての受信トラフィックをフロントエンド・サーバーに転送する。
- フロントエンド・ウェブサーバー
ウェブサーバーとPHPでMatomoを動かす。毎分crontabでcustom-matomo-js:updateとtagmanager:regenerate-released-containersコマンドを実行している。トラッキング+UI+レポートAPIを担当する。NFSはコードベースの保存に使うべきではありません(パフォーマンスのため)。
- アーカイブサーバー
MatomoをPHP上でCLI経由で実行する(ウェブサーバは不要)crontabエントリが設定されている(毎時core:archiveコマンド)レポート処理+スケジュールされたタスクを担当NFSはコードベースの保存に使うべきではありません(パフォーマンスのため)。詳細はよくある質問をご覧ください。
- データベースサーバー
MySQLまたはMariaDBを実行し、すべてのMatomoデータを保存する。マスター-スレーブ(ソース/レプリカ)レプリケーションまたはマスター-マスターレプリケーションとして2台のサーバーをセットアップすることができる。RAIDとSSDディスクを推奨(パフォーマンスのため)NFSはデータの保存に使うべきではありません(パフォーマンスのため)。
この図は、スケーラブルで、マルチサーバー、マルチデータセンター、高可用性(HA)構成の、より複雑なセットアップを示している:
この構成に含まれる要素は以下の通り:
- ロードバランサー
2台の高可用性ロードバランサー(例:F5ロードバランサー、またはフローティングIPベースのロードバランサー)すべての受信トラフィックをフロントエンド・サーバーに転送する。
- フロントエンド・ウェブサーバー
この例では、1つのデータセンターに2台のフロントエンド・サーバーがあり、もう1つのデータセンターに1台のフロントエンドがある。ウェブサーバーとPHPでMatomoを実行毎分crontabを実行するcustom-matomo-js:updateとtagmanager:regenerate-released-containersコマンドを実行している。トラッキング+UI+レポートAPIを担当NFSはコードベースの保存に使うべきではありません(パフォーマンスのため)。詳細はよくある質問をご覧ください。
- 1 x アーカイビング・サーバー
アーカイブサーバーは通常1台で十分です。サーバーに問題が発生しても、簡単に再作成して配備することができます。Matomoサービスへの影響は、アーカイブサーバが利用できない間、新しいレポートが処理されたり、メールレポートが送信されたりすることはありません。MatomoをPHP上でCLI経由で実行する(ウェブサーバは不要)crontabエントリが設定されています。(1時間ごとにcore:archiveコマンドを実行してください)レポート処理+スケジュールされたタスクを担当NFSはコードベースの保存に使うべきではありません(パフォーマンスのため)。よくある質問)
- 2 x データベースサーバー
各データセンターに1台のデータベース・サーバーを設置MySQLまたはMariaDBを実行し、すべてのMatomoデータを保存する。マスター-スレーブ・レプリケーション(ソース/レプリカ)またはマスター-マスター・レプリケーション(HA用)としてセットアップする。効率的なレプリケーションを実現するには、2つのデータセンター間で低レイテンシーが必要である。RAIDとSSDディスクを推奨(パフォーマンスのため)NFSはデータの保存に使うべきではありません(パフォーマンスのため)。
すべてのサーバーに同じコードベースをデプロイする
Matomo を複数のサーバーで動作させる場合、同じコードベースが次のサーバーにデプロイされる必要があります。
こちらをご覧ください:すべてのサーバーに同じコードベースをデプロイするには?
設定ファイルとトラッカーJSファイルの同期
Matomo を複数のサーバで動作させる場合、設定ファイルと tracker js ファイルを同期させる必要があります。参照してください: 設定ファイルとトラッカーJSファイルの同期方法は?
DockerでMatomoを動かす
スケーラブルなマルチサーバ構成を構築する1つの方法は、Dockerを使用することです。出発点として、上記の記事やMatomo Analyticsの公式Dockerプロジェクトを参照してください。Matomo Analyticsの公式Dockerプロジェクトです。.