web-dev-qa-db-ja.com

複数サーバー環境で高可用性/高性能の方法でセッションを保存するための最良の方法

抽象化されたセッションストレージレイヤーを持つアプリケーション(Magento)があります。セッションを保存するための最良の方法を視覚化しようとしています。

mysqlデータベース? innodb_buffer_pool_sizeが非常に大きい専用データベースを考えているので、基本的にはRAMディスクバックアップ付きキャッシュです。セッション専用に別のDBを用意し、他のDBのものを配置することを考えています。別のDB/DBサーバー。

Memcache?これは素晴らしいことですが、サーバーがクラッシュした場合に何が起こるかについて少し心配していますか? Memcacheが配布されていないことを理解しているため、クラッシュによってセッションのパーティションが失われます。配布させることはできますか? (pecl memcache module> = 3を使用できると言われました

tmpfsメモリファイルストレージ?これは機能しますが、rsyncまたはそのフォルダーで書き込みが発生したことを検出するものを使用して、書き込み時にセッションを他のすべてのサーバーと同期する必要があります。このために何かが存在しなければならないと確信しています。

私が考えていない他の解決策?アイデアが大好きです。

ありがとう!

3
Bryan Ruiz

Memcache?これは素晴らしいことですが、サーバーがクラッシュした場合に何が起こるかについて少し心配していますか? Memcacheが配布されていないことを理解しているため、クラッシュによってセッションのパーティションが失われます。配布させることはできますか? (pecl memcache module> = 3を使用できると言われました

repcached を使用しています。それは以下のように開始されます:

  • サーバー1:

    memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached.pid -x <server2_ip>

  • サーバー2:

    memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached.pid -x <server1_ip>

PHP Memcache拡張機能の構成:

extension=memcache.so
memcache.allow_failover = 1
memcache.redundancy = 1
memcache.session_redundancy=2
memcache.hash_strategy = consistent

そして、php.iniのセッションハンドラー:

session.save_handler = memcache
session.save_path="tcp://ip1:11211, tcp://ip2:11211"
2
quanta