答案1
答案2
除非我确实读错了问题,否则我会说对于托管网络应用程序,你的做法是错误的。
我建议有多个节点(虚拟或物理)并使用管理其配置木偶。
您的节点可能是一整架 1U 服务器,也可能是一堆运行虚拟机然后选择您选择的操作系统作为虚拟化客户机。
假设有 4 台服务器,你可以按如下方式设置它们:
- 服务器 1:负载均衡器 + HTTP 节点(运行 Varnish 和 Apache)
- 服务器 2:负载均衡器 + HTTP 节点(运行 Varnish 和 Apache)
- 服务器 3:HTTP 节点 + DB Master(运行 Apache 和 MySQL)
- 服务器 4:HTTP 节点 + DB 从属(运行 Apache 和 MySQL)
如果有第五台服务器运行服务将会非常有利,比如 nagios、munin、用于 PXE 启动环境的 tftpd、用于 kickstart/preseed 文件的小型 HTTP 服务器、DHCPd,或许还有通过 Rocketport 或类似设备的串行控制台。
使用 Puppet 部署自己的系统(而不是使用单个映像)的巨大优势在于,资源实际上是自我记录的。与将映像放到服务器上相比,它更加清晰,更少黑盒。此外,它使映像的更新和更改变得更加简单。
答案3
我不确定我是否回答了你实际上想问的问题,但如果你正在寻找一种方法来获取虚拟机并镜像它,你可以使用我所知道的任何免费虚拟化工具(VMware Server、ESXi、kvm 等)
- 让你的虚拟机包含你需要的一切
- 复制虚拟机
- 对副本进行更改(IP 地址和主机名)
- 启动两个虚拟机
- 插入负载均衡器(硬件或软件,无所谓)
- ..我想不出第 6 步 :)
答案4
尽管 SSI 听起来很令人兴奋,但它们不太可能发挥最佳性能。
由于您的主要目标是 Web 应用,因此您可以(应该!)使用当前的最佳实践。通常,这些最佳实践从以下方面开始:
- 缓存负载均衡器作为前端(squid、varnish、nginx)
- 用于 Web 应用的几个 HTTP 服务器(通常是 apache,也可能是 nginx+FastCGI,等等)
- 数据库
如果做得好,你的第一个瓶颈就是数据库,此时,你应该:
- 向您的 Web 应用添加缓存,以将数据库访问次数降至最低。(现代框架(RoR、Django)包括对 memcached 的强大支持)
- 将一些作业从数据库转移到更专业的应用程序。第一个候选是任务队列(到 rabbitMQ 或类似)和键/值存储(到 tokyo cabinet、resis、mongoDB 等)
- 分配数据库。如果读取次数多而写入次数少,请尝试主/从复制(MySQL 上很容易),但如果这是您的情况,memcached 应该已经吸收了大部分负载。也可以尝试分片。
如果你的规模超过了这个数字(你是 FaceBook 吗?),那么你将不得不重新考虑你的整个结构,就像谷歌一样(他们使用 MapReduce 几乎可以完成所有“离线”工作)。