Es gibt mehrere Möglichkeiten Mastodon Sidekiq zu erweitern.
- erhöhen der Threads für alle Warteschlangen
- aufteilen auf verschiedene Warteschlangen
- mehrere Warteschlangen zusammenfassen
- jede Warteschlange einzeln ansteuern
Ein Sidekiq-Prozess für alle Warteschlangen (Standard)
Diese Methode ist die einfachste, dabei müsst ihr die /etc/systemd/system/mastodon-sidekiq.service
nur an zwei Stellen anpassen:
Environment="DB_POOL=FOO"
...
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -q default -c FOO
Die zwei FOO
müssen durch die Anzahl der Threads ersetzt werden, standardmäßig sind hier 25 ausgewählt.
Wichtig: Vergewissere dich, dass dein PostgreSQL-Server genügend Datenbankverbindungen zulässt.
Es muss eine für jeden der Sidekiq-Threads + Puma-Threads geben. Es ist ratsam, https://<yourserver.tld>/pghero/connections
zu überprüfen und die aktuelle Anzahl der Verbindungen mit der maximalen Anzahl der Verbindungen in der PostgreSQL-Konfiguration zu vergleichen.
Die PostgreSQL-Konfiguration findet ihr unter /etc/postgresql/15/main/postgresql.conf
(versionsnummer im Pfad beachten) unter der Variable max_connections
Für mehr Informationen zu PostgreSQL, schaut euch bitte die Dokumentation an.
Mehrere Sidekiq-Prozesse für die Warteschlangen
Wichtig: Die scheduler
-Warteschlange darf niemals mehrfach ausgeführt werden!!
Die Beschreibung der einzelnen Warteschlangen findet ihr in der Mastodon Dokumentation.
Es gibt auch die Möglichkeit, die Warteschlangen auf mehrere Prozesse aufzuteilen. Dazu kopiert ihr am besten die mastodon-sidekiq.service
und passt die entsprechenden Variablen an.
cp /etc/systemd/system/mastodon-sidekiq.service /etc/systemd/system/mastodon-sidekiq-two.service
und passt in der xxx Folgendes an:
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -q default -q push -q mailer -q pull -q ingress -c 25
Damit habt ihr für alle Warteschlangen, außer die scheduler
-Warteschlange, einen zweiten Prozess erstellt.
ladet die neue config mit:
systemctl daemon-reload
und aktiviert sie mit:
systemctl enable --now mastodon-sidekiq-two.service
Ein Sidekiq-Prozess für jede einzelne Warteschlange
Nach dem obigen Vorgehen könnt ihr auch jede Warteschlange einen eigenen Prozess zuweisen:
Am einfachsten kopiert ihr die mastodon-sidekiq.service
dafür mehrere male und benennt sie folgendermaßen:
- mastodon-sidekiq-default.service
- mastodon-sidekiq-mailers.service
- mastodon-sidekiq-pushpull.service
- mastodon-sidekiq-scheduler.service
- mastodon-sidekiq-ingress.service
Dann passt ihr wie oben jede Einzelne entsprechend an, z.B. für die mastodon-sidekiq-mailers.service
:
Description=mastodon-sidekiq-mailers
...
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -q mailer -c 25
ladet die neue config mit:
systemctl daemon-reload
deaktiviert die mastodon-sidekiq.service sie mit:
systemctl disable --now mastodon-sidekiq.service
und aktiviert alle eben Erstellten mit:
systemctl enable --now mastodon-sidekiq-default.service
systemctl enable --now mastodon-sidekiq-mailers.service
systemctl enable --now mastodon-sidekiq-pushpull.service
systemctl enable --now mastodon-sidekiq-scheduler.service
systemctl enable --now mastodon-sidekiq-ingress.service
Mehrere Prozesse für eine Warteschlange
In der Mastodon-Dokumentation wird das zwar nicht erwähnt, aber du kannst auch mehrere Prozesse für eine einzige Warteschlange laufen lassen.
Dafür erstellst du nach obigen Schema einfach mehrere Servicedateien z.B.:
- mastodon-sidekiq-ingress-1.service
- mastodon-sidekiq-ingress-2.service
- mastodon-sidekiq-ingress-3.service
- mastodon-sidekiq-ingress-4.service
Alle diese Kopien werden dann parallel gestartet und arbeiten an der gleichen Warteschlange.