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

2013-11-05 16:48:46 +08:00
 hustlzp
之前给朋友的外贸公司做了个小网站,用的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数据和图片数据也有保障。当然还是需要定时把七牛上的图片数据手动备份下,数据握在自己手里是最踏实的。

这样是否可行?还有没有更加合适的思路?跪求指点啊!谢谢!
4119 次点击
所在节点    程序员
26 条回复
JohnSmith
2013-11-05 16:57:58 +08:00
主要是数据库的共享问题吧,服务器可以用一个当做备份服务器,同时监控域名,如果访问域名返回错误就启用备份服务器。其实关键还是数据库的问题,memcached可以解决跨服务器共享数据,但是你必须两边同时存储到数据库,以防当机
Kvm
2013-11-05 17:10:23 +08:00
可以来我这儿买个VPS直接跑网站环节,然后另外拿个vps放nginx做前端.
多简单的事
msg7086
2013-11-05 17:11:35 +08:00
双主感觉比较容易出问题,而且题主说的情况应该不是要HA而是要即时备份吧。

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

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

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

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

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

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

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

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

遇到节点问题,随时迁移新服务器,还原数据库,改DNS解析
wdlth
2013-11-05 22:09:35 +08:00
跨网MySQL双主经常出同步问题,最好还是稳定前端加多个同机房可内网通信的后端比较好。比如用Haproxy、KeepAlive来切换。
hustlzp
2013-11-05 22:11:30 +08:00
@qq286735628 发邮箱是个好主意哈!
hustlzp
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
2013-11-05 23:15:19 +08:00
msg7086
2013-11-06 06:58:39 +08:00
@hustlzp 定时备份的话也可以用lftp做mirror直接把文件反向镜像到别的机器去。
或者你自己开个ftp定时让网站自己上传都可以。
我另外一堆运营机就是每天凌晨做mysqldump+lftp,就算要丢也最多只丢一天的数据。
这种备份方式适合不是那么critical的情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88132

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX