运行 Redis Sentinel、HAProxy 和 Apache/w PHP 在同一台服务器上
Running Redis Sentinel, HAProxy and Apache/w PHP on the same servers
我正在尝试为我的服务器架构引入更多冗余和可靠性。
目前我有可变数量的 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 通信?关于它的工作原理似乎有很多相互矛盾的建议。
非常感谢您提供的任何帮助!
最后,让它工作的最简单方法是避免使用 HAProxy,并使用 Sentinel 告诉 Web 服务器哪个 Redis 服务器是主服务器。
为此,我制作了一个 masterupdate.sh
脚本,其中包含以下内容
#!/bin/bash
echo > /location/master.txt
并编辑 redis/sentinel.conf
以包含以下行
sentinel client-reconfig-script cache-master /location/masterupdate.sh
这意味着每次 master 切换时,Sentinel 都会将 IP 地址写入 master.txt
文本文件,我可以从 PHP 读取该文本文件以设置会话。简单!
我正在尝试为我的服务器架构引入更多冗余和可靠性。
目前我有可变数量的 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 通信?关于它的工作原理似乎有很多相互矛盾的建议。
非常感谢您提供的任何帮助!
最后,让它工作的最简单方法是避免使用 HAProxy,并使用 Sentinel 告诉 Web 服务器哪个 Redis 服务器是主服务器。
为此,我制作了一个 masterupdate.sh
脚本,其中包含以下内容
#!/bin/bash
echo > /location/master.txt
并编辑 redis/sentinel.conf
以包含以下行
sentinel client-reconfig-script cache-master /location/masterupdate.sh
这意味着每次 master 切换时,Sentinel 都会将 IP 地址写入 master.txt
文本文件,我可以从 PHP 读取该文本文件以设置会话。简单!