2017-01-27 10 views
9

最近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コード(必要ない)のみを提供することができました。

+0

環境についてはあまりよく分かりませんが、プロキシを追加して高可用性にするのはなぜですか? – Yarco

+0

Memcachier SaaSはこれを行います。 –

+0

'session.gc_divisor'の値は何ですか?おそらく、セッションのガベージコレクションが頻繁に開始されているのでしょうか? –

答えて

1

賞品の期限が切れたので質問はすぐに終了しますので、@ jdotjdotの提案に進み、MemcachierからMemcachedCloudアドオンに切り替えます。

+0

ボードにようこそ:) –