Cloudogu Logo

Hallo, wir sind Cloudogu!

Experten für Software-Lifecycle-Management und Prozess­auto­mati­sierung, Förderer von Open-Source-Soft­ware und Entwickler des Cloudogu EcoSystem.

featured image Repository Server Load Balancing und Synchronisation mit SVN
05.12.2023 in Technology

Repository Server Load Balancing und Synchronisation mit SVN


Daniel Huchthausen
Daniel Huchthausen

IT Consultant


Inhaltsverzeichnis

In unserer Supportarbeit der letzten Zeit haben wir gesehen, dass das Thema SVN-Repository-Synchronisation ein aktuelles Thema zu sein scheint. Deshalb wollen wir Ihnen zeigen, wie Sie eine Main-/Worker-Server-Struktur zum Load Balancing implementieren können. Worker-Server werden für Leseoperationen und der Hauptserver für Schreiboperationen verwendet.

Grundlagen

Der Grund, warum es notwendig ist, Lese- und Schreibvorgänge auf verschiedene Server aufzuteilen, ist das Verhalten der Benutzenden. Normalerweise ist es wahrscheinlicher, dass die Benutzenden Lesevorgänge wie Checkouts, Aktualisierungen usw. durchführen als Schreibvorgänge wie Commits oder Änderungen der Revisionseigenschaften. Daher kann die Leistung des Servers gesteigert werden, indem diese beiden Aufgaben auf zwei verschiedene Arten von Servern aufgeteilt werden, nennen wir sie Main- und Worker-Server. Mehrere Worker-Server werden für Lesevorgänge verwendet, während der Main-Server für alle Schreibvorgänge genutzt wird. Um sicherzustellen, dass die Benutzenden die neuesten Versionen von den Worker-Servern lesen, ist es notwendig, die Worker-Server mit dem Main-Server zu synchronisieren. Ein Aufbau von Haupt- und Arbeitsservern könnte wie folgt aussehen:

Synchronisation von Main- und Worker-Server

Seit Version 1.5 unterstützt SVN die Funktion “Write-through proxy”. Sie ermöglicht die Einrichtung eines Main-/Worker-Server-Systems, bei dem der Main-Server mit einem Repository für Lese- und Schreibvorgänge verbunden ist, und mehrere Worker-Server, die nur Lesevorgänge bearbeiten. Die Worker-Server leiten Schreiboperationen an den Main-Server weiter (Proxy). Ein solches System erfordert den “Apache HTTP Server” auf dem Haupt- und den Worker-Server mit mindestens Version 2.2.x und die Worker-Server müssen “mod_proxy” aktiviert haben.

Implementation

Die Implementierung erfordert die Änderung der httpd.conf-Dateien der Main- und Worker-Server. Zur Implementierung des Systems müssen Sie die folgenden Schritte durchführen:

  1. Konfigurieren Sie den Main-Server so, dass er das Repository offenlegt, indem Sie einen neuen Block in die Datei httpd.conf einfügen:

     <lt;Location /svn/project>
        DAV svn
        SVNPath /opt/svn/project (path to the repository on the worker server)
     </Location>
    
  2. Konfigurieren Sie den Worker-Server, indem Sie einen neuen Block in die Datei httpd.conf einfügen:

     <Location /svn/project>
        DAV svn
        SVNPath /opt/svn/project (path to the repository on the worker server)
        SVNMainURI http://*IP-ADDR-OF-MAIN*/svn/project/
     </Location>
    
  3. Konfigurieren Sie den Worker-Server um svnsync zu aktivieren, indem Sie einen weiteren Block in die Datei httpd.conf des Arbeiters einfügen:
     <Location /svn/project-proxy-sync>
        DAV svn
        SVNPath /opt/svn/project (path to the repository on the worker server)
        Order deny,allow
        Deny from all
        Allow from *IP-ADDR-OF-MAIN*
     <Location /svn/project>
    
  4. Aktivieren Sie die ständige Synchronisation des Worker-Repositorys, indem Sie den Main-Repository Hook für svnsync verwenden:
    1. #!/bin/sh REVISION=${2} # Launch (backgrounded) sync jobs for each worker server. svnsync copy-revprops http://*IP-ADDR-OF-WORKER*/svn/project-proxy-sync ${REVISION} &

    2. #!/bin/sh # Launch (backgrounded) sync jobs for each worker server svnsync sync http://*IP-ADDR-OF-WORKER1*/svn/project-proxy-sync &

Die Grundkonfiguration ist damit abgeschlossen. Je nach Bedarf und System können Sie die Konfiguration um Authentifizierung und Autorisierung, die Behandlung von Sperr-/Entsperrungsanfragen und die Behandlung von Verbindungsproblemen während der Synchronisierung oder eines Schreibvorgangs erweitern. In jedem Fall ist es notwendig, zumindest Lesezugriff auf den Worker-Servern und Lese-/Schreibzugriff auf dem Main-Server für alle Benutzenden zu realisieren. Die Authentifizierung muss über alle Server hinweg übereinstimmen und ebenfalls synchronisiert werden. Die Implementierung der Authentifizierung und Autorisierung muss entsprechend Ihrem Authentifizierungssystem durchgeführt werden.