Size: 2529
Comment:
|
Size: 2868
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
incomplete, do not use! | FIXME! As memcached looses its content e.g cookies on a reboot, we will have to use redis instead!!! |
Line 4: | Line 6: |
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 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]]. | 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 betwen the webservers too. Apache will be configured to store the sessions using [[Redis|Redis]] 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]]. |
Line 15: | Line 17: |
apt-get install apache2 php php-mysql memcached php-memcache php-mcrypt | apt-get install apache2 php php-mysql |
Line 25: | Line 27: |
== Testpage == Make a simple webpage, that shows something unique about the system. This is usefull when debugging. `index.php` {{{#!highlight php <?php echo "client: " . $_SERVER['REMOTE_ADDR'] . "\n"; echo "server: " . $_SERVER['SERVER_ADDR'] . "\n"; echo "hostname: " . gethostname() . "\n"; ?> }}} |
|
Line 40: | Line 31: |
Add this to `/etc/php/7.0/mods-available/memcache.ini`. | Add this to redis configuration file whatever its called .... `/etc/php/7.0/mods-available/memcache.ini`. |
Line 43: | Line 34: |
memcache.allow_failover="1" memcache.hash_strategy="consistent" memcache.hash_function="crc32" memcache.session_redundancy=3 memcache.maxreclevel=0 memcache.maxfiles=0 memcache.archivememlim=0 memcache.maxfilesize=0 memcache.maxratio=0 |
something |
Line 54: | Line 37: |
In `/etc/php/7.0/apache2/php.ini` find the entry `session.save_handler = files` and change it to the following. | 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 56: | Line 39: |
session.save_handler = memcache session.save_path = "tcp://www01:11211, tcp://www02:11211" |
session.save_handler = redis session.save_path = "some redis stuff" |
Line 60: | Line 43: |
Add the IP-address of the webserver to the memcache configurtion in `/etc/memcached.conf`. This will be different for each of the webservers. | Copy the configuration to all webservers and finally restart the services. |
Line 62: | Line 45: |
-l 127.0.0.1, www01 | 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` {{{#!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 66: | Line 71: |
* https://www.globo.tech/learning-center/php-memcached-instances-ubuntu-16/ | * https://www.digitalocean.com/community/tutorials/how-to-set-up-a-redis-server-as-a-session-handler-for-php-on-ubuntu-14-04 |
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 betwen the webservers too. Apache will be configured to store the sessions using Redis 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
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
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 ?>