V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hustlzp
V2EX  ›  程序员

求教:2台配置一般的VPS实现一定程度的高可用?(防拔线)

  •  
  •   hustlzp ·
    hustlzp · 2013-11-05 16:48:46 +08:00 · 4112 次点击
    这是一个创建于 3824 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前给朋友的外贸公司做了个小网站,用的Flask。

    需求很简单,主要就是展示产品、公司信息。然后朋友可以编辑产品信息。

    VPS买的是host700的,不过上个星期某user严重违反了tos,导致我们这个节点被拔线了...到现在还没恢复...

    要命的是朋友最近接到一个比较大的单,订单已经快下了,对方boss可能会查一下公司的网站。但现在网站挂了,图片没有备份...(好吧,只能说我太菜,图样图森破),于是只能死等host700和美国那边交涉成功,再把数据弄出来...

    以前只是手动备份,也根本没有HA的意识。现在好了,可能会给朋友造成一些损失...于是开始想HA的解决办法(当然这里的HA只是很低级的HA...),同时要能够自动实现数据备份。

    向大家求教:在2台VPS上(同一个机房,IP独立,节点也不同),如何实现其中一个被拔线了然后另外一个可以继续run?

    在网上做了些功课,画了一个简单的框图,请大大们指点:

    [图片]
    http://hustlzp.com/wp-content/uploads/2013/11/architecture.png

    - 首先弄2台VPS,有独立IP,而且不在同一个节点(意思就是一个被拔线,另一个不受影响)
    - 使用DNSPod解析到这2个IP上
    - 每次部署的时候,使用Farbic+git在2个VPS上同时部署
    - 图片使用七牛提供的云存储
    - 2个MySQL之间配置为主主同步,这样一个挂了另外一个还可以工作
    - 配置一个cron A,定时将2台VPS上的MySQL数据备份起来
    - 配置另外一个cron B(时间上晚于 cron A),定时将备份上传到Dropbox
    - cron B还需要进行一些判断和维护:(1)在上传前判断当天的备份是否已经存在,如果发现已经由另外一个VPS上传了,就不再上传(2)每上传一个新备份,就删除最老的一个备份,保证有7天的备份在Dropbox里面

    这样的话,基本就可以实现一个被拔线,另外一个可以继续run。然后MySQL数据和图片数据也有保障。当然还是需要定时把七牛上的图片数据手动备份下,数据握在自己手里是最踏实的。

    这样是否可行?还有没有更加合适的思路?跪求指点啊!谢谢!
    第 1 条附言  ·  2013-11-05 17:44:54 +08:00
    感觉确实小题大做了。

    一个vps跑网站,另一个mysql主从备份,然后rsync备份文件。

    如果主vps挂了,就启用备份vps,然后在DNS上面改过来就好了。

    这样虽然在“主站挂掉”->“备份站上线”这段时间是不可用的,但是方案更简单可行~
    26 条回复    1970-01-01 08:00:00 +08:00
    JohnSmith
        1
    JohnSmith  
       2013-11-05 16:57:58 +08:00
    主要是数据库的共享问题吧,服务器可以用一个当做备份服务器,同时监控域名,如果访问域名返回错误就启用备份服务器。其实关键还是数据库的问题,memcached可以解决跨服务器共享数据,但是你必须两边同时存储到数据库,以防当机
    Kvm
        2
    Kvm  
       2013-11-05 17:10:23 +08:00   ❤️ 1
    可以来我这儿买个VPS直接跑网站环节,然后另外拿个vps放nginx做前端.
    多简单的事
    msg7086
        3
    msg7086  
       2013-11-05 17:11:35 +08:00
    双主感觉比较容易出问题,而且题主说的情况应该不是要HA而是要即时备份吧。

    这个架构如果是给小网站做的话我觉得有点太过了。

    我自己手里有一台服务器跑论坛,备份是用的主从备份+文件定时rsync。稍微重要的数据都可以这么做。

    备份机我是用的buyvm250,主服务器是双路至强,不考虑服务器挂掉时候的访问性,只考虑数据完整性,并且保证结构简单易操作。

    仅供参考
    hustlzp
        4
    hustlzp  
    OP
       2013-11-05 17:30:05 +08:00
    @msg7086 没体会过双主,不知道是否可靠...

    你的方案对于备份来说是非常简单可行的方案。感谢分享!
    hustlzp
        5
    hustlzp  
    OP
       2013-11-05 17:31:07 +08:00
    @Kvm 你那边出现过违反tos被拔线的情况不?一般恢复要几天?
    hustlzp
        6
    hustlzp  
    OP
       2013-11-05 17:31:46 +08:00
    @JohnSmith 确实,如果跨服务器的话就必须同时写入和更改~
    hustlzp
        7
    hustlzp  
    OP
       2013-11-05 17:45:34 +08:00
    @msg7086 确实小题大做了,打算就采用你的方案~
    richardevs
        8
    richardevs  
       2013-11-05 17:46:23 +08:00
    為什麼就不能直接用個更好的服務器?既然要跑業務,連Linode都付不起麼?...

    還有沒有數據備份這點,只能點蠟燭了。

    雙服務器不實際,文件每分每秒都在修改。

    曾經我是用Linode + DigitalOcean的方式做異地備份,每到淩晨就自動把全盤文件rsync去DigitalOcean那邊,現在由於資金問題直接啟用Linode Backups了。
    Liang
        9
    Liang  
       2013-11-05 17:51:14 +08:00
    这种情况感觉你要三台vps,一台做转发,两台负载均衡,文件rsync,数据库主主。
    这样你一台宕了,也直接在转发机上配一下就可以了,也可以把改A记录的生效时间给忽略了。
    zhttty
        10
    zhttty  
       2013-11-05 17:52:22 +08:00
    hustlzp
        11
    hustlzp  
    OP
       2013-11-05 17:56:37 +08:00
    @richardevs 说得是...
    @Liang 这样也不错,不过考虑成本,还是采用 @msg7086 他的方案吧,或者找朋友申请点资金弄个linode算了..
    hustlzp
        12
    hustlzp  
    OP
       2013-11-05 17:57:15 +08:00
    @zhttty 感谢!
    thinkxen
        13
    thinkxen  
       2013-11-05 19:20:00 +08:00
    只封掉有版权问题的IP不就好了,为什么要拔整机的线~~~永远不去老美的机房当二等公民~~~
    Cirez
        14
    Cirez  
       2013-11-05 19:38:02 +08:00
    关注下,近期一个项目要处理好这个问题。
    qq286735628
        15
    qq286735628  
       2013-11-05 22:05:19 +08:00
    以前用WP给别人建站的时候,运营性质的图片放图床,数据库有插件定时备份到邮箱,网站程序则是WP。

    遇到节点问题,随时迁移新服务器,还原数据库,改DNS解析
    wdlth
        16
    wdlth  
       2013-11-05 22:09:35 +08:00
    跨网MySQL双主经常出同步问题,最好还是稳定前端加多个同机房可内网通信的后端比较好。比如用Haproxy、KeepAlive来切换。
    hustlzp
        17
    hustlzp  
    OP
       2013-11-05 22:11:30 +08:00
    @qq286735628 发邮箱是个好主意哈!
    hustlzp
        18
    hustlzp  
    OP
       2013-11-05 22:57:29 +08:00
    @wdlth 感谢推荐KeepAlived!
    找到了KeepAlived分别在反向代理服务器、MySQL的应用介绍,分享给大家:

    -利用keepalived构建高可用MySQL-HA
    http://database.51cto.com/art/201012/237204.htm

    -用HAProxy和KeepAlived构建高可用的反向代理系统
    http://weizhifeng.net/HA-with-HAProxy-and-KeepAlived.html
    hustlzp
        19
    hustlzp  
    OP
       2013-11-05 23:15:19 +08:00
    msg7086
        20
    msg7086  
       2013-11-06 06:58:39 +08:00
    @hustlzp 定时备份的话也可以用lftp做mirror直接把文件反向镜像到别的机器去。
    或者你自己开个ftp定时让网站自己上传都可以。
    我另外一堆运营机就是每天凌晨做mysqldump+lftp,就算要丢也最多只丢一天的数据。
    这种备份方式适合不是那么critical的情况。
    hustlzp
        21
    hustlzp  
    OP
       2013-11-06 08:14:54 +08:00 via Android
    @msg7086 谢谢分享!备份的方法真是多哈!
    Admstor
        22
    Admstor  
       2013-11-06 11:05:10 +08:00
    你这个网站主要是以展示为主,并不涉及交易,所以实时备份的要求并不高
    最简单的方案,用rsync每天同步网站和数据库到另外的机器上,可以是另外的VPS,也可以是自己的电脑,至于恢复,如果是同步到另外的VPS,那么恢复只要修改一下域名解析即可,如果是本地电脑,那么上传一下数据,然后重建环境即可,都不是很难的而且成本很低.
    数据库你应该是mysql,说实在的,mysql的主从同步并不是那么好用,还是会需要经常的人工检查同步完整性
    terry0824
        23
    terry0824  
       2013-11-06 13:55:53 +08:00
    还可以用dnspod的自动监测自动切换功能,这样基本不用手动操作。
    hustlzp
        24
    hustlzp  
    OP
       2013-11-06 14:23:40 +08:00
    @Admstor
    @terry0824 thanks : )
    jinwyp
        25
    jinwyp  
       2013-11-06 17:12:14 +08:00
    mark exe
    lostcat
        26
    lostcat  
       2013-11-30 02:37:31 +08:00
    @richardevs 不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4181 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:30 · PVG 13:30 · LAX 22:30 · JFK 01:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.