Differences between revisions 3 and 48 (spanning 45 versions)
Revision 3 as of 2017-12-24 21:27:10
Size: 406
Comment:
Revision 48 as of 2020-02-11 21:24:44
Size: 2974
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
FIXME!
As memcached looses its content e.g cookies on a reboot, we will have to use redis instead!!!
Line 2: Line 5:

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 using [[Redis|Redis]] between the webservers as well 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. Since the servers are configured the same way it makes sense to share some files.

 * 192.168.1.51 www (virtual IP-address)
 * 192.168.1.52 www01
 * 192.168.1.53 www02
Line 6: Line 17:
apt-get install apache2 apt-get install apache2 php php-mysql
Line 9: Line 20:
=== 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 24:
cd /var
tar cfvzp www.tar.gz www/
/etc/glusterfs/www.vol /var/www glusterfs defaults,_netdev,rw 0 0
Line 17: Line 27:
==== GlusterFS Client ====
Install the glusterfs client and mount the glusterfs volume.

==== Restore ====
Restore the backup
{{{
tar xfvzp www.tar
rm www.tar.gz
== Testpage ==
Make a simple webpage, that shows something unique about the system. This is usefull when debugging.
`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 27: Line 48:
== 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. The solution is called memcached.

Add this to redis configuration file whatever its called .... `/etc/php/7.0/mods-available/memcache.ini`.
Line 29: Line 55:
apt-get install glusterfs-client something
Line 31: Line 57:

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 = "some redis stuff"
}}}

Copy the configuration to all webservers and finally restart the services.
{{{
service apache2 restart
}}}

== References ==

 * https://www.globo.tech/learning-center/php-memcached-instances-ubuntu-16/
== Redis References ==
 * https://www.digitalocean.com/community/tutorials/how-to-set-up-a-redis-server-as-a-session-handler-for-php-on-ubuntu-14-04
 * https://redis.io/topics/replication
 * https://redis.io/topics/sentinel

FIXME! As memcached looses its content e.g cookies on a reboot, we will have to use redis instead!!!

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 using Redis between the webservers as well 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. Since the servers are configured the same way it makes sense to share some files.

  • 192.168.1.51 www (virtual IP-address)
  • 192.168.1.52 www01
  • 192.168.1.53 www02

Software

apt-get install apache2 php php-mysql

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

Testpage

Make a simple webpage, that shows something unique about the system. This is usefull when debugging. 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 ?>

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. The solution is called memcached.

Add this to redis configuration file whatever its called .... /etc/php/7.0/mods-available/memcache.ini.

something

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 = "some redis stuff"

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

service apache2 restart

References

Redis References

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