如何在Heroku/PHP 5.6环境中使用故障转移支持设置Memcached?

Nin*_*pac 9 php session memcached heroku memcachier

最近,由于我们的一个Memcached节点死亡(我们使用Memcachier作为Memcached提供程序),我们的PHP Web应用程序几分钟后就不可用了.

这是我们的user.ini配置(Heroku user.ini用作定义配置的地方),这有效,但显然不支持故障转移:

session.save_handler=memcached
session.save_path=${MEMCACHIER_SERVERS} # I understand this is redundant, but I just kept it as-is because I didn't write the original user.ini
session.save_path="PERSISTENT=SFSESSID ${MEMCACHIER_SERVERS}"
session.gc_maxlifetime=1209600
session.gc_probability=1

memcached.sess_binary=1
memcached.sess_sasl_username=${MEMCACHIER_USERNAME}
memcached.sess_sasl_password=${MEMCACHIER_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

我们的新user.ini配置旨在提供故障转移功能

session.save_handler=memcached
session.save_path="PERSISTENT=SFSESSID ${MEMCACHIER_SERVERS}"
session.gc_maxlifetime=1209600
session.gc_probability=1

memcached.sess_sasl_username=${MEMCACHIER_USERNAME}
memcached.sess_sasl_password=${MEMCACHIER_PASSWORD}
memcached.sess_binary=1
memcached.sess_number_of_replicas=1
# I also tried memcached.sess_consistent_hash=1, to no avail
Run Code Online (Sandbox Code Playgroud)

MEMCACHIER_SERVERS的环境变量如下:123.45678.us-east-1.heroku.prod.memcachier.com:11211,123.45678.us-east-1.heroku.prod.memcachier.com:11211.我认为这意味着我们有2个节点.

我们在新配置中遇到的问题是超时,以及关于PHP会话功能的许多错误(session_start(),session_write_close()).

为什么会这样?

请记住,我们根本不在PHP代码中使用Memcached,而只是作为会话存储引擎.

我确实尝试过联系Memcachier支持,但客户代表只能提供推荐的PHP代码(我们不需要).

Nin*_*pac 1

由于赏金已过期,问题很快就会结束,我将继续 @jdotjdot 的建议,从 Memcachier 切换到 MemcachedCloud 插件。