
Hallo, wir haben 3 Knoten von SQL Server 2014 Standard Edition, einen davon als primären Knoten und den anderen als Replikation des primären Knotens mithilfe der Transaktionsreplikationsdatenbank.
Wir möchten die anderen beiden Knoten für Lesevorgänge verwenden und die Belastung des primären Knotens reduzieren.
Wie können wir in einem Load Balancer wie HA Proxy die Konfiguration so konfigurieren, dass Lese- und Schreibvorgänge getrennt werden und nur Lesevorgänge an Knoten 2 und 3 gesendet werden? Oder sollten wir einen anderen Load Balancer verwenden, der dies zulässt?
Antwort1
Wie können wir in einem Load Balancer wie HA Proxy die Konfiguration so konfigurieren, dass Lese- und Schreibvorgänge getrennt werden und nur Lesevorgänge an Knoten 2 und 3 gesendet werden?
Überhaupt nicht. Ein Load Balancer weiß nicht, was bei einer SQL Server-Verbindung passiert, und kann nicht logisch verstehen, was als Nur-Lesen, Nur-Schreiben oder gemischt (was ein Schreiben ist) betrachtet werden kann und was nicht. Dies gilt insbesondere, da der Load Balancer nicht in die Zukunft schauen kann. Ich kann mich mit dem SQL Server verbinden, eine Transaktion starten, einen Lesevorgang ausführen UND DANN EINEN SCHREIBVORGANG STARTEN. Woher soll ich wissen, dass ich schreiben möchte, wenn ich mich für den Load Balancer entscheide? Es gibt keine logische Möglichkeit, dies zu handhaben, ohne in die Zukunft zu schauen.
Normalerweise geschieht dies, indem auf Anwendungsebene verschiedene Verbindungen eingerichtet werden und die Anwendung entscheidet, welche davon verwendet wird. Schließlich würde man annehmen, dass die Programmierer klug genug sind, um zu wissen, ob sie eine Verbindung nur zum Lesen oder vielleicht zu einem späteren Zeitpunkt tatsächlich zum Schreiben über dieselbe Verbindung/Transaktion verwenden möchten.