【问题标题】:Running Redis Sentinel, HAProxy and Apache/w PHP on the same servers在同一台服务器上运行 Redis Sentinel、HAProxy 和 Apache/w PHP
【发布时间】:2019-08-23 06:24:37
【问题描述】:

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

目前,我有可变数量的 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 通信?关于它的工作原理,似乎有很多相互矛盾的建议。

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

【问题讨论】:

    标签: redis haproxy redis-sentinel


    【解决方案1】:

    最后,让它工作的最简单方法是避免使用 HAProxy,并使用 Sentinel 告诉 Web 服务器哪个 Redis 服务器是 Master。

    为了实现这一点,我制作了一个 masterupdate.sh 脚本,其中包含以下内容

    #!/bin/bash
    echo $6 > /location/master.txt
    

    并编辑redis/sentinel.conf 以包含以下行

    sentinel client-reconfig-script cache-master /location/masterupdate.sh
    

    这意味着每次 master 切换时,Sentinel 都会将 IP 地址写入 master.txt 文本文件,我可以从 PHP 读取该文本文件来设置会话。简单!

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2017-04-23
      • 2018-02-27
      相关资源
      最近更新 更多