Cluster, cluster, starte dich

Die Kombination Apache + ein Mongrel-Cluster hintendran hilft in Punkto Skalierbarkeit von Rails-Applikationen schnell und effektiv weiter. Die Frage ist nur, wie und wo läuft welche Konfiguration und wo muss ich die nochmals starten? Ich habe mir hier jetzt ersteinmal das Folgende angewöhnt, bis ich wieder etwas besseres kennenlerne :):

1. Jede Rails-Applikation bekommt ihren eigenen Mongrel-Cluster. Die Konfiguration dazu liegt einfach im Config-Verzeichnis der Rails-Applikation, also z.B. sowas wie /var/webapps/mywebapp/config und dort dann als mongrel_cluster.yml. In diesem YAML-File steht dann die Konfig des Clusters, also z.B.

cwd: /var/webapps/mywebapp
log_file: log/mongrel_mywebapp.log
port: 4000
environment: production
pid_file: log/mongrel_mywebapp.pid
servers: 3
address: 127.0.0.1

In diesem Fall werden also 3 Server auf Port 4000 – 4002 konfiguriert.

2. Dann muss man dem Apachen als Türsteher noch den neuen Cluster bekannt machen. In meiner Umgebung gebe ich ihm diese Information durch einen Eintrag im conf.d-Verzeichnis und nenne das Ganze proxy_mywebapp.conf mit folgendem Inhalt

<Proxy balancer://mywebapp_cluster>
BalancerMember http://localhost:4000
BalancerMember http://localhost:4001
BalancerMember http://localhost:4002
</Proxy>

3. In der Config des Virtual Hosts spreche ich dann diesen Proxy an durch

# Redirect all non-static requests to cluster
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mywebapp_cluster%{REQUEST_URI} [P,QSA,L]

4. Damit ich bei einem Neustart eines Clusters nicht jedes Mal bis in die ganzen Unterverzeichnisse absteigen muss, liegen alle Cluster-Konfigs als Symlink nochmals in /etc/mongrel_cluster. Das Starten und Stoppen eines Clusters geht damit recht einfach durch

mongrel_rails cluster::start -C mywebapp_cluster.yml

5. SSL-Support nicht vergessen, wie in einem früheren Artikel hier in der Schmiede beschrieben.

6. Um nun alle Mongrel-Cluster beim neustarten des Rootservers ebenfalls zu starten, kann man noch das Init-Skript des Clusters nutzen. Wie das geht beschreibt Austin Godber auf seiner Wiki-Seite bei Rubyforge Using Mongrel Custer.

Keine Kommentare mehr möglich.