2016-07-27 19 views
0

Ich habe Redis vor kurzem für das Zwischenspeichern mit einer Magento-Instanz auf einem Staging-Server eingerichtet (separater Webserver und DB-Server, DB-Server ist der Redis) und es funktioniert seit einiger Zeit mit wenigen Problemen. Der einzige Fehler war ein gelegentlich auftretender Kommunikationsfehler. Deshalb habe ich die Redis-Version von 2.4.10 auf den neuesten, 3.2.1 aktualisiert. Ich sollte auch beachten, dass ich seit dem Start drei separate Instanzen auf drei separaten Ports ausgeführt habe, wie es normalerweise empfohlen wird, wenn Sie Redis für alle drei Arten von Caching verwenden möchten, die es in Magento machen kann.Magento und Redis: Verbindung zu Redis fehlgeschlagen nach 2 Fehlern Fehler nach Upgrade/Downgrade Redis

Nachdem ich sichergestellt hatte, dass ich Redis an allen drei Ports nach dem Upgrade anpingen konnte, habe ich Magento wieder angeschlossen und sofort Fehler erhalten, die darauf hinwiesen, dass es überhaupt keine Verbindung herstellen konnte: Verbindung zu Redis fehlgeschlagen nach 2 Fehlern. Ich habe versucht, dies eine Zeitlang zu beheben und letztendlich das Redis-Paket auf 2.4.10 zurückgestuft, nur um das gleiche Problem zu lösen. Ich hatte das alles sogar in einer lokalen Umgebung mit Redis 3.2.1 gemacht und hatte keines dieser Probleme. Ich habe das Gefühl, dass ich etwas verpassen muss, aber ich habe das Gefühl, dass ich alles versucht habe. Redis Log-Dateien sind völlig normal und melden nur einen erfolgreichen Start. Alle Magento Redis Bibliotheken sind die aktuellsten, die aus Github stammen. Die Datei /etc/init.d/redis ist eine modifizierte Version der Standarddatei, die von irgendwo auf Github abgerufen wird, um das Starten mehrerer Instanzen zu unterstützen.

Magento local.xml:

<config> 
    <global> 
     <install> 
      <date><![CDATA[Sat, 11 Jul 2015 08:00:49 +0000]]></date> 
     </install> 
     <crypt> 
      <key><![CDATA[24d48474f523332d6dbcd9d1d6931c98]]></key> 
     </crypt> 
     <disable_local_modules>false</disable_local_modules> 
     <resources> 
      <db> 
       <table_prefix><![CDATA[]]></table_prefix> 
      </db> 
      <default_setup> 
       <connection> 
        <host><![CDATA[(address)]]></host> 
        <username><![CDATA[root]]></username> 
        <password><![CDATA[password]]></password> 
        <dbname><![CDATA[magento]]></dbname> 
        <initStatements><![CDATA[SET NAMES utf8]]></initStatements> 
        <model><![CDATA[mysql4]]></model> 
        <type><![CDATA[pdo_mysql]]></type> 
        <pdoType><![CDATA[]]></pdoType> 
        <active>1</active> 
       </connection> 
      </default_setup> 
     </resources> 
     <cache> 
      <backend>Cm_Cache_Backend_Redis</backend> 
      <backend_options> 
      <server><![CDATA[(address)]]></server>        <!-- or absolute path to unix socket --> 
      <port><![CDATA[6379]]></port> 
      <persistent></persistent>        <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 --> 
      <database>0</database>         <!-- Redis database number; protection against accidental data loss is improved by not sharing databases --> 
      <password></password>         <!-- Specify if your Redis server requires authentication --> 
      <force_standalone>0</force_standalone>     <!-- 0 for phpredis, 1 for standalone PHP --> 
      <connect_retries>1</connect_retries>      <!-- Reduces errors due to random connection failures; a value of 1 will not retry after the first failure --> 
      <read_timeout>10</read_timeout>       <!-- Set read timeout duration; phpredis does not currently support setting read timeouts --> 
      <automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default --> 
      <compress_data>1</compress_data>       <!-- 0-9 for compression level, recommended: 0 or 1 --> 
      <compress_tags>1</compress_tags>       <!-- 0-9 for compression level, recommended: 0 or 1 --> 
      <compress_threshold>20480</compress_threshold>   <!-- Strings below this size will not be compressed --> 
      <compression_lib>gzip</compression_lib>     <!-- Support gzip, lzf, lz4 (https://github.com/kjdev/php-ext-lz4) or snappy (https://github.com/goatherd/php-snappy) --> 
      <use_lua>0</use_lua>          <!-- Set to 1 if Lua scripts should be used for some operations --> 
      </backend_options> 
     </cache> 
     <full_page_cache> 
      <backend>Cm_Cache_Backend_Redis</backend> 
      <backend_options> 
      <server><![CDATA[(address)]]></server>    <!-- or absolute path to unix socket --> 
      <port><![CDATA[6380]]></port> 
      <persistent></persistent>    <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 --> 
      <database>0</database>     <!-- Redis database number; protection against accidental data loss is improved by not sharing databases --> 
      <password></password>     <!-- Specify if your Redis server requires authentication --> 
      <force_standalone>0</force_standalone> <!-- 0 for phpredis, 1 for standalone PHP --> 
      <connect_retries>1</connect_retries> <!-- Reduces errors due to random connection failures --> 
      <read_timeout>10</read_timeout>       <!-- Set read timeout duration; phpredis does not currently support setting read timeouts --> 
      <lifetimelimit>57600</lifetimelimit> <!-- 16 hours of lifetime for cache record --> 
      <compress_data>0</compress_data>  <!-- DISABLE compression for EE FPC since it already uses compression --> 
      </backend_options> 
     </full_page_cache> 
     <session_save>db</session_save> 
     <redis_session>           <!-- All options seen here are the defaults --> 
      <host><![CDATA[(address)]]></host>        <!-- Specify an absolute path if using a unix socket --> 
      <port><![CDATA[6381)]]></port> 
      <password></password>        <!-- Specify if your Redis server requires authentication --> 
      <timeout>4</timeout>        <!-- This is the Redis connection timeout, not the locking timeout --> 
      <persistent></persistent>       <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 --> 
      <db>0</db>           <!-- Redis database number; protection from accidental loss is improved by using a unique DB number for sessions --> 
      <compression_threshold>2048</compression_threshold> <!-- Set to 0 to disable compression (recommended when suhosin.session.encrypt=on); known bug with strings over 64k: https://github.com/colinmollenhour/Cm_Cache_Backend_Redis/issues/18 --> 
      <compression_lib>gzip</compression_lib>    <!-- gzip, lzf, lz4 (https://github.com/kjdev/php-ext-lz4) or snappy (https://github.com/goatherd/php-snappy) --> 
      <log_level>1</log_level>        <!-- 0 (emergency: system is unusable), 4 (warning; additional information, recommended), 5 (notice: normal but significant condition), 6 (info: informational messages), 7 (debug: the most information for development/testing) --> 
      <max_concurrency>6</max_concurrency>     <!-- maximum number of processes that can wait for a lock on one session; for large production clusters, set this to at least 10% of the number of PHP processes --> 
      <break_after_frontend>5</break_after_frontend>  <!-- seconds to wait for a session lock in the frontend; not as critical as admin --> 
      <break_after_adminhtml>30</break_after_adminhtml> 
      <first_lifetime>600</first_lifetime>     <!-- Lifetime of session for non-bots on the first write. 0 to disable --> 
      <bot_first_lifetime>60</bot_first_lifetime>   <!-- Lifetime of session for bots on the first write. 0 to disable --> 
      <bot_lifetime>7200</bot_lifetime>     <!-- Lifetime of session for bots on subsequent writes. 0 to disable --> 
      <disable_locking>0</disable_locking>     <!-- Disable session locking entirely. --> 
      <min_lifetime>60</min_lifetime>      <!-- Set the minimum session lifetime --> 
      <max_lifetime>2592000</max_lifetime>     <!-- Set the maximum session lifetime --> 
     </redis_session> 
    </global> 
    <admin> 
     <routers> 
      <adminhtml> 
       <args> 
        <frontName><![CDATA[admin]]></frontName> 
       </args> 
      </adminhtml> 
     </routers> 
    </admin> 
</config> 

/etc/init.d/redis:

#!/bin/sh 
# 
# redis  init file for starting up the redis daemon 
# 
# chkconfig: - 20 80 
# description: Starts and stops the redis daemon. 

# Source function library. 
. /etc/rc.d/init.d/functions 

name="redis-server" 
exec="/usr/sbin/$name" 
#shut="/usr/bin/redis-shutdown" 
#pidfile="/var/run/redis/redis.pid" 
#REDIS_CONFIG="/etc/redis.conf" 
PORT_NUMBERS=$(grep "^port" /etc/redis.conf-* | awk '{print $NF}') 

[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis 

#lockfile=/var/lock/subsys/redis 

start() { 
    for PORT in $PORT_NUMBERS; do 
       REDIS_CONFIG="/etc/redis.conf-${PORT}" 
       pidfile="/var/run/redis/redis-${PORT}.pid" 
       lockfile="/var/lock/subsys/redis-${PORT}" 
     [ -f $REDIS_CONFIG ] || exit 6 
     [ -x $exec ] || exit 5 
     echo -n $"Starting $name on $PORT: " 
     daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG" 
     retval=$? 
     echo 
     [ $retval -eq 0 ] && touch $lockfile 
     done 
    return $retval 
} 

stop() { 
    for PORT in $PORT_NUMBERS; do 
     REDIS_CONFIG="/etc/redis.conf-${PORT}" 
       pidfile="/var/run/redis/redis-${PORT}.pid" 
       lockfile="/var/lock/subsys/redis-${PORT}" 
     [ -f $REDIS_CONFIG ] || exit 6 
     [ -x $exec ] || exit 5 
     echo -n $"Starting $name on $PORT: " 
     daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG" 
     retval=$? 
     echo 
     [ $retval -eq 0 ] && touch $lockfile 
     done 
    return $retval 
} 

stop() { 
    for PORT in $PORT_NUMBERS; do 
     echo -n $"Stopping $name on $PORT: " 
       pidfile="/var/run/redis/redis-${PORT}.pid" 
       lockfile="/var/lock/subsys/redis-${PORT}" 
     [ -x $shut ] && $shut 
     retval=$? 
     if [ -f $pidfile ] 
     then 
       # shutdown haven't work, try old way 
       killproc -p $pidfile $name 
       retval=$? 
     else 
       success "$name shutdown" 
     fi 
     echo 
     [ $retval -eq 0 ] && rm -f $lockfile 
     done 
    return $retval 
} 
restart() { 
    stop 
    start 
} 

reload() { 
    false 
} 

rh_status() { 
    for PORT in $PORT_NUMBERS; do 
       pidfile="/var/run/redis/redis-${PORT}.pid" 
     status -p $pidfile $name 
     done 
} 

rh_status_q() { 
    rh_status >/dev/null 2>&1 
} 


case "$1" in 
    start) 
     rh_status_q && exit 0 
     $1 
     ;; 
    stop) 
     rh_status_q || exit 0 
     $1 
     ;; 
    restart) 
     $1 
     ;; 
    reload) 
     rh_status_q || exit 7 
     $1 
     ;; 
    force-reload) 
     force_reload 
     ;; 
    status) 
     rh_status 
     ;; 
    condrestart|try-restart) 
     rh_status_q || exit 0 
     restart 
     ;; 
    *) 
     echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}" 
     exit 2 
esac 
exit $? 

Jede andere Ideen sehr geschätzt werden würde.

+0

Vorgeschlagene Lektüre: [Wie man ein minimales, vollständiges und überprüfbares Beispiel erstellt] (http://stackoverflow.com/help/mcve) – wogsland

+1

Ich habe es geschafft, die Lösung zu finden. Während ich mit den Konfigurationsdateien während des Upgrades hin und her ging, wurde meine ursprüngliche "bind 0.0.0.0" Zeile in "bind 127.0.0.1" geändert. Das ändern alles behoben. – BClarkOMP

+0

@BClarkOMP können Sie bitte dieses Ergebnis als Antwort posten und akzeptieren, falls es anderen in Zukunft hilft? –

Antwort

0

Ich habe es geschafft, die Lösung zu finden. Während ich mit den Konfigurationsdateien während des Upgrades hin und her ging, wurde meine ursprüngliche "bind 0.0.0.0" Zeile in "bind 127.0.0.1" geändert. Das ändern alles behoben.

Verwandte Themen