これは何か
1つのサーバーで2つのmastodonインスタンスを動かそうとして苦労した話と動かすための方法
はじめにやったこと
1つのpostgres, 1つのredisで2つのmastodonインスタンスを動かそうとした。
postgresはDBとユーザー情報を分け、redisはコメントアウトされていたDBの設定を有効にしてDB0とDB1で分けた
起こった問題
起動するものの、streamingにおいて2つのPost, LocalTimeline, 通知が混ざった
リロードするとデータは正しいものが表示されるのでstreaming/index.jsのバグと踏んで確認した
streaming/index.jsの挙動とバグっぽいなにか
streaming/index.jsは認証時にpostgresを参照し、データ自体はredisのみを参照しているようだった。
redisClientの設定で、DBの指定がされていないことを確認したので少なくともここがバグ1つめ。
DBを指定したものの、状況は改善しなかった。
実際詳しく検証すればおそらく変更したほうに古いほうからの流入は無くなる結果が得られたかもしれないが確認はしていない。
想定
streamingではなく、メインのAPIのほうがredisに投げ込む際に無条件でredisのDB0を参照していると考えた。ここは未確認なので完全にカンであてているだけ。
解決策
さすがにhostやportは有効だとおもったので、redisを別で立ててportをずらした。
結果無事2つのインスタンスが1つのサーバーで動いた。
結局何すればいいの?
- postgresはDB分割で1つのDBをつかっていい
- redisはインスタンスごとに立てる必要がある
環境
commit 5ce8a1811abbb304a6cf92616a9db4fb3cac89ee
2017/04/19 の夜22時くらいにpullしたもの
追記2017/04/22
直しました。本家にはプルリク送ってるとこですが急ぎで欲しい人はどうぞ。