Linux.memcached

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
  • der Linux Server-Dämon "memcached" bietet eine Semi-Persistente Speicherung von Key+Value Paaren an. Die Daten bleiben erhalten bis der Memcache-Server neu gestartet wird.
  • TWebShop konnektiert mit dem PHP-Modul "memcached" auf diesen Server um eine Round-Robin Sequenz zur erhalten. Darüber wählen alle beteiligten laufenden WebShop-Forks einen der laufenden XMLRPC- Dienste aus. Eine faire Lastverteilung wird so erreicht.
XMLSERVER-LaufendeNummer = inc(RoundRobinsequenz) mod XMLSERVER-AnzahlDienste

Installation

Linux-Server Dienst "memcached"

# Vorbereitungen, Memcached, 
# PHP pecel
#
zypper install memcached
systemctl enable memcached
systemctl start memcached

Test

nc localhost 11211
version
#
# Die Antwort des Servers sollte sein
#
VERSION 1.4.2

Mehr als nur lokalen Zugriff erlauben

Als default läuft der memcache Server mit einem "-l <IP-Adresse>" Paramter. Zumeist ist eine Beschränkung auf die lokale Maschine gegeben: "-l 127.0.0.1". Um ihn im Netzwerk sichtbar zu machen muss dieser Anteil der Parameter aus dem Programmaufruf entfernt werden.

joe /etc/sysconfig/memcached
#
# "" bedeute ALLE Netzwerkinterfaces, Sicherheits-Relevant
#
MEMCACHED_PARAMS=""

PHP Module "memcached"

zypper install php5-pear
zypper install php5-devel
zypper install libmemcached-devel

# PHP-Modul Memcached installieren
cd /usr/include/libmemcached-1.0
pecl install memcached

# im Verzeichnis /etc/php5/conf.d
joe memcached.ini

# Datei: /etc/php5/conf.d/memcache.ini
# Nur diese Zeile reicht
extension=memcache.so

# erste Prüfung ob das Modul nun vorhanden ist?
php --modules

# Apache das neue Modul laden lassen starten lassen
rcapache2 restart

# nun ein phpinfo Website aufrufen ob es geklappt hat
# und memcached im PHP zur Verfügung steht

Verwendung

Console

memdump --servers=localhost

Pascal

.\PASconTools\memcache.pas

PHP

TWebShop\core\semipersistent_sequence.php

// Stellt sicher, dass entweder
// * die Verbindung zum MemCache besteht
// * c_spc = -1, das bedeutet der Server läuft nicht
function semiEnsureOpen() {

   global $m_spc;
   global $c_spc;
   global $errorlist;

   // Init?
   if ($m_spc == null) {
       $m_spc = new Memcached(TWEBSHOP_ID . SEQUENCE_NAMESPACE);
       if ($m_spc->addServer(SEQUENCE_HOST, SEQUENCE_PORT)) {
           $m_spc->add(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 0);
       } else {
           trigger_error("Verbindung zu " . SEQUENCE_HOST . " fehlgeschlagen!", E_USER_ERROR);
           $c_spc = -1;
           $errorlist->add("memcached: Verbindung zu " . SEQUENCE_HOST . " fehlgeschlagen!");
       }
   }
} 

// liefert einfach die nächste Nummer eines
// Zählers, der den "semi"-"persistent" ist,
// das heisst er lebt länger als das Skript
// erst durch einen Server-Neustart wird dessen
// Wert auf "0" gesetzt. In einer Multi-User
// Umgebung (wie durch das Internet massiv
// gegeben) kann so ein fairer Zähler implementiert
// werden.
function getSemiPersistentSequence() {

   global $m_spc;
   global $c_spc;

   // Init?
   semiEnsureOpen();

   // Increment!
   if ($c_spc < 0)
       $c_spc += -1;
   else
       $c_spc = $m_spc->increment(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 1);

   // Return
   return $c_spc;
}

Putty

Mit Putty im Telnet-Modus auf den Host mit dem Port 11211 konnektieren.

version

eingeben oder

incr sequence.69VVTGKZ1 0


telnet 10.0.0.2 11211

Alle Werte löschen

via telnet

flush_all

via command-line

memcflush --servers=localhost:11211

Werte

sequence.69VVTGKZ1

Die Round-Robin-Sequenz des TWebShop