V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Jacklee
V2EX  ›  问与答

求教给位,如何做基于 lamp 的分布式服务器架构?

  •  1
     
  •   Jacklee · 2015-06-02 10:49:55 +08:00 · 3138 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,目前web项目都是单点服务,由于访问量和数据量逐渐增大,服务器挂掉的概率也上升,影响也很大,考虑到减少对线上项目的影响,想做成多点服务,咨询了下前辈,说可以做分布式架构。服务器和数据库都备两台,一台出问题,可切换到服务正常的服务器。
    我是这方面的小白,所以发个帖求问大牛们,提供一些细节或者一些相关资料,多谢!
    19 条回复    2015-06-02 18:50:03 +08:00
    mhycy
        1
    mhycy  
       2015-06-02 11:12:24 +08:00   ❤️ 1
    第一层:
    单点/多点出口,利用DNS负载均衡,使用nginx反向代理.
    (此法入口单点失效不会全挂)

    第二层:
    Apache/PHP服务器
    Session使用网络方式单点储存/实现一个同步分发机制
    静态文件需要依据业务实现一个同步分发机制.
    最优做法是静态文件独立储存与访问, 需要同步的仅仅是网站源码

    第三层
    MySQL实现一主多从结构,主写从读.
    9hills
        2
    9hills  
       2015-06-02 11:38:42 +08:00   ❤️ 1
    VIP + LVS(两台)+ NGINX(N台)+ 应用服务器(N台)+ 数据库服务器(一主多从1备)

    其中NGINX可和应用放到同一台机器上。
    Jacklee
        3
    Jacklee  
    OP
       2015-06-02 14:06:12 +08:00
    @mhycy 感谢,这个方向从成本和性能上都很不错,目前我们静态文件已经是独立服务器,所以要做的工作集中于你所提的第一层、第二层中的“session使用网络方式单点储存/实现一个同步分发机制 (这一点能否cookie存在客户端代替?)”以及第三层,这个我需要研究研究,目前还在收集一些资料
    Jacklee
        4
    Jacklee  
    OP
       2015-06-02 14:09:09 +08:00
    @9hills 好高端,这个方案不知道成本方面,以及涉及session方面是如何解决的呢,因为VIP + LVS我都不太了解
    mhycy
        5
    mhycy  
       2015-06-02 14:10:52 +08:00
    @Jacklee
    Cookie就没这方面考虑了.
    因为Session的特殊性所以需要同步而已.(因为Session数据存在于服务器端)

    关于第三点, 一般而言LAMP站点压力最大的不是静态文件就是数据库, 所以一主多从结构可以优化访问.
    主数据库负责写入的原因是为了数据一致性, 因为读取对时效性/一致性要求不高, 所以从库读取减轻压力.
    (也没哪些应用是写入压力高于读取压力的)
    hcymk2
        6
    hcymk2  
       2015-06-02 14:11:59 +08:00
    @mhycy
    第三层 MySQL实现一主多从结构,主写从读

    如何在原有项目代码改动最小的情况下实现?
    mhycy
        7
    mhycy  
       2015-06-02 14:20:27 +08:00
    @hcymk2 MySQL-Proxy
    Jacklee
        8
    Jacklee  
    OP
       2015-06-02 14:21:06 +08:00
    @mhycy 恩恩,很有道理,除了某些用户量很大的应用,基本都是读操作压力最大;我们之前就遇到大量读取导致数据库too many connections崩掉的,所以才考虑做这个事情
    mhycy
        9
    mhycy  
       2015-06-02 14:24:50 +08:00
    @Jacklee
    其实 @9hills 的方案原理是一致的, 只是入口服务器的方案换掉了, 增加可靠性.
    具体实现建议使用此方案.方案细节可用 "LVS 高可用" 作为关键字查询得到.
    这个方案需要交换机支持, VIP 就是 Virtual IP 的缩写.
    mhycy
        10
    mhycy  
       2015-06-02 14:28:57 +08:00
    @Jacklee
    补充: 实际建议使用 @9hills 的方案
    这个方案对于入口服务器的单机故障有更短的恢复时间(秒级)
    Jacklee
        11
    Jacklee  
    OP
       2015-06-02 14:29:27 +08:00
    @mhycy 那如果MySQL-Proxy挂掉了呢
    Jacklee
        12
    Jacklee  
    OP
       2015-06-02 14:31:28 +08:00
    @mhycy 那感觉@9hills的方案都得到普遍认同啊,我去研究研究,多谢
    mhycy
        13
    mhycy  
       2015-06-02 14:32:36 +08:00
    @Jacklee
    Proxy是分布式部署在应用服务器,真要挂掉这台应用服务器可以下线重启了.
    另: 不止mysql-proxy一个选择还有别的工具可用, 具体需要自行分析...
    Jacklee
        14
    Jacklee  
    OP
       2015-06-02 14:37:11 +08:00
    @mhycy 原来如此,了解了,多谢
    9hills
        15
    9hills  
       2015-06-02 14:50:36 +08:00
    @Jacklee

    确定高可用方案,首先要确定可用性等级。非常简单的说一说:

    99.99% 架构,最少两个IDC,保证数据一致性,进行流量切换。。。很麻烦
    99.9%架构,只需要一个IDC,但需要用VIP+LVS做前端的秒级切换(最少需要2台机器),后端配NGINX再做代理,之后是应用服务器(NGINX和应用可以放到同一台机器,最少两台)和数据库服务器(最少三台,主从备)
    99.5% 架构,直接配两台NGINX做proxy,DNS解析到两台机器即可。但是即时你TTL设的很小,因为互联网的特性,实际生效时间根本无法控制。。。
    9hills
        16
    9hills  
       2015-06-02 14:55:48 +08:00
    @Jacklee 99.9% = 每年停机8小时,绝大部分业务都是可以接受这个等级的
    hcymk2
        17
    hcymk2  
       2015-06-02 15:56:15 +08:00
    @mhycy
    我听说MySQL-Proxy 性能不是很好看。
    实际用起来如何呢?
    mhycy
        18
    mhycy  
       2015-06-02 16:01:44 +08:00
    @hcymk2 具体不太了解...
    机房数据我们拿不到, 他们给啥..我们用啥...囧
    popu111
        19
    popu111  
       2015-06-02 18:50:03 +08:00
    前面的大神都是大企业级别的解决方案。。。我会说我就搞了个CDN和用CloudXNS设置了备用IP么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.