Misskeyサーバーのスケールアウト

サーバーの利用者が増えるにしたがって、サーバーマシンのスペックを強化したり台数を増やして負荷に対応する必要が生じます。この記事ではMisskeyサーバーのスケールアウトに関するTipsを紹介します。

PostgreSQLのレプリケーション

PostgreSQLのレプリケーションを行うと、データベースの負荷を複数のサーバーマシンに分散させることができます レプリケーションについての詳細はPostgreSQLのドキュメントを参照してください。 MisskeyではPostgreSQLのレプリケーションに対応しており、configファイルで以下のように設定します。(一部抜粋)

# レプリケーションを使用する場合は true にします
dbReplications: true

# リードレプリカのリストをここで設定します(いくつでも設定可能)
dbSlaves:
  -
    host: foo
    port: 5432
    db: misskey
    user: xxxxx
    pass: xxxxx
  -
    host: bar
    port: 5432
    db: misskey
    user: xxxxx
    pass: xxxxx

このように設定すると、Misskeyがデータベースに対してreadクエリを発行するとき設定したdbSlavesの中からランダムにreadレプリカ選択してクエリを送信するようになり、データベースの負荷が分散されます。

役割に応じたRedisの分割

Misskeyは以下のように様々な用途でRedisを使用します。

  • ジョブキューの管理
  • レートリミットの管理
  • キャッシュ
  • 通知などの情報の保存
  • グローバルなイベントのPub/Sub

Misskeyでは、これらの用途ごとに異なるRedisサーバーを使用するように設定することができ、負荷を複数のサーバーマシンに分散させることができます。 configファイルで以下のように設定します。(一部抜粋)

redisForPubsub:
  host: foo
  port: 6379
  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
  #pass: example-pass
  #prefix: example-prefix
  #db: 1

redisForJobQueue:
  host: bar
  port: 6379
  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
  #pass: example-pass
  #prefix: example-prefix
  #db: 1

現在設定可能なのはメインのRedisに加えて上記のように「グローバルなイベントのPub/Sub」と「ジョブキューの管理」用のRedisです。

リモートのチャートの無効化

個々のリモートユーザーのアクティビティなどのチャートや個々のリモートサーバーのチャートが必要無い場合、それらの生成を無効にするとパフォーマンスが向上します。 コントロールパネルから、「リモートユーザーのチャートを生成」および「リモートサーバーのチャートを生成」をオフにすることで無効にできます。