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

问题描述 投票:0回答:1

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

[目前,我有可变数量的Web服务器(最少两个),使用PHP和Memcached在会话上运行apache,这意味着如果其中一台服务器出现故障,用户将不得不再次登录。

经过大量研究,我决定让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通信?关于这是如何工作的,似乎有很多相互矛盾的建议。

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

redis haproxy redis-sentinel
1个回答
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读取该文本文件以建立会话。简单!

© www.soinside.com 2019 - 2024. All rights reserved.