Linux.memcached: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(19 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
der Linux Server Dienst "memcache" bietet eine Semi-Persistente Speicherung an. Die speicherbaren Key / Value Paare bleiben erhalten bis der Memcache-Server neu gestartet wird. In meinem Fall connectiere ich mit PHP auf diesen Server.
* 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
 
* Die Funktion XMLRPC.Versandkosten speichert ihr Ergebnis im memcache ab, sobald der Parameter [[Systemeinstellungen#memcacheHost]] gesetzt ist.


== Installation ==
== Installation ==


=== Server Dienst ===
=== Linux-Server Dienst "memcached" ===


  # Vorbereitungen, Memcached,  
  # Vorbereitungen, Memcached,  
Zeile 12: Zeile 17:
  systemctl start memcached
  systemctl start memcached


=== PHP Module ===
==== 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" ===
 
* OrgaMon verwendet nicht PHP "memcache" sondern nur PHP "memcached"
 


  zypper install php5-pear
  zypper install php5-pear
  zypper install php5-devel
  zypper install php5-devel
zypper install libmemcached-devel
   
   
  # PHP-Modul Memcache installieren
  # PHP-Modul Memcached installieren
  # Es kommt eine Frage, ob memcache so installiert werden soll,
  cd /usr/include/libmemcached-1.0
# dass Session Variable dort gespeichert werden können, dies
  pecl install memcached
# ist für meinen Fall nicht notwendig
  pecl install memcache
   
   
  # im Verzeichnis /etc/php5/conf.d
  # im Verzeichnis /etc/php5/conf.d
  joe memcache.ini
  joe memcached.ini
   
   
  # Datei: /etc/php5/conf.d/memcache.ini
  # Datei: /etc/php5/conf.d/memcache.ini
Zeile 30: Zeile 57:
  extension=memcache.so
  extension=memcache.so
   
   
  #
  # erste Prüfung ob das Modul nun vorhanden ist?
  # prüfen + starten
php --modules
  # Apache das neue Modul laden lassen starten lassen
  rcapache2 restart
  rcapache2 restart
  php --modules
   
# 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 ===


== Test Skript ==
TWebShop\core\semipersistent_sequence.php


<code>
<code>
  $m = null;
  // 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!");
        }
    }
}
   
   
  function getSemiPersistenCounter() {
// 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;
    global $m_spc;
    global $c_spc;
   
   
if ($m==null) {
    // Init?
  $m = new Memcache();  
    semiEnsureOpen();
  $m->connect("localhost");
  $m->add("u-xmlrpc-robin", 0);
    // Increment!
}
    if ($c_spc < 0)
return $m->increment("u-xmlrpc-robin", 1);
        $c_spc += -1;
    else
        $c_spc = $m_spc->increment(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 1);
   
   
    // Return
    return $c_spc;
  }
  }
</code>
</code>


== Test mit Putty ==
=== Putty ===


Mit Putty im Telnet-Modus auf den Host mit dem Port 11211 konnektieren.
Mit Putty im Telnet-Modus auf den Host mit dem Port 11211 konnektieren.
Zeile 66: Zeile 142:


telnet 10.0.0.2 11211
telnet 10.0.0.2 11211
== Alle Werte löschen ==
=== via telnet ===
flush_all
=== via command-line ===
memcflush --servers=localhost:11211


== Werte ==
== Werte ==

Aktuelle Version vom 15. Juli 2016, 10:13 Uhr

  • 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"

  • OrgaMon verwendet nicht PHP "memcache" sondern nur PHP "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