求教给位,如何做基于 lamp 的分布式服务器架构? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jacklee
V2EX    问与答

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

  •  1
     
  •   Jacklee 2015-06-02 10:49:55 +08:00 3422 次点击
    这是一个创建于 3788 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   Solana     5776 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 03:13 PVG 11:13 LAX 20:13 JFK 23:13
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86