免root权限实现多服务器负载均衡
前几天洛奇亚的服务器所在机房发生了长达2小时的断电,博客也down了很久,回家打不开ping不通很是郁闷,所以切换到mirror服务器后着手研究下集群。
用VPS或者独服做博客的人应该相对少一点,但是用虚拟主机的人肯定不在少数,这里灵曦摸索出一套适合虚拟主机+DNS轮询实现负载均衡的方法。(也支持VPS和独服,但是相对于这两种,有更优处理方案,在此不做讨论。)
实现本方案的前提条件:
服务器linux系统
服务器在国外
有SSH权限(不必root)
本方案优点:
成本低,管理简单
能较为有效的均衡流量
本方案缺点:
DNS轮询不比反向代理,不能实现线性均衡,在访问量小的时候,效果非常不明显
各服务器主机间同步的大小受dropbox限制(以dropbox作为中间设备的,免费最高8G)
一服宕机,会导致三分之一流量损失,但是可以在DNS端实现宕机监控并自动切换线路解析
Dropbox稳定性较差,对性能差或者负载神高的机器,容易引发Resource temporarily unavailable错误
如果服务器质量良莠不齐,反而容易降低在线率。
参考教程:让进程在后台可靠运行的几种方法–IBM
好了,废话一大堆,下面是核心内容:
备份服务器数据!如果没有备份,你很可能会在操作中因为同步而丢失全站数据!!!
连上SSH,进入第一台服务器,
打入命令:
wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86
tar -zxof dropbox.tar.gz
mv .dropbox-dist ~
解释下几条命令,从dropbox官网下载dropbox客户端,解压并移动到当前用户的家目录
第一次运行:
~/.dropbox-dist/dropboxd &
随后会出现一条很长的url,复制出来,翻墙打开,连入你的dropbox账户,绑定完成。
如果没问题,在你的家目录下会出现一个叫做Dropbox的文件夹。
然后
killall dropbox
rm -rf ~/Dropbox
ln -s 你的web目录绝对路径 ~/Dropbox
杀了这个进程
删除dropbox文件夹并将你的网站目录软链接到Dropbox文件夹
随后,将dropbox切入后台,并保证让你断开SSH后能继续同步:
(~/.dropbox-dist/dropboxd &)
很重要的命令,小括号不可省略!小括号是把SID转为1,不受本账号hup信号而终止。
然后
ps -ef| grep dropbox
检查是否挂载了Dropbox进程,正常应该如图:
有红框内内容红框内则表示正常运行,注意20022后面的1,这个非常重要,只有这样才不会在挂断SSH的时候终止,考虑到虚拟主机多没有screen权限的命令,以此代替。VPS等亦可用screen代替。
服务器1算是配置完成了,一切无误的话,你会在dropbox中看见你网站根目录的内容。
接下来切换到第二台服务器的SSH:
wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86
tar -zxof dropbox.tar.gz
mv .dropbox-dist ~~/.dropbox-dist/dropboxd &
同服务器1,完成对机器的绑定,之后,删除原有网站的www目录,请注意备份数据!
killall dropbox
rm -rf 你的网站目录
或者:
mv 你的网站目录 你的网站目录_old
作为备份(建议)
然后,创建一个软链接到你的网站目录:
ln -s ~/Dropbox/ 你的网站目录
把DNS记录解析到服务器2,访问测试看看有没有问题,如果有问题,比如权限问题等,输入
chmod 755 -R 你的网站目录
甚至可以开放777权限,排除权限问题后,再恢复755或者644进行测试。
如果一切正常,可以按照配置服务器2的方法配置服务器3,服务器4,等等。
第一台服务器和其他服务器的区别就是软链接的对象区别,如果这一步错误,将会损失数据。
同步设置完成后,建议在一台服务器的网站根目录输入:
echo test>test
然后在其他服务器的根目录ls下看看,有没有test这个文件,如果有,则成功,没有,则应该检查错误。
服务器配置完成后,应该逐服切换,逐服检查,确保每个服务器都正常访问,读写,同步后:
如果是wordpress博客,需要对mysql服务器开放主机为“%”的权限,即,允许所有外网访问该服务器,或者指定一个主机文本域,在指定IP内服务器允许访问数据库,然后修改wp-config.php文件,把服务器原来的localhost(一般是这样)修改为mysql服务器的IP,并定期备份数据。
完成后,设置DNS轮询,即在根域和www域下,解析上N个A记录指向IP,实现后本机刷新DNS缓存(win:ipconfig /flushdns),应该能看到这样的变化:
两次查询,分别是轮询前和轮询后的变化,IP指向三个不同的IP,从而实现负载均衡。
但是,这种均衡并不是真正的均衡,效果也不如反向代理或CDN,只能作为一种分担流量的手段。
常见错误:
This is usually because of a permissions error. Errors can also be caused by your home folder being stored on a network share.
权限问题,用chmod赋予~/.dropbox-dist下文件夹777权限,如果仍然不能解决,应该耐心等待,因为这个奇怪的错误通常在部署完服务器的12小时内会出现,具体原因未知。
资源临时不可用,通常是dropbox在同步数据时过载的错误,在VPS不会出现,在虚拟主机有可能是超过了用户的线程数,应该等几个小时,如果仍然这样,应该写一个php文件:
<?php
exec("killall dropbox");
echo ok;
?>
用FTP上传到服务器上,在网站中打开,当回显ok时,应该可以正常连上SSH了。
如果在配置过程中有其他问题,同样欢迎留言~~
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
沙发先坐了,在慢慢啃,虽然估计看不懂。。。 /lenghan
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.57 Safari/534.24
/lenghan /lenghan 。。没用过VPS,只是看过相关资料。。只有一点点
本来以为来早了。。。却还是被楼上的混沌抢了沙发
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
有VPS有root但是一直不会优化><
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
很容易优化的,网上一大堆教程,不过我这个思路比较偏,可能没人提过
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
怎么也想不到竟然是利用Dropbox在Linux的客户端。
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
有两个原因,一个是我不会让两只服务器做异步备份,一个是用dropbox不需要root权限。
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.30 Safari/534.30
『解析上N个A记录指向IP』,那么我访问的时候会随机解析到一个IP么?
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
会,而且TTL越低,几率越大。我的TTL是1,也就是DNS缓存实时更新。
Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/11.04 Chromium/11.0.696.57 Chrome/11.0.696.57 Safari/534.24
教程不错,学习了。。。。。
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 QQDownload/1.7
说实在话,没看明白。用dropbox也太另类了……
萌娘百科最初是在HK和USA各放一个服务器,HK的连到USA的数据库,但是实测效果非常糟糕,mediawiki作为一个全动态站非常依赖数据库反映速度。
又尝试在HK主机开squid,但是因为需要完全权限……价格承受不起,不了了之。
现在用的是cloudflare(免费),效果还OK。就是不像squid一样能在页面更改后刷新缓存
现在HK服务器完全是当作FTP在使用……这个方法虽然可行但是无法同步数据库对于萌娘百科来说用不上啊……
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
well,看不懂完全可以理解呢,简单的说,就是利用dropbox实现服务器中文件的高速同步
dropbox对mysql完全无能为力,我最初是试过多数据库同步的,后来失败告终(mysql确实摸不透啊魂淡..
如果对数据库要求很高的话,建议去IBM developer work看看,可能有相当不错的解决方案(也相当麻烦
cloudflare没记错的话是CDN吧,免费的东西还是保留态度
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
今天忽然算是看明白你在写什么了,你在服务器端安装了Dropbox以后通过Dropbox同步两个网站。不过个人始终认为作为wordpress这种不太要求速度的网站,一个高性能大流量的服务器会比这样的同步要好,毕竟不是所以网站都会流量大到必须要用服务器群。不管从实用性上还是方便性上都差一些。
说到免费服务的话……最高8G的Dropbox不一样是免费的吗……?
我这边始终没有条件架设squid,不过前几天在HK找到了一个开了数据库同步的空间(虽然空间很小,但是是免费的cpanel),设为每5min和主数据库合并新增数据一次,如果有人提交编辑则强制触发同步。图片外链主站,基本没有速度问题。现在唯一不能解决的就是让大陆流量到HK服务器,其他地区流量到USA的主服务器了……
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
啊,真高兴有人看懂了呢。。
其实这个方案最大的有点不在于负载均衡,主要是防止某个IDC数据突然损坏没备份,或者备份不够实时之类的,负载均衡另外有反向代理方案更好一点。
dropbox免费最高是到8G的,还要N多邀请,很麻烦的,不过,用上面这个方法,绑定shell后过验证倒是很容易~
弱弱的问一下,你是怎么设置5分钟同步数据库和强制同步的呢?很想知道呢!
关于流量分流的问题,建议采用智能DNS方案,比如用DNSPOD国际版之类的就可以了。
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
嘛……不管是负载还是可用率考虑……我都觉得反向代理为佳。
定时同步在phpmyadmin里就有(如果开了同步的话)(设置主从数据库然后定时,如果不行,corn定时运行应该也可以)
最麻烦的是编辑提交,我搞了半天也没弄明白,只好让提供空间的同学帮忙了。好像是怎么把数据交到主数据库,然后再强制触发同步什么的 /ku
话说HK现在这个同步还是经常会出错误(把主站数据也搞乱了),而且日500IP都会宕掉…所以没正式启用…不过毕竟是免费的嘛……人家愿意给已经很够意思了
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
phpmyadmin里面的同步很早前就知道了,一直不知道套接字(socket)应该怎么填,也查不到相关资料~!!求解释!!
主站数据一般还是少动的好,测试同步先用虚拟机或者用两台后端服务器做测试,无误后再同步主站就会把损失减到最小~!
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0; SE 2.X MetaSr 1.0)
我的方法:不用dropbox,建立三个wordpress,配上同样的主题(不同也行)其他两个博客通过rss抓取主博客的内容.
对于访问较多的网站,多个镜像能发挥出它的作用,但是访问较多的网站往往会关注seo.一个域名解析到多个ip的话,会不会造成搜索引擎蜘蛛每次爬的ip不同,而影响搜索引擎对网站的评价?
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
用rss不是什么好办法呢,会导致很多错误的,比如图片啦,附件啦。还有rss的样式和全文输出什么的,麻烦不比dropbox少。。
域名做DNS轮询是很普遍的事情,不存在对SEO产生负面影响吧,不信你nslookup下一些大型网站,基本都是绑定了数个IP的。
大型网站一般采用反向代理减少负载和CDN方案。
Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
以下只针对普通博客.
除了rss以外还有不少采集方法,图片声音等媒体都是能抓到的,另建图床则不需担心此问题
对于普通博客来说,没有运行同步程序或建立cdn的条件,如果要考虑预防当机,建一个镜像站(比如你建过的gae),甚至是输出到其他bsp的博客(比如新浪/网易博客)就行了.
虽然是备份站点,但在博客不能访问时,跳转到镜像,并向读者解释跳转的原因也不失为一种方法.
不过对于怎样在主博客当机时,转到备份站点,我只想到自定义503页面的办法.如果整个站点都下线时就不行了.你有没有什么办法,比如设定dns的之类的来实现主站下线时转到备份站点呢
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
利用DSP做映像很可能会对SEO产生负面影响,比如DSP比主站还先收录等等。
同步RSS的话附件应该同步不了吧?比如RAR
如果非要映像的话,我觉得GAE依旧是很好的方案。
映像我觉得应该作为主站down后临时的接入,最理想状态是客户端完全没发觉,所以樱保持站点数据的同步,用BSP的话就显得有点不够意思了。。
至于主站down后的切换,dnspod提供了宕机检测和宕机切换,具体效果不做评价,总之感觉没有监控宝那么灵敏,检测周期还蛮长的,不做推荐。
其他方案,我觉得可以用一台服务器做反向代理,在服务器判断接入是否有效,再选择有效的节点进行PHP解析处理,不过如果反向代理服务器本身down了,也就没办法了。。
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
看不懂你写神马的人你伤不起啊
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
仅仅反监听的路过~
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 Safari/534.16 dianso
看起来好复杂,主题透明的,我喜欢
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
思路是蛮复杂的。
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.53 Safari/534.30
Dropbox还能这样用?
不过这种方法对我这些小小小小博客来说,傻折腾~~
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
还有两枚小loli哦~~
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; zh-cn) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
唔…乃的博客真的有好多实用的技术文啊…
偶虽然买了VPS,但是相当不会折腾…
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24
其实这篇很不实用的啦~更实用的还不如用VPS搭个VPN神马的~
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30
我这个主机不能用ssh,悲催啊。。