Differences between revisions 3 and 58 (spanning 55 versions)
Revision 3 as of 2017-12-24 21:27:10
Size: 406
Comment:
Revision 58 as of 2021-03-01 22:47:45
Size: 2573
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

Running a redundant apache server does not require much from apache itself, but rather the underlying filesystem and a proxy in front of it. The filesystem is important, so the website can be shared between the servers. For this we will use [[GlusterFS|GlusterFS]]. PHP sessions will have to be shared between the webservers too. [[Redis|Redis]] will be used for that and finally we will put a proxy in front of apache, which will be a combination of [[Corosync and HA-proxy|Corosync and HA-proxy]].

In this setup we will configure 2 apache servers. None of these will be master/slave/primary/secondary. They will just be running with the same configuration.

 * 192.168.1.54 www (virtual IP-address)
 * 192.168.1.55 www01
 * 192.168.1.56 www02
Line 6: Line 14:
apt-get install apache2 apt-get install apache2 php php-mysql php-redis
Line 9: Line 17:
=== GlusterFS ===
==== Backup ====
Make a backup of `/var/www`
== Filesystem ==

Configure your system as a [[GlusterFS Client|GlusterFS client]], so you have the following in your fstab.
Line 13: Line 21:
cd /var
tar cfvzp www.tar.gz www/
/etc/glusterfs/www.vol /var/www glusterfs defaults,_netdev,rw 0 0
Line 17: Line 24:
==== GlusterFS Client ====
Install the glusterfs client and mount the glusterfs volume.
== PHP Sessions ==
Line 20: Line 26:
==== Restore ====
Restore the backup
Creating a PHP session on one webserver, does not create it on the other. As requests bounces back and forth between the two webservers, this will be a problem for PHP sites. A solution to this is using [[Redis|Redis]] as a storage for the PHP sessions.

In `/etc/php/7.0/apache2/php.ini` and `/etc/php/7.0/cli/php.ini` find the entry `session.save_handler = files` and change it to the following.
Line 23: Line 30:
tar xfvzp www.tar
rm www.tar.gz
session.save_handler = redis
session.save_path = "tcp://redis:6379"
Line 27: Line 34:
Copy the configuration to all webservers and finally restart the services.
{{{
service apache2 restart
}}}
Line 28: Line 39:
{{{
apt-get install glusterfs-client
== Testpage ==
Make a simple webpage, that shows something unique about the system and also creates a PHP-session. Use this to test the setup.

`index.php`
{{{#!highlight php
<?php
        header('Content-Type: text/plain');
        session_start();
        if(!isset($_SESSION['visits']))
                $_SESSION['visits'] = 0;
        $_SESSION['visits']++;
        echo "client: " . $_SERVER['REMOTE_ADDR'] . "\n";
        echo "server: " . $_SERVER['SERVER_ADDR'] . "\n";
        echo "hostname: " . gethostname() . "\n";
        echo "visits: " . $_SESSION['visits'] . "\n";
        echo "cookie: ";
        if (array_key_exists('PHPSESSID', $_COOKIE))
                echo $_COOKIE['PHPSESSID'];
        echo "\n";
?>
Line 31: Line 60:

== References ==

 * https://www.digitalocean.com/community/tutorials/how-to-set-up-a-redis-server-as-a-session-handler-for-php-on-ubuntu-14-04

Apache

Running a redundant apache server does not require much from apache itself, but rather the underlying filesystem and a proxy in front of it. The filesystem is important, so the website can be shared between the servers. For this we will use GlusterFS. PHP sessions will have to be shared between the webservers too. Redis will be used for that and finally we will put a proxy in front of apache, which will be a combination of Corosync and HA-proxy.

In this setup we will configure 2 apache servers. None of these will be master/slave/primary/secondary. They will just be running with the same configuration.

  • 192.168.1.54 www (virtual IP-address)
  • 192.168.1.55 www01
  • 192.168.1.56 www02

Software

apt-get install apache2 php php-mysql php-redis

Filesystem

Configure your system as a GlusterFS client, so you have the following in your fstab.

/etc/glusterfs/www.vol /var/www glusterfs defaults,_netdev,rw 0 0

PHP Sessions

Creating a PHP session on one webserver, does not create it on the other. As requests bounces back and forth between the two webservers, this will be a problem for PHP sites. A solution to this is using Redis as a storage for the PHP sessions.

In /etc/php/7.0/apache2/php.ini and /etc/php/7.0/cli/php.ini find the entry session.save_handler = files and change it to the following.

session.save_handler = redis
session.save_path = "tcp://redis:6379"

Copy the configuration to all webservers and finally restart the services.

service apache2 restart

Testpage

Make a simple webpage, that shows something unique about the system and also creates a PHP-session. Use this to test the setup.

index.php

   1 <?php
   2         header('Content-Type: text/plain');
   3         session_start();
   4         if(!isset($_SESSION['visits']))
   5                 $_SESSION['visits'] = 0;
   6         $_SESSION['visits']++;
   7         echo "client: " . $_SERVER['REMOTE_ADDR'] . "\n";
   8         echo "server: " . $_SERVER['SERVER_ADDR'] . "\n";
   9         echo "hostname: " . gethostname() . "\n";
  10         echo "visits: " . $_SESSION['visits'] . "\n";
  11         echo "cookie: ";
  12         if (array_key_exists('PHPSESSID', $_COOKIE))
  13                 echo $_COOKIE['PHPSESSID'];
  14         echo "\n";
  15 ?>

References

None: Apache (last edited 2021-03-26 21:55:30 by Kristian Kallenberg)