最近MemCachedノードの1つが死んでしまったので、私たちのPHP Webアプリケーションは数分間利用できなくなりました(私たちはMemcachedをMemcachedプロバイダとして使用しています)。 Heroku/PHP 5.6環境でMemcachedのフェールオーバーサポートを設定するには?
は、この私たちの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
設定に目指しています123.45678.us-east-1.heroku.prod.memcachier.com:11211,123.45678.us-east-1.heroku.prod.memcachier.com:11211
:フェイルオーバー機能
MEMCACHIER_SERVERS
のenv varは次のようになります
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
を提供しています。これは2つのノードがあることを意味します。
新しい設定で問題が発生するのはタイムアウトで、PHPセッション関数(session_start()
,)に関する多くのエラーがあります。
どうしてですか?
私たちはPHPコード内にMemcachedを使用していませんが、セッションストレージエンジンとしてのみ使用しています。
私はMemcachierのサポートに連絡しましたが、顧客担当者は推奨されるPHPコード(必要ない)のみを提供することができました。
環境についてはあまりよく分かりませんが、プロキシを追加して高可用性にするのはなぜですか? – Yarco
Memcachier SaaSはこれを行います。 –
'session.gc_divisor'の値は何ですか?おそらく、セッションのガベージコレクションが頻繁に開始されているのでしょうか? –