Shopware 6 | Hinzufügen eines Mysql read-only nodes

Hier soll ein kurzer Einblick in ein Database Cluster Usecase den wir vor kurzem hatten. Oftmals ist Mysql gar nicht der Flaschenhals, sondern der Webserver (PHP). Hier lohnt sich auf jeden Fall ein Blick auf die besten CPUs. Dies hat auch bei Digital Ocean einen großen Impact gehabt (greift daher immer zu Dedicated CPUs bei Shopware 6). Mehr zu Mysql im Beitrag …

Problem

Ein Shop mit 30.000 Artikeln und +70.000 Varianten hat beim Export an eine Middleware ziemlich Probleme gemacht. Teilweise liefen die Exporte in Timeouts oder haben den Mysqlserver einfach hops genommen.

Infrastruktur (vorher)

Managed Database von Digital Ocean mit 4 GB RAM / 2vCPU

Monitoring (vorher)

Mysql ist klar der Flaschenhals

Wie man schnell erkennt sind die Antwortzeiten von Mysql nicht gut. Hauptsächlich dafür verantwortlich sind viele reads.

Lösung

Option 1

Lösen könnte man dies nun mit einem stärkeren Mysql Server, das würde allerdings bedeuten das Ihr eventuell nicht „einfach“ wieder downscalen könnt und das es eventuell zu einer Downtime kommt.

Im Fall von Digital Ocean ist der nächstgrößere Server dazu auch noch wesentlich teurerer (die DISK muss hier gleich groß sein – verständlich, aber dann würde ich mir als Kunde wünschen das stärkere VMs auch kleinere Disks mitbringen).

Option 2 (gewählt)

Shopware bringt seit der 6.4.12.0 Version die Option des read only nodes in der .env mit.

Doku

Damit könnt ihr einfach einen weiteren Node von Mysql / Mariadb hinzufügen:

DATABASE_REPLICA_0_URL="mysql://********"

Wichtig: Das müsst Ihr oder Euer Hoster natürlich können.

Digital Ocean

Digital Oceans Managed Databases bringen das mit, rechnet je nach DB Größe und Last mit mindestens 30min bis der read-only steht.

Hinzufügen eines read-only nodes

Die Last hat sich nach dem Upgrade wesentlich besser verteilt, Exporte dauern jetzt „nur noch“ zwei Stunden und 30 Minuten, statt vorher 7-10 Stunden.

Export Dauer um 0:00 Uhr

Info: Interessant ist zu sehen das der Main Mysql Node um 0:00 Uhr gar keine Reads mehr bekommt. Ich bin davon ausgegangen das die Requests per Round-Robin etc. aufgeteilt werden. Eventuell kann ja jemand von Shopware in den Comments was dazu sagen

Main Mysql Server ohne Last zum Exportzeitpunkt

Export Dauer nach hinzufügen des read-only nodes

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.