PHP Cluster with MEMCACHED


#1

Hello friends, how are you?

I created a php cluster with 8 machines. Each one have his own memcached server because the main
idea is for session HA too. I setup owncloud distributed cache to use all these machines like this:

'memcache.local' => '\OC\Memcache\APCu'
'memcache.distributed' => '\OC\Memcache\Memcached'

and machines are:

'memcached_servers' =>
array (
0 =>
array (
0 => '10.10.128.71',
1 => 11211,
),
1 =>
array (
0 => '10.10.128.72',
1 => 11211,
),
2 =>
array (
0 => '10.10.128.73',
1 => 11211,
),
3 =>
array (
0 => '10.10.128.74',
1 => 11211,
),
4 =>
array (
0 => '10.10.128.75',
1 => 11211,
),
5 =>
array (
0 => '10.10.128.76',
1 => 11211,
),
6 =>
array (
0 => '10.10.128.77',
1 => 11211,
),
7 =>
array (
0 => '10.10.128.78',
1 => 11211,
),
),

The problem occurs when some of the machines are offline. I'm unable to login via web interface and the client lost connection too.

Is the configuration is correct for HA?


#2

Hello friends. Do you have some idea of it?


#3

Are all your memcaches server connected to each other properly? I'm not an expert when it comes down to memcached - but I miss this information in your description above.

Are there any error messages in the log file as soon as the login issue arises?


#4

The configuration seems ok.

According to https://github.com/php-memcached-dev/php-memcached/issues/154 it seems the behaviour is kind of expected because you might be hitting one of the down servers and an error could happen.
If this is true, I guess there is no solution on our side at the moment, and I'm not sure if ownCloud can provide a solution for it because of the same reasons the php-memcached guys argue.

I don't know if redis has the same problem, but you might give it a try.


#5

Hello friends.

Servers are okay.

This is my memcached config file:

; Enable memcached extension module
extension=memcached.so

; ----- Options to use the memcached session handler

; RPM note : save_handler and save_path are defined
; for mod_php, in /etc/httpd/conf.d/php.conf
; for php-fpm, in /etc/php-fpm.d/*conf

; Use memcache as a session handler
;session.save_handler=memcached
; Defines a comma separated list of server urls to use for session storage
;session.save_path="localhost:11211"

; ----- Configuration options
; http://php.net/manual/en/memcached.configuration.php

[memcached]
; Use session locking
; valid values: On, Off
; the default is On
memcached.sess_locking = On

; Session spin lock retry wait time in microseconds.
; Be carefull when setting this value.
; Valid values are integers, where 0 is interpreted as
; the default value. Negative values result in a reduces
; locking to a try lock.
; the default is 150000
memcached.sess_lock_wait = 150000

; The maximum time, in seconds, to wait for a session lock
; before timing out.
; Setting to 0 results in default behavior, which is to
; use max_execution_time.
memcached.sess_lock_max_wait = 0;

; The time, in seconds, before a lock should release itself.
; Setting to 0 results in the default behaviour, which is to
; use the memcached.sess_lock_max_wait setting. If that is
; also 0, max_execution_time will be used.
memcached.sess_lock_expire = 0;

; memcached session key prefix
; valid values are strings less than 219 bytes long
; the default value is "memc.sess.key."
memcached.sess_prefix = ""

; memcached session consistent hash mode
; if set to On, consistent hashing (libketama) is used
; for session handling.
; When consistent hashing is used, one can add or remove cache
; node(s) without messing up too much with existing keys
; default is Off
memcached.sess_consistent_hash = On

; Allow failed memcached server to automatically be removed
memcached.sess_remove_failed = 1

; Write data to a number of additional memcached servers
; This is "poor man's HA" as libmemcached calls it.
; If this value is positive and sess_remove_failed is enabled
; when a memcached server fails the session will continue to be available
; from a replica. However, if the failed memcache server
; becomes available again it will read the session from there
; which could have old data or no data at all
memcached.sess_number_of_replicas = 7

; memcached session binary mode
; libmemcached replicas only work if binary mode is enabled
memcached.sess_binary = On

; memcached session replica read randomize
memcached.sess_randomize_replica_read = Off

; memcached connect timeout value
; In non-blocking mode this changes the value of the timeout
; during socket connection in milliseconds. Specifying -1 means an infinite timeout.
memcached.sess_connect_timeout = 1000

; Session SASL username
; Both username and password need to be set for SASL to be enabled
; In addition to this memcached.use_sasl needs to be on
memcached.sess_sasl_username = NULL

; Session SASL password
memcached.sess_sasl_password = NULL

; Set the compression type
; valid values are: fastlz, zlib
; the default is fastlz
memcached.compression_type = "fastlz"

; Compression factor
; Store compressed value only if the compression
; factor (saving) exceeds the set limit.
;
; store compressed if:
; plain_len > comp_len * factor
;
; the default value is 1.3 (23% space saving)
memcached.compression_factor = "1.3"

; The compression threshold
;
; Do not compress serialized values below this threshold.
; the default is 2000 bytes
memcached.compression_threshold = 2000

; Set the default serializer for new memcached objects.
; valid values are: php, igbinary, json, json_array, msgpack
;
; json - standard php JSON encoding. This serializer
; is fast and compact but only works on UTF-8
; encoded data and does not fully implement
; serializing. See the JSON extension.
; json_array - as json, but decodes into arrays
; php - the standard php serializer
; igbinary - a binary serializer
; msgpack - a cross-language binary serializer
;
; The default is igbinary if available, then msgpack if available, then php otherwise.
memcached.serializer = "igbinary"

; Use SASL authentication for connections
; valid values: On, Off
; the default is Off
memcached.use_sasl = Off

; The amount of retries for failed store commands.
; This mechanism allows transparent fail-over to secondary servers when
; set/increment/decrement/setMulti operations fail on the desired server in a multi-server
; environment.
; the default is 2
memcached.store_retry_count = 2