![在多服务器环境中以高可用性/高性能方式存储会话的最佳方法](https://linux22.com/image/557979/%E5%9C%A8%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BB%A5%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7%2F%E9%AB%98%E6%80%A7%E8%83%BD%E6%96%B9%E5%BC%8F%E5%AD%98%E5%82%A8%E4%BC%9A%E8%AF%9D%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95.png)
我有一个应用程序 (Magento),它有一个抽象的会话存储层。我正在尝试可视化存储会话的最佳方式。
mysql 数据库?我正在考虑一个具有非常大的 innodb_buffer_pool_size 的专用数据库,因此它基本上就像带有磁盘备份的 RAM 缓存。我正在考虑为会话设置一个单独的数据库,并将其他数据库内容放在单独的 DB/DB 服务器上。
Memcache?这很棒,但我有点担心如果服务器崩溃会发生什么?崩溃后我会丢失该会话分区,因为据我所知,Memcache 不是分布式的。我可以让它分布式吗?(我刚刚被告知我可以使用 pecl memcache 模块 >= 3
tmpfs 内存文件存储?这可行,但我必须使用 rsync 或其他可检测该文件夹中何时发生写入操作的工具将写入会话与所有其他服务器同步。我确信一定存在某种东西来实现这一点。
我还没想到其他解决方案吗?很想听听你的想法。
谢谢!
答案1
Memcache?这很棒,但我有点担心如果服务器崩溃会发生什么?崩溃后我会丢失该会话分区,因为据我所知,Memcache 不是分布式的。我可以让它分布式吗?(我刚刚被告知我可以使用 pecl memcache 模块 >= 3
我在用着复制缓存. 它的启动方式如下:
在服务器 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"