然后同事那边上线版本,也被lvs害了一把,ops把我们的lvs给加错了。dig www.xxx.com,发现其中两台是我们服务器的real ip,还有一个竟然是vip。这叫啥啊?如果dns轮询到我们那两台服务器则正常,如果轮询到那台vip,vip还会再被解析一次才能到我们的两台real ip。等于是多了一次没必要的解析。线上遇到的现象就是,如果轮询到我们的两台real ip,页面访问速度非常快。如果轮询到个vip,页面非常慢!找了半天原因,都以为是代码问题或者是缓存之类的。因为这个太隐蔽了。
调试欢乐多
简单粗暴式的覆盖,
不合理的流程,
和lvs有关系吗,呵呵。
没办法,现实和理想差距太大。我总想规范开发-上线流程。但每天需求多如牛毛,而且项目中和同事都们是交叉开发的,服务器扩充速度很快。真的很难在短时间思考好如何规划才是最佳的流程。打包整体替换应该算是比较安全的做法了。不过昨天比较特殊,我是将网站上旧的目录先删除掉,再将新的mv过去。造成了status.html的丢失。事先确实把这个文件给忘记了。只是吐槽下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了。暂时从解析算法中移除那台机器。公司名就不透露了。
然后从服务器日志中分析出每天pv最高峰时段,每秒并发请求数的值。用这个值去除以服务器qps,就可以知道,需要加几台相同配置的服务器了。
加个html来检查这确实不好。