複数インスタンス向けのディスコース同期

マスターサーバーがあり、100〜200 以上のスレーブインスタンスを運用する予定です。スレーブインスタンスはオンライン/オフライン状態となり、ユーザーに利用されますが、オフライン状態のインスタンスがオンラインになると、競合を起こさずにマスターサーバーと同期し、最新のデータにすべて更新される必要があります。Discourse は頻繁に自身を更新するため、コード変更を加えてインスタンスが破損することを避けたいと考えています。

PostgreSQL をある程度調整することを検討しています。他のファイル関連のデータは Syncthing を使って同期できますが、PostgreSQL データの更新については懸念があります。マスターデータを直接同期すると、オフラインユーザーが実施した作業が同期後に失われてしまうからです。

データベース内の全テーブルの自動インクリメントシーケンスを UUID に変更することを試してみようと考えています。

これに対する簡単な解決策は存在しますか?

Discourse はこのようなアプリケーション向けに設計されていません。Discourse を壊すことなく、双方向の PostgreSQL 同期を機能させることは極めて困難です。

これを変更するには、Discourse のコードに大幅な変更が必要です。

スレーブをリードオンリーにし、PostgreSQL の同期を一方向にすれば、実現できる可能性はあります…しかし、それは困難を伴います。

「いいね!」 9

こんにちは。私も同様の利用を計画しています。Discourseサイトを2つマージする方法についての記事を見つけました。マージ手順を自動化できるなら、マスターサーバーとスレーブインスタンス間でデータベースを常にマージするcronジョブを設定できるかもしれません。