In continuation to my first post: http://xpagesera.blogspot.in/2013/03/inotes-deployment-in-ha-mode-with.html
In the last post, we tried setting up the Apache Reverse Proxy with Multiple Domino Clusters. Last week, we successfully implemented Apache Reverse Proxy in a unique way:
Cluster size: 7 servers - 6 Mail Servers and 1 Admin Server. This setup ensures that all password changes are immediately available to all Servers.
User's Mail file is available on either Server 1, 3, 5 OR Server 2, 4, 6. In this configuration 4 servers are in DC and 2 servers in DR. We want all traffic to land on Server 1 - 4 (DC). In case none of the DC Servers are available, then it should redirect request to Server 5, 6 (DR).
Instead of relying on the Domino Cluster Information, we have written Rules in Apache httpd.conf file to determine which Load Balancer Group a particular request should be redirected to.
First, the formula used for Apache field in iNotes Web Redirect database:
nodecookievalue:= @Name([CN];@NameLookup([NoUpdate];@UserName;"MailServer"));
clustercookievalue:=@DbLookup("":"";@Subset(@DbName;1):"names.nsf";"($ServersLookup)";nodecookievalue;"clustername");
nodecookie:=@SetHTTPHeader("Set-Cookie";"inotesses="+@LowerCase(nodecookievalue));
@Success
This field will write Cookie values inotesses: Mail Server Name in lowercase.
Second, Check if below modules are present & loaded in Apache Reverse Proxy
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
<VirtualHost *:443>
ServerName webmail.demo.com
ProxyRequests off
SSLEngine On
SSLProxyEngine On
RewriteEngine On
SSLCertificateFile /etc/apache2/ssl/webmail.crt
SSLCertificateKeyFile /etc/apache2/ssl/webmail.key
SSLCertificateChainFile /etc/apache2/ssl/chain.crt
ProxyPreserveHost On
<Proxy balancer://Cluster1/>
# loadfactor is added to ensure equal requests are sent to server01 and server02, while server03 will have lowest priority.
BalancerMember https://server01.demo.com:443/ route=server01 loadfactor=50
BalancerMember https://server03.demo.com:443/ route=server03 loadfactor=50
BalancerMember https://server05.demo.com:443/ route=server03 loadfactor=1
ProxySet lbmethod=byrequests
</Proxy>
<Proxy balancer://Cluster2/>
BalancerMember https://server02.demo.com:443/ route=server02 loadfactor=50
BalancerMember https://server04.demo.com:443/ route=server04 loadfactor=50
BalancerMember https://server06.demo.com:443/ route=server03 loadfactor=1
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://Cluster1/ stickysession=inotesses nofailover=Off
ProxyPassReverse / https://server01.demo.com/
ProxyPassReverse / https://server03.demo.com/
ProxyPass / balancer://Cluster2/ stickysession=inotesses nofailover=Off
ProxyPassReverse / https://server02.demo.com/
ProxyPassReverse / https://server04.demo.com/
RewriteCond %{HTTP_COOKIE} inotesses=server01 [NC]
RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://Cluster1/$1 [P]
RewriteCond %{HTTP_COOKIE} inotesses=server02 [NC]
RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://Cluster2/$1 [P]
RewriteCond %{HTTP_COOKIE} inotesses=server03 [NC]
RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://Cluster1/$1 [P]
RewriteCond %{HTTP_COOKIE} inotesses=server04 [NC]
RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://Cluster2/$1 [P]
</VirtualHost>
Now, Stop & start httpd service.