Magento和Redis:升级/降级后2次失败后Redis连接失败Redis

问题描述:

我最近在一台登台服务器上安装了Redis,用于Magento实例的缓存(单独的Web服务器和数据库服务器,DB服务器是运行Redis的服务器) ,并且在一些问题上已经工作了一段时间。唯一一个偶然的通信错误,所以为了解决这个问题,我将Redis版本从2.4.10升级到了最新的3.2.1。我还应该注意到,从一开始我就一直在三个独立的端口上运行三个独立的实例,因为它通常建议您在Redis中使用它可以在Magento中执行的所有三种类型的缓存。Magento和Redis:升级/降级后2次失败后Redis连接失败Redis

在确认升级后我可以在所有三个端口上ping Redis后,我重新连接了Magento并立即开始出现错误,表明它根本无法连接:2次故障后连接到Redis失败。我试图排除故障一段时间,并最终将Redis软件包降级到2.4.10,只是遇到了同样的问题。我甚至在之前使用Redis 3.2.1的本地环境中完成了所有这些工作,但没有遇到任何这些问题。我觉得我必须错过一些东西,但感觉就像我尝试了一切。 Redis日志文件完全正常,只报告成功启动。所有Magento Redis库都是Github提供的最新版本。 /etc/init.d/redis文件是标准文件的修改版本,从github上的某个地方拉出来支持启动多个实例。

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 $? 

任何其他的想法将是非常赞赏。

+0

建议阅读:[如何创建最小,完整和可验证的示例](http://stackoverflow.com/help/mcve) – wogsland

+1

我设法找到解决方案。在升级过程中,我使用了配置文件,原来的“绑定0.0.0.0”行被更改为“绑定127.0.0.1”。改变这一点,修复了一切。 – BClarkOMP

+0

@BClarkOMP您能否请您将该发现作为答案发布,并接受它以备日后帮助他人? –

我设法找到解决方案。在升级过程中,我使用了配置文件,原来的“绑定0.0.0.0”行被更改为“绑定127.0.0.1”。改变这一点,修复了一切。