I've been struggling with this one (of course!) for a while. Can't wrap my brain around it.
Magento just won't connect to the REDIS server. Since i'm getting not errors but a "there has been an error processing your request message" I was forced to put "Mage::setIsDeveloperMode(true);" in the index.php (in the magento root) to view the error.
This is the error i'm not getting:
Connection to Redis failed after 2 failures. #0 /usr/share/nginx/html/lib/Credis/Client.php(412): Credis_Client->connect() #1 /usr/share/nginx/html/lib/Credis/Client.php(674): Credis_Client->connect() #2 /usr/share/nginx/html/lib/Credis/Client.php(573): Credis_Client->__call('select', Array) #3 /usr/share/nginx/html/app/code/community/Cm/Cache/Backend/Redis.php(125): Credis_Client->select(0) #4 /usr/share/nginx/html/lib/Zend/Cache.php(153): Cm_Cache_Backend_Redis->__construct(Array) #5 /usr/share/nginx/html/lib/Zend/Cache.php(94): Zend_Cache::_makeBackend('Cm_Cache_Backen...', Array, true, true) #6 /usr/share/nginx/html/app/code/core/Mage/Core/Model/Cache.php(137): Zend_Cache::factory('Varien_Cache_Co...', 'Cm_Cache_Backen...', Array, Array, true, true, true) #7 /usr/share/nginx/html/app/code/core/Mage/Core/Model/Config.php(1348): Mage_Core_Model_Cache->__construct(Array) #8 /usr/share/nginx/html/app/Mage.php(463): Mage_Core_Model_Config->getModelInstance('core/cache', Array) #9 /usr/share/nginx/html/app/code/core/Mage/Core/Model/App.php(401): Mage::getModel('core/cache', Array) #10 /usr/share/nginx/html/app/code/core/Mage/Core/Model/App.php(295): Mage_Core_Model_App->_initCache(Array) #11 /usr/share/nginx/html/app/code/core/Mage/Core/Model/App.php(337): Mage_Core_Model_App->baseInit(Array) #12 /usr/share/nginx/html/app/Mage.php(684): Mage_Core_Model_App->run(Array) #13 /usr/share/nginx/html/index.php(88): Mage::run('', 'store') #14 {main}
I'm using a copy of CentOS 6.5 running on VMplayer.
I've have everything setup with:
NGINX > PHP-FPM > MAGENTO 1.8.1 > MYSQL > REDIS
Here's the version of what's i'm running:
nginx-1.6.2-1.el6.ngx.x86_64 redis-2.8.19-1.el6.remi.x86_64 php-pecl-redis-2.2.5-1.el6.x86_64 mysql-server-5.1.73-3.el6_5.x86_64 php-mysql-5.3.3-40.el6_6.x86_64 php-fpm-5.3.3-40.el6_6.x86_64
My NGINX configuration:
user nginx nginx; worker_processes 2; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/custom.d/http_level/*.conf; error_log /var/log/nginx/error.log error; log_format custom '{ "@timestamp": "$time_iso8601", "webserver_remote_addr": "$remote_addr", "webserver_remote_user": "$remote_user", "webserver_body_bytes_sent": $body_bytes_sent, "webserver_request_time": $request_time, "webserver_status": "$status", "webserver_request": "$request", "webserver_request_method": "$request_method", "webserver_http_referrer": "$http_referer", "webserver_http_user_agent": "$http_user_agent" }'; access_log /var/log/nginx/access.log custom; server_tokens off; proxy_read_timeout 7200; fastcgi_read_timeout 7200; server_names_hash_bucket_size 128; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120; client_max_body_size 120m; gzip on; gzip_vary on; gzip_types text/javascript text/css application/xml application/x-javascript application/javascript; variables_hash_max_size 1024; variables_hash_bucket_size 128; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE upstream php53_mydomain_com_www_mydomain_com { server 127.0.0.1:9000; } # mydomain_com_www_mydomain_com map $http_host $magento_multistore_key_mydomain_com_www_mydomain_com { default default; www.mydomain.com en_us; } map $http_host $magento_multistore_type_mydomain_com_www_mydomain_com { default store; www.mydomain.com store; } server { listen 127.0.0.1:80; server_name mydomain.com www.mydomain.com; root /usr/share/nginx/html/; include /etc/nginx/custom.d/server_level/*.conf; location ~* ^/(server-status|whm-server-status) { stub_status on; access_log off; allow 10.10.221.2; allow 10.10.221.3; allow 192.168.209.129; allow 10.10.17.108; allow 127.0.0.1; deny all; } location /php-fpm-status { access_log off; allow 10.10.221.2; allow 10.10.221.3; allow 192.168.209.129; allow 127.0.0.1; fastcgi_pass php53_mydomain_com_www_mydomain_com; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Direct download location ~* ^/(js|static|skin|media|images)/ { expires 1w; } location /errors/ { } location ~* ^/errors/.*\.xml$ { deny all; } location ~* ^/errors/.*\.phtml$ { deny all; } # Deny location ~* /(\.ht|\.svn|\.git) { deny all; } location ~* ^/(app|includes|lib|media/downloadable|pkginfo|report/config.xml|var)/ { deny all; } # 503 error page # error_page 500 502 503 504 /503.html; # fastcgi_intercept_errors on; # location = /503.html { } autoindex off; location / { try_files $uri $uri/ /index.php?$args; index index.php index.html; access_log off; } location ~* \.(jpeg|jpg|gif|png|css|js|ico|swf)$ { try_files $uri $uri/ /get.php; expires 1w; access_log off; } location @proxy { try_files $uri =404; # if reference to php executable is invalid return 404 expires off; fastcgi_pass php53_mydomain_com_www_mydomain_com; fastcgi_keep_conn on; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~\.php$ { try_files $uri =404; # if reference to php executable is invalid return 404 expires off; fastcgi_pass php53_mydomain_com_www_mydomain_com; fastcgi_keep_conn on; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param MAGE_RUN_CODE $magento_multistore_key_mydomain_com_www_mydomain_com; fastcgi_param MAGE_RUN_TYPE $magento_multistore_type_mydomain_com_www_mydomain_com; } } }
My REDIS config has the usual bind 127.0.0.1 on port 6379 (i've verified that it's listening, and it is)
[root@www cache]# netstat -anp | grep -i 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 47642/redis-server unix 3 [ ] STREAM CONNECTED 26379 7905/Xorg @/tmp/.X11-unix/X0
And finally my magento local.xml file:
<session_save><![CDATA[files]]></session_save> <cache> <backend>Cm_Cache_Backend_Redis</backend> <backend_options> <server>127.0.0.1</server> <!-- or absolute path to unix socket --> <port>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> <!-- Supports gzip, lzf, lz4 (as l4z) and snappy --> <use_lua>0</use_lua> <!-- Set to 1 if Lua scripts should be used for some operations --> </backend_options> </cache>
Please tell me i'm not going crazy
Thanks for helping,
No one huh?
Hi Rennes007
Did you check to see if you can access Redis-Cli on your server? At a glance if Redis is installed correctly your config looks ok.
CentOS has SELinux enabled by default. We ran into problem where it was blocking php-fpm <-> redis communication.
You want to see SELinux rules (You should see rule violation in /var/log/audit.log) or disable SELinux all together (that was option I went with, but since this is security enhencment this might not be the best idea to completelly disable it)