一次设计高可用网站的实战经验

news/2024/5/9 20:13:24/文章来源:https://blog.csdn.net/weixin_33691700/article/details/85083219

我公司前段时间做了一个活动,花了5000块购买了5台虚拟机(每台cpu 为单核2GHZ,内存为1.5GB)做了一个两个月大活动,我设计支持高并发的系统如下:
活动的特点是高并发,逻辑不是很复杂,因此我采用DNS做负载均衡器+nginx做前端+php开发+redis数据库的分布式结构。
使用DNS负载均衡的原因是,我没有更多的钱买负载均衡,其次负载均衡至少得双机主备,再次DNS负载均衡不用部署配置,比lvs简单多了。
为了解决跨域的session问题,我使用了一个redis数据库来存储session的id,这样我的php程序得改成不读取本地session,而去读取redis中的session数据。可以实现跨域的session,不用担心分布式带来的session问题。
同时redis可以用作存储用户数据,例如微博id,生成图片路径等等信息,并发性要比mysql高得多。
为了解决redis单点故障,我添加了一个从redis数据库实时和主redis数据库进行同步,若是主数据库挂了,可以用从数据库来顶替

 

 

 

但是这个网站每台机器上都会生成各自的图片,而这些图片需要在网站上显示,这样的话存在一个问题:
某个用户是通过DNS只能请求到一台机器上(VM3)上,那么在网站上出现的VM2,VM4,VM5的图片就无法显示了。
我冥思苦想,想到了一个好办法:就是利用nginx的proxy模块来实现:
1)VM2上由程序生成的每一张的图片都存在目录(10.200.225.158--VM2的内网ip)下,VM3上由程序生成的每一张的图片都存在目录(10.200.226.56)下...
2) 这样VM2下的图片路径就是http://www.a.com/10.200.225.158/xxx.jpg,VM3下的图片就是http://www.a.com/10.200.226.56/xxx.jpg
3)我VM2上的nginx上配置使得:
    3.1)当用户被DNS解析到VM2上时,若URL是http://www.a.com/10.200.225.158/xxx.jpg时就直接读取本地图片
    3.2)当用户被DNS解析到VM2上时,若URL是http://www.a.com/10.200.226.56/xxx.jpg时就通过VM2代理读取远程的VM3上的图片
    3.3)当用户被DNS解析到VM2上时,若URL是http://www.a.com/10.200.55.39/xxx.jpg时就通过VM2代理读取远程的VM4上的图片
    3.4)当用户被DNS解析到VM2上时,若URL是http://www.a.com/110.200.51.143/xxx.jpg时就通过VM2代理读取远程的VM5上的图

 

 

 

 

也就是说当www.a.com解析到vm2,若是要显示vm3上生成的图片的话,得通过vm2的代理去获取,由于我设置的代理的ip都是内网的,因此不占用外网ip的网络资源,不影响用户的访问速度。  


vm2的nginx配置文件如下

 

  1. location /10.200.226.56 {  
  2.              root    /opt/tmp/;  
  3.              proxy_redirect off ;  
  4.              proxy_set_header Host $host;  
  5.              proxy_set_header X-Real-IP $remote_addr;  
  6.              proxy_set_header REMOTE-HOST $remote_addr;  
  7.              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  8.              client_max_body_size 50m;  
  9.              client_body_buffer_size 256k;  
  10.              proxy_connect_timeout 30;  
  11.              proxy_send_timeout 30;  
  12.              proxy_read_timeout 60;  
  13.              proxy_buffer_size 256k;  
  14.              proxy_buffers 4 256k;  
  15.              proxy_busy_buffers_size 256k;  
  16.              proxy_temp_file_write_size 256k;  
  17.              proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;  
  18.              proxy_max_temp_file_size 128m;  
  19.              proxy_pass    http://10.200.226.56:80;  
  20.                
  21. }  
  22.  
  23. location /10.200.55.39 {  
  24.              root    /opt/tmp/;  
  25.              proxy_redirect off ;  
  26.              proxy_set_header Host $host;  
  27.              proxy_set_header X-Real-IP $remote_addr;  
  28.              proxy_set_header REMOTE-HOST $remote_addr;  
  29.              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  30.              client_max_body_size 50m;  
  31.              client_body_buffer_size 256k;  
  32.              proxy_connect_timeout 30;  
  33.              proxy_send_timeout 30;  
  34.              proxy_read_timeout 60;  
  35.              proxy_buffer_size 256k;  
  36.              proxy_buffers 4 256k;  
  37.              proxy_busy_buffers_size 256k;  
  38.              proxy_temp_file_write_size 256k;  
  39.              proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;  
  40.              proxy_max_temp_file_size 128m;  
  41.              proxy_pass    http://10.200.55.39:80;  
  42.                
  43. }  
  44. location /10.200.51.143 {  
  45.              root    /opt/tmp/;  
  46.              proxy_redirect off ;  
  47.              proxy_set_header Host $host;  
  48.              proxy_set_header X-Real-IP $remote_addr;  
  49.              proxy_set_header REMOTE-HOST $remote_addr;  
  50.              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  51.              client_max_body_size 50m;  
  52.              client_body_buffer_size 256k;  
  53.              proxy_connect_timeout 30;  
  54.              proxy_send_timeout 30;  
  55.              proxy_read_timeout 60;  
  56.              proxy_buffer_size 256k;  
  57.              proxy_buffers 4 256k;  
  58.              proxy_busy_buffers_size 256k;  
  59.              proxy_temp_file_write_size 256k;  
  60.              proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;  
  61.              proxy_max_temp_file_size 128m;  
  62.              proxy_pass    http://10.200.51.143:80;  
  63.                
  64. }  
  65.  
  66. location ~ \.php$ {  
  67.            fastcgi_pass   127.0.0.1:9000;  
  68.            fastcgi_index  index.php;  
  69.            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;  
  70.            include        fastcgi_params;  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_769821.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站的灰度发布

2019独角兽企业重金招聘Python工程师标准>>> 1、概述 在传统软件产品发布过程中(例如微软的Windows 7的发布过程中),一般都会经历Pre-Alpha、Alpha、Beta、Release candidate(RC)、RTM、General availabil…

阿里云服务器:IIS网站的架设(一、环境设置与安装IIS网站 二、网站的基本设置 三、建立新网站(未完待续))...

Windows Server 2012 R2的Internet Information Services (IIS)网站的模块化设计,可以减少被攻击面并减轻管理负担,让系统管理员更容易架设安全的具备高扩展的网站。 欢迎关注github:https://github.com/saucxs 一、环…

只有搞Java开发的才知道!java相关技术网站

第一篇Linux基础学习篇 目录 第零章﹑计算机概论关于电脑的硬件组成部分﹐其实你可以观察你的台式机来分析一下﹐依外观来说这家伙主要可分为三部分﹐分别是∶ 输入单元∶包括键盘﹑鼠标﹑读卡机﹑扫描仪﹑手写板﹑触摸屏等等一堆﹔主机部分∶这个就是系统单元﹐被主机机箱保护…

MVC网站发布到 IIS

接下来将发布成功的站点部署到iis7.0。 步骤如下: 1. 安装 Microsoft .net FrameWork 4.0安装包(网站开发时候使用的就是.net framework4.0框架); 2. 安装ASP.NET MVC 4.0 ; 3. 设置IIS的“ISAPI和CGI限制”中的“ASP.NET v4.0.0.30319”为允…

Slog42_支配vue框架初阶项目之博客网站-单页-默认头像的布局和定位

ArthurSlogSLog-42Year1GuangzhouChinaAug 19th 2018GitHub掘金主页简书主页segmentfault从业之路不同 机缘也不同 人生轨迹由机缘组成 想要有什么样的机缘 也就明白了自己要走的路 开发环境MacOS(High Sierra 10.13.5) 需要的信息和信息源: css 元素框的类型HTML D…

在电脑上测试手机网站全攻略

最近公司要开发网站的移动版,让我准备准备知识,话说本人开发移动网站的经验还真不多,最悲剧的事情就是我的手机是个经典的诺基亚,而且公司还不给配手机,这是有多扣啊,没办烦啦,没有手机就用电脑…

教资报名网站显示无法访问此页面

网上很多人解决办法是 把网址复制出来, 开头的https:// 换成 http:// 添加到浏览器的兼容性页面应该就能打开了 ,最终效果是可以的,但是治标不治本, 在选完笔试科目后 点击付款就会出现和之前相同的问题 2.最终解决办法如下 勾选为TLS 1.2, 1.1即可

常用工具网站

1. 在线PDF转Word免费的转换器工具 https://www.pdfkz.com/pdf-to-word 2. 在线图片免费拼接 https://www.toolnb.com/tools/tppj.html

适合程序员学习的国外网站推荐

1.Baeldung 面向Java开发的学习网站, 网站页面精美, 风格略像Spring官网 https://www.baeldung.com/ 2.GeeksforGeeks 里面的内容不止于Java开发, 数据结构, 算法, 前端, 机器学习, 面试等等 GeeksforGeeks | A computer science portal for geeks 3.javaTpoint 适合初学…

程序员学习的5个国外网站推荐

📒一、StackOverFlow📒 链接 : Newest Questions - Stack Overflowhttps://stackoverflow.com/questions StackOverFlow作为全球最大的技术问答交流网站, 浏览时也是纯英文网站所以首先养成用英文来搜索你的问题, 类似CSDN中的问答 📓二、…

【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构

随笔- 80 文章- 1 评论- 531 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构 一、业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长。特别是在用户访问高…

Oracle Erp常用网站

2014-01-01 Created By BaoXinjian 英文站 Oracle EBS R12 官方参考手册(User Guide, Implementation Guide)Oracle Integration Repository关于各类API、接口等信息。Oracle White Paper LibraryOracle白皮书,涉及数据库、应用、解决方案等多个领域。Oracle E-Deli…

开发网站接触到的软件---自我总结

1.Dreamweaver(DW) 可视化工具,DW的内存占用大概平常80M左右,刚开始写网页就是用的DW,后面发现webStorm的功能更加强大,DW后期使用感觉很卡 优点:图片热区的设置,用DW很方便。 2.web…

百度SEO:最新搜索引擎排名因素有哪些?

搜索引擎排名规则,一直以来都是一个争论的焦点,随着百度算法的不断调整,实际上它是一个动态因素,自从熊掌号上线以来,可谓搜索排序大洗牌,毫无疑问内容是基石,它几乎更古不变,而链接…

结合bootstrap与后端CI框架的网站开发(一)

2019独角兽企业重金招聘Python工程师标准>>> CI框架是一套基于MVC的后端框架,历史比较就远了,非常轻量级,对于一些小网站的开发已经绰绰有余。不过我仅对VIEW层,也就是前端部分进行记录。如有错误,希望得到…

Nginx+Keepalived实现网站高可用方案

转载:http://openskill.cn/article/166 公司内部 OA 系统要做线上高可用,避免单点故障,所以计划使用2台虚拟机通过 Keepalived 工具来实现 nginx 的高可用(High Avaiability),达到一台nginx入口服务器宕机&#xff0c…

网站爬取工具_介绍一些比较方便好用的爬虫工具和服务

在之前介绍过很多爬虫库的使用,其中大多数也是 Python 相关的,当然这些库很多都是给开发者来用的。但这对一个对爬虫没有什么开发经验的小白来说,还是有一定的上手难度的。现在市面上其实也出现了非常多的爬虫服务,如果你仅仅是想…

index加载显示servlet数据_可视化动态网站柱状图加载

准备一个动态网站工程将已经完成的静态页面及资源拷贝到WebContent目录下启动Tomcat,访问页面,成功后代表静态页面访问成功准备一个Servlet,作为左边柱状图的入口类配置Web.xml,将Servlet准备好将引入的包拷贝或者引入到项目里引入的包&#…

python访问网站添加请求头_python request.urlretrieve的使用 如何添加请求头

python3 request.urlretrieve 添加请求头下载图片import urllib.requestopener urllib.request.build_opener()opener.addheaders [("User-agent", "Mozilla/5.0")]urllib.request.install_opener(opener)urllib.request.urlretrieve("type URL her…

wordpress站点 HTML,如何将WordPress生成HTML静态化网站

对于将wordpress生成HTML静态化网站,很多人会使用cos-html-cache的插件实现。这个插件非常简洁小巧,直接在原网站上生成首页和文章页的html文件,不过,这个插件只支持文章静态化,不支持页面、标签和分类的静态化&#x…