すべての記事

Getting Started

CICDoo とは はじめに: オンボーディングウィザード ダッシュボードとインフラマップ

Concepts

本番、ステージング、開発の各ステージ ドメイン、サブドメイン、SSL Odoo のバージョンとエディション(Community と Enterprise) ワークスペースとチームでの共同作業

Servers

サーバーの追加 サーバーのドメインと DNS ロードバランサーを使う サーバーの操作: デプロイ、ログ、チャート

Projects & Git

プロジェクトの作成 GitHub の接続 GitLab の接続 ブランチとインスタンス プロジェクトのタグ付けと絞り込み アプリノードによる高可用性

Instances & Console

インスタンスの作成 インスタンスの再起動、停止、削除 ステージ間でのブランチのマージ Web IDE とリモートアクセス インスタンス設定の説明 デプロイとジョブキュー

Agent Tasks

エージェントタスクとは エージェントタスクの設定 タスクの実行と結果の確認 エージェント時間と追加購入

Monitoring & Backups

インスタンスのモニタリング バックアップと復元 アラート通知(メールと SMS)

Workspaces & Permissions

ワークスペースメンバーの招待 メンバーの権限とリソースへのアクセス メンバーがリソースを表示または使用できない

Account & Security

二要素認証(2FA) プロフィールと連携の設定 パスワードとアカウントの復旧

Billing & Plans

プランと料金 アップグレードとサブスクリプションの管理 プロジェクトのサブスクリプションが未払いの場合 チャネルパートナープログラム

Support & Tickets

サポートチケットの作成 CICDoo チームのサポートを受ける

Troubleshooting

トラブルシューティング: サーバーを接続できない トラブルシューティング: デプロイが失敗した トラブルシューティング: リポジトリ移動後に git push が 403 で失敗する トラブルシューティング: インスタンスが停止している、または遅い トラブルシューティング: ドメインまたは SSL の問題

プロジェクトと Git

アプリノードによる高可用性

データベースを実行するプライマリプロジェクトと、それを提供するアプリノードで、1 つの本番 Odoo データベースを複数のサーバーで動かす方法を説明します。

仕組み

高可用性を使うと、1 つの Odoo データベースの本番環境を複数のサーバーで同時に動かせます。あるサーバーが応答しなくなると、訪問者はほかのサーバーに振り向けられます。

クラスターは、同じコードを実行するプロジェクトで構成されます:

  • プライマリ: 本番インスタンスが Odoo とデータベースを実行するプロジェクトです。そのデータベースはアプリノードにだけ公開され、それ以外には公開されません。
  • アプリノード: それぞれ別の本番サーバー上にあるほかのプロジェクトで、本番インスタンスは Odoo だけを実行し、プライマリのデータベースを使います。

訪問者はプライマリのアドレスを使います。CICDoo はそのアドレスをプライマリと応答しているすべてのアプリノードに向け、数分ごとに各ノードを確認します。応答しなくなったノードは、回復するまでアドレスから外されます。

データベース自体は引き続き 1 台のサーバー、つまりプライマリのサーバーで動きます。アプリノードは Odoo 側を冗長化するものです。プライマリのサーバーが停止すると、サイトも一緒に停止します。

始める前に

  • 同じコード: クラスター内のすべてのプロジェクトは、同じリポジトリ、デフォルトブランチ、Odoo のバージョン、エディションを使う必要があります。Time Machine がオンの場合は、固定されたコミットも一致している必要があります。
  • 別々のサーバー: 各アプリノードには、プライマリやほかのノードとは異なる、専用の本番サーバーが必要です。
  • Cloudflare プロキシ: ノード間でトラフィックを分散する機能は、現在 Cloudflare プロキシが有効なサーバーで動作します。アプリノードが返すすべてのページがプライマリのデータベースと通信するため、同じリージョンのサーバーを使ってください。
  • 共有ファイルストア: クラスター内のすべてのサーバーは、Odoo のファイルストア用に同じ共有ストレージをマウントする必要があります。これがないと、あるノード経由でアップロードした添付ファイルがほかのノードにはなく、別のノードにたどり着いた訪問者はログアウトされます。設定に手助けが必要な場合はサポートにお問い合わせください。
  • データベース接続: 各アプリノードは、プライマリのデータベースに独自の接続を開きます。ノードを追加するにつれて、プライマリの本番インスタンスのコンソールにある 設定 タブの PostgreSQL 設定 で max_connections を引き上げてください。

高可用性の設定は、プロジェクト設定 の 詳細設定 タブにある 高可用性 カードにあります。プロジェクトの設定を変更する権限が必要です。

プライマリを設定する

データベースを実行するプロジェクトを開き、プロジェクト設定 > 詳細設定 に移動して、高可用性 で 役割 を プライマリ(アプリ + データベース) に設定します。適用 をクリックして確定します。

本番インスタンスが再起動します。再起動後、そのデータベースはクラスターのアプリノードからの接続を受け付けます。サーバー同士がプライベートネットワークを共有していない限り、サーバー間の接続は暗号化されます。

本番インスタンスは、同梱の専用データベースを使う必要があります。本番インスタンスが外部データベースを指しているプロジェクトは、プライマリになれません。

アプリノードを追加する

通常どおりノード用のプロジェクトを作成します。同じリポジトリとデフォルトブランチ、同じバージョンとエディション、そして専用の本番サーバーを使います。そのプロジェクトにあるステージングと開発のインスタンスはすべて削除してください。アプリノードは本番だけを実行し、ステージングと開発のブランチはプライマリのプロジェクトに置きます。

次に、ノードの プロジェクト設定 > 詳細設定 を開き、役割 を アプリノード(プライマリのデータベースを使用) に設定し、データベースの提供元 でプライマリを選んで、適用 をクリックして確定します。選択肢に表示されるのは、同じワークスペースにあり同じコードを実行しているプライマリだけです。

ノードはすぐには起動しません。まずプライマリのサーバーがノードを許可する必要があり、これは次回の確認時に行われ、通常は 5 分以内です。それまでカードには "プライマリがこのノードを許可するのを待っています。" と表示され、許可されるとすぐにノードが自動で起動します。ノードが応答し始めて数分後に、訪問者を受け付け始めます。

プライマリでは、高可用性 カードにアプリノードの一覧と、データベースサーバーが現在のアクセスリストを適用済みかどうかが表示されます。

アプリノードで変わること

  • 本番インスタンスには専用のデータベースがありません。データベースの設定は CICDoo が管理し、インスタンスの Odoo 設定では変更できません。
  • スケジュールされたジョブ(Odoo の cron)はプライマリでのみ実行されます。
  • バックアップはプライマリで取得されます。クラスターのデータベースのバックアップと復元は、プライマリのプロジェクトから行ってください。
  • アプリノードのブランチにプッシュしても、それだけでは何も起きません。クラスターはプライマリから更新されます。

更新をデプロイする

いつもどおりプライマリのブランチにプッシュします。すると CICDoo がクラスター全体を順番に更新します:

  1. 各アプリノードを停止します。
  2. ほかのサーバーがデータベースを使っていない状態で、モジュールのアップグレードも含めてプライマリを更新します。
  3. 新しいコードで各アプリノードを再び起動します。

各ステップは、それが実行されるインスタンスの キュー タブで確認できます。プライマリの更新が失敗すると、アプリノードは再起動されず、そのキューのエントリに理由が表示されます。問題を修正して、もう一度デプロイしてください。

モジュールのアップグレードにはデータベースを占有する必要があるため、単一のインスタンスの場合と同じく、プライマリの更新中はサイトを利用できません。

クラスターから外れる

アプリノードを外すには、その 役割 を スタンドアロン(独自のデータベース) に戻し、適用 をクリックします。ノード自身のデータベースにはクラスターのデータがないため、本番インスタンスは停止します。再び起動する前に、バックアップを復元してください。

アプリノードが残っている間は、プライマリを変更できません。先にノードを外してください。

トラブルシューティング

  • ノードが許可を待ち続ける: プライマリの本番インスタンスが実行中で、そのサーバーがオンラインであることを確認してください。プライマリになった後に一度再起動しないと、どのノードも許可されません。
  • ノードは起動するが Odoo が立ち上がらない: ノードのログを開いてください。プライマリのデータベースが初期化されていないというメッセージがあれば、プライマリが最初の起動をまだ終えていません。
  • アップロードやログインがノード間で訪問者についてこない: サーバーがファイルストアを共有していません。上の "始める前に" を参照してください。

インスタンスとブランチの対応については ブランチとインスタンス を、別の機能であるサーバー単位のロードバランサー設定については ロードバランサーを使う を参照してください。

まだ解決しませんか?アプリからチケットを作成するか、エンジニアに相談してください。