'Magento and Redis: Connection to Redis failed after 2 failures error after upgrading/downgrading Redis

I recently setup Redis for caching with a Magento instance on a staging server (separate web server and DB server, DB server is the one running Redis), and it has been working for some time with few issues. The only one has been a very occasional communication error, so in an attempt to resolve this I upgraded the Redis version from 2.4.10 to the newest, 3.2.1. I should also note that since the start I've been running three separate instances on three separate ports, as it typically recommended when you want to use Redis for all three types of caching that it can do in Magento.

After making sure I could ping Redis on all three ports after the upgrade, I reconnected Magento to it and immediately started getting errors that indicated it couldn't connect at all: Connection to Redis failed after 2 failures. I tried to troubleshoot this for awhile, and ultimately ended up downgrading the Redis package back to 2.4.10, only to be met by the same problem. I'd even done all this in a local environment previously with Redis 3.2.1, and didn't encounter any of these issues. I feel like I must be missing something, but feel like I tried everything. Redis log files are completely normal, just reporting successful startup. All Magento Redis libraries are the most current, pulled from Github. /etc/init.d/redis file is a modified version of the standard file, pulled from somewhere on github to support starting up multiple instances.

Magento's 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 $?

Any other ideas would be very much appreciated.



Solution 1:[1]

I managed to find the solution. In my back and forth with the config files during the upgrade, my original "bind 0.0.0.0" line got changed to "bind 127.0.0.1". Changing that back fixed everything.

Solution 2:[2]

I managed it by just running two commands.

Connect the server through terminal ssh command and run following:

# service redis restart
# redis-cli flushall

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BClarkOMP
Solution 2 naveenos