在同一服务器上运行Redis Sentinel,HAProxy和Apache / w PHP

时间:2019-08-23 06:24:37

标签: redis haproxy redis-sentinel

我正在尝试为服务器架构引入更多的冗余性和可靠性。

当前,我有可变数量的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通信?关于这是如何工作的,似乎有很多相互矛盾的建议。

非常感谢您提供的任何帮助!

1 个答案:

答案 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读取该文本文件来建立会话。简单!