然后同事那边上线版本,也被lvs害了一把,ops把我们的lvs给加错了。dig www.xxx.com,发现其中两台是我们服务器的real ip,还有一个竟然是vip。这叫啥啊?如果dns轮询到我们那两台服务器则正常,如果轮询到那台vip,vip还会再被解析一次才能到我们的两台real ip。等于是多了一次没必要的解析。线上遇到的现象就是,如果轮询到我们的两台real ip,页面访问速度非常快。如果轮询到个vip,页面非常慢!找了半天原因,都以为是代码问题或者是缓存之类的。因为这个太隐蔽了。

解决方案 »

  1.   

    没有文档,
    简单粗暴式的覆盖,
    不合理的流程,
    和lvs有关系吗,呵呵。
      

  2.   


    没办法,现实和理想差距太大。我总想规范开发-上线流程。但每天需求多如牛毛,而且项目中和同事都们是交叉开发的,服务器扩充速度很快。真的很难在短时间思考好如何规划才是最佳的流程。打包整体替换应该算是比较安全的做法了。不过昨天比较特殊,我是将网站上旧的目录先删除掉,再将新的mv过去。造成了status.html的丢失。事先确实把这个文件给忘记了。只是吐槽下lvs的健康性检查方式,确实有些麻烦。
      

  3.   

    看不懂   不知啥叫lvs。ShadowSniper 大哥,你在的公司是不是狠大型的;方便告诉我不。雅虎、百度?
      

  4.   

    lvs就是一个用于负载均衡和避免单点故障的系统。
    比如你们网站只有一台服务器,那么某天这台服务器down了,你们的网站就立刻罢工了。这对于一些重要的线上服务中是不可接受的。或者你们的网站访问量越来越大,一台服务器已经很难承受了。那么就要镜像复制几台服务器,将用户请求的压力均衡分摊到几台服务器上。一般做负载均衡,有两种方式。dns轮询和lvs vip解析。
    dns轮询的原理是:
    假如你有3台服务器3个ip,每个服务器都存放有相同的你们网站的脚本之类的。有一个域名。第一个请求发来,它会先解析到第一个ip,第二次解析到第二个第四个再解析到第一个。这样就可以达到web server负载均衡的目的。就像给db做主从。不同节点的web server去读不同的slave,写的时候统一写master。lvs是这样实现的:
    你们的域名,会被固定解析到一个vip,这里称虚拟ip。由这个vip,根据一定算法解析至你们的3台服务器真实的ip,这里称real ip。解析算法比如可以采用将real ip地址转int后与3进行求余。来决定解析到哪台。与dns轮询一样,他们都有负载均衡的效果。不过他比dns轮询还多了一个步骤,就是对你3台服务器进行健康性检查,按我开头说的,要求你在网站根目录放一个静态文件,里面输出个ok。vip服务器会有个心跳机制,每xx秒去分3个线程去请求你那3台服务器的80端口,访问那个status.html,看看能否得到那个ok,如果发现某一台的请求超时了,他会认为这台机器down了,并在自己的内存中标记,某台机器down了。暂时从解析算法中移除那台机器。公司名就不透露了。
      

  5.   

    nginx的反向代理也具备这种功能。你可以给几台服务器或一台服务器的几个端口做一个upstram集群,将他们绑定到同一个域名上。你还可以给集群中每个机器设置权重,这个权重会影响他的解析算法。并且nginx也会做健康性检查,他的健康性检查就比较简单,也是分出一些线程定时向集群中的机器http端口发个包。发现哪个超时了,就暂时把它从解析中移除。直到心跳包探测到那台机器已经恢复。
      

  6.   

    ShadowSniper  谢谢你的解答    我明白一些了,就是用多服务器去均衡负载。而每台服务器有个文件status.html是用来输出服务器状态的,而你今天就是因为搞丢了这个文件。导致运行异常。
      

  7.   

    嗯,就是那个意思这些东西其实是服务器运维去做的,我们作为开发人员大致了解原理就行了。我也只是知道个皮毛。不过为啥lvs就不能像nginx的健康检查方式实在不解。不过了解一些总是好的,当你们的网站压力越来越大,而你从算法之类的角度无法再继续优化时,可以考虑向你们老板申请加服务器了。至于加多少台,是可以有办法算出来的。找到你们网站最慢的缓解。用压测软件压力测试。得出服务器的大致qps,每秒响应数。
    然后从服务器日志中分析出每天pv最高峰时段,每秒并发请求数的值。用这个值去除以服务器qps,就可以知道,需要加几台相同配置的服务器了。
      

  8.   

    运维那边应该很了解才对吧。
    加个html来检查这确实不好。
      

  9.   

    &…… lvs,第一次听到啊。。牛人。