0

AWS で単一の memcache サーバーから複数の memcache サーバーに移行しています。内部ネットワークと外部から memcache サーバーにアクセスする必要があります。だから私は使っています

// get data from memcache for counter
$memcache = new Memcache;
$memcache->addServer('server1_internal_IP', 11211);
$memcache->addServer('server2_internal_IP', 11211);

別のゾーンのアプリ サーバーから、次を使用して同じサーバーにアクセスしています。

$memcache->addServer('server1_external_IP', 11211);
$memcache->addServer('server2_external_IP', 11211);

ローカル サーバーが memcache に書き込み、リモート サーバーが読み取ると、ルーティングが同じサーバーに送信されないように見えます

サーバーへのアクセスに別の IP アドレス (Amazon の内部と外部) を使用しているためでしょうか? では、ルーティング メカニズムは、ルーティングを行うときに実際の IP アドレスを考慮に入れるのでしょうか? キーの単純なCRC32であるはずだと思った

4

2 に答える 2

1

memcache.hash_strategy=consistent の場合、ハッシュ アルゴリズムで IP アドレスが使用されるため、異なるアドレスを持つ同じサーバーにルーティングできないことがわかりました (これは、各サーバーの AWS 内部および外部 IP アドレスの場合です)。

解決策は、標準ハッシュに切り替えることです。これを php.ini に追加します。

[memcached] memcache.hash_strategy=標準

于 2012-09-02T17:11:53.423 に答える
0

これは本当に理想的ではありません。可能であれば、保存する内容に基づいて、データを個別の memcache サーバーに分離する必要があります。

組み込みのハッシュ アルゴリズムを使用してサーバー間でデータを分散する場合、負荷が均等に分散されることを保証できず、サーバーを追加/削除するとすべてのサーバーでキャッシュ全体がリセットされ、サイトで大きな問題が発生します (すべてのユーザーがログに記録されます)。セッションを保存するために使用すると、カートの内容が失われます)

于 2012-09-02T17:27:45.760 に答える