php - 如何在 Heroku/PHP 5.6 环境中设置具有故障转移支持的 Memcached?

标签 php session heroku memcached memcachier

最近,由于我们的一个 Memcached 节点失效(我们使用 Memcachier 作为 Memcached 提供程序),我们的 PHP 网络应用程序有几分钟不可用。

这是我们的 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}

我们新的 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

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 函数(session_start()session_write_close())的错误。

为什么会这样?

请记住,我们根本没有在我们的 PHP 代码中使用 Memcached,而只是作为我们的 session 存储引擎。

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

最佳答案

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

关于php - 如何在 Heroku/PHP 5.6 环境中设置具有故障转移支持的 Memcached?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886751/

相关文章:

php - 如果项目已存在,请勿将其添加到 session 数组中

java - session 过期后重定向到登录

php - php和mysql按年排列月份

php - PayPal IPN 沙盒 - 更改通知 URL 不会更新

php - 如何从多个 MySQL 数据库中添加值

javascript - 将数据从一个 html 传递到另一个 html 的问题

php - WooCommerce session 变量初始化

python - 为什么项目可以部署在heroku上

python - Heroku 拒绝连接到 postgres 数据库

heroku - 缩小特定的 Heroku worker dynos?