我正在尝试为服务器架构引入更多的冗余性和可靠性。
当前,我有可变数量的Web服务器(至少有两个)运行apache并使用PHP和Memcached进行会话,这意味着如果其中一台服务器出现故障,用户将不得不再次登录。
经过大量研究,我决定让Redis可以存储会话,Redis Sentinel可以管理Redis实例故障,HAProxy可以将会话传递给指定的Redis Master。
尽管有数天的阅读时间,但我不清楚所有这些东西在哪里融合在一起。假设我至少有两个前端服务器和两个Redis服务器,看起来像这样:
Load balanced connection
|
-------------
| |
---------- ----------
| Apache | | Apache |
|Sentinel| |Sentinel|
| HAProxy| | HAProxy|
---------- ----------
| |
|----------
? ? - Managed by HAProxy,
---------- ---------- by talking to Sentinel
| | | |
| Redis | | Redis |
| | | |
---------- ----------
然后通过添加更多的Apache / Sentinel / HAProxy服务器进行扩展?如果是这样的话,这将在小型(1GB内存)实例上工作,还是Sentinel / HAProxy占用大量资源?
第二,HAProxy如何可靠地与Sentinel通信?关于这是如何工作的,似乎有很多相互矛盾的建议。
非常感谢您提供的任何帮助!
答案 0 :(得分:0)
最后,最简单的方法是避免使用HAProxy,并使用Sentinel告诉Web服务器哪个Redis服务器是主服务器。
为此,我制作了一个masterupdate.sh
脚本,其中包含以下内容
#!/bin/bash
echo $6 > /location/master.txt
并编辑redis/sentinel.conf
使其包含以下行
sentinel client-reconfig-script cache-master /location/masterupdate.sh
这意味着每次主服务器切换时,Sentinel都会将IP地址写入master.txt
文本文件中,我可以从PHP读取该文本文件来建立会话。简单!