1、上线的流程1. 上线流程包含下列几个方面:1.1. 网络规划1.2. 系统规划1.3. 数据迁移2. 网络规划包含的内容2.1. 挑选机房2.2. 是否需要划分多个网段2.3. 出口是否需要 VSRP2.4. 交换机之间如何进行备份2.5. 各个交换机之间的连接速度大小3. 系统规划包含的内容3.1. 挑选服务器3.2. 选择存储3.3. 选择操作系统3.4. 网站如何进行分层3.5. 各个应用如何良好分配到不同的服务器上3.6. 系统的监控3.7. 系统的备份4. 数据迁移4.1. 静态存储的迁移4.2. 数据库的迁移选择机房选择机房在中国是一个非常头疼的事情,你必须考虑到你网站所服务的对象
2、是属于网通还是电信,以及其它小的运营商。不过在国外基本没有这样的问题。只要选择路由好点的基本就可以了。从国内到国外服务器之间如果能够在保持在 20 跳以内就算可以的了。要是你还是不放心,要进行世界各地的测试,那可以找类似的测速网站来进行测试。比如 Banreee, Networkbench, gamez 都是比较好的测试网站。网段规划在机房选择好以后,就要进行网段规划了,特别是当你内部服务器之间交互非常频繁的情况下,那就更要很好的进行规划了,不同需求的服务器必须放在不同的 VLAN 之中,特别嫉划分非常大的网段,那样广播风暴就会比较严重。分网段有 2 种情况我个人认为,有人是把整套的服务器放在
3、同一网段中,这一整套服务器包含了所有的前端,中间层和后端以及数据库,这个感觉是游戏类的会进行这样的规划。还有一种是所有前端一个单独的 VLAN,中间层一个单独网段,后端存储一个网段,数据库单独一个网段。这种当你网站规模比较小的情况下就不能进行这样的划分,毕竟交换机没那么多,以后如果要把服务器换做其它用途,还必须更改交换机某个端口的 VLAN 号,一旦改的多了连自己都记不清了。VSRPVSRP 是一种交换机的高级协议,用来 2 个交换机之间进行互相冗余的协议。如果你 2 个交换机之间要做 VSRP,那一般是需要 6 个公网 IP,3 个是指向机房网关,另外 3 个是做本地服务器的网关。其中有 2
4、 个是作为虚拟 IP 来进行使用的。所有内网服务器都要指向那个内部的虚拟 IP。这样 2 个交换机之间就算有一个down 了,那也不会造成网站无法访问。但是这种需要比较高端的交换机,比如H3C 的 S5500 EI 系列。而且还要 2 个交换机起码要互联 4 个光纤,这样保证 2个交换机互相数据的交互。而下面的交换机也要各连 2 根或者 1 根光纤到 2 个交换机,比较占用交换机端口。所以一般都是要买 48 口的才比较保险。如果只是小型网站,那这些也就没有必要了。交换机备份交换机备份有 2 种,一种是热备,一种是冷备。先说冷备,冷备就是把一个交换机配置成跟线上运行的交换机一样,一旦线上的出现问
5、题后,通知机房更换交换机,并且重新连线跟服务器之间的和上层交换机之间的。热备就是一旦一个交换机出现问题后自动切换到另外一个交换机上,而不需要通知机房重新接线,服务器也不需要重新连线。但是这种方案需要服务器起码要有 4 个网卡,然后交换机直接也要做好冗余设置,这样比较耗费钱,当然你如果不缺钱完全可以使用这种方案。交换机之间的连接速度这个看具体的业务,核心交换机之间最好要有 4G 的上行和下行带宽,而核心有下层的交换机也起码要有 2G 的带宽,不然你数据内部交互非常频繁就会出现瓶颈。而挑选交换机也要着重考虑交换机的背板带宽。如果背板带宽都不高,那交换机之间连接速度再高也没啥用啊。挑选服务器挑选服务
6、器是个复杂的过程,首先要确定你的需求,比如你的网站数据库是属于 read 多,update 和 insert 比较少,那你硬盘只需要 raid1 或者 raid5 就可以了。那就只需要 3 块硬盘就可以。而如果你的数据库属于 Update 和 insert比较多的话,那硬盘最好是 raid0+1,这样就更好的发挥硬盘性能。而对于 CPU和内存的选择,看你的需求是需要大量的 CPU 还是内存,如果你只做 squid 这样耗内存的程序,那 CPU 只需要比较低的,而内存就要选要多的,具体看你需求,有些公司直接上到 128G 内存这样的。而有些程序只是耗 CPU,而对于内存需求比较低,这个就是你要选
7、择一个平衡,这样好以后可以更换成其它用途。而选择好 CPU,内存和硬盘之后就要选择服务器厂商了,现在几乎主流的服务器厂商都有各种型号的服务器,也可以进行自定义,特别是当你需求量特别大的。选择服务器的时候还得测试下耗电的情况,就好比以前测试过 H 品牌的服务器和 L 品牌的服务器在配置同等情况下耗电量差别有 30%。这样同样一个机柜就可以增加几台机器。选择存储存储有专业的也有非专业的,专业有 NETAPP,EMC 这样的公司。而没钱而又数据不是增长特别快的只是需要 NFS 就可以了,也有公司会自己配机器进行存储,现在 2T 的 SATA 硬盘也很便宜的。而一些需求更高的互联网公司,有些用户上传的
8、数据每天就 2TB 以上,那用 NFS 肯定是不合适的,在不使用专业存储的前提下,那只能选择 GFS 这样的分布式文件系统来进行存储了。这个现在有比较多的解决方案,有 YAHOO 的 HADOOP,redhat 的 GFS, 还有其它的如 Fastfs 等等,但是每种 GFS 都有自己适应的需求,有的是针对大文件例如视频文件这样的存储,而有的是针对小文件如各种日志的存储。选择操作系统操作系统作当然是 linux 的为主了,看各种需求也有一些适合其它操作系统,比如做个网关服务器,那使用 Freebsd 就合适的。而作为 web 网站需求还是用Linux 好了,操作系统有 gentoo, ubun
9、tu, centos, opensusu,这些现在还都是开源免费的。选择操作系统不光要看操作系统本身,还有所带的驱动,要是装上了服务器,运行后发现操作系统自带的网卡驱动出问题了,那就麻烦了。像这次装的 DELL R710 的服务器上,装了 centos 居然网卡驱动有问题,还好测试的时候发现了问题,用补丁给解决了。不然要是在线上跑了再出问题就麻烦了。所以买服务器的时候还得去官方网站查它做支持的操作系统。选择好操作系统就要看选择什么内核了,2.6.30 和 2.6.31 在有些应用程序跑起来还是差别很大的。特别是对于多线程程序的支持。选择好文件系统,这个现在我只是选择 ext3,毕竟非常成熟,而
10、 JFS, EXT4 还是不敢在线上直接使用。网站分层网站分层,对于大型网站这个是必须的,负载均衡器(LVS, nginx, F5,Netscaler),前端 web 服务器(Tomcat, apache, resin, lighttpd, nginx 等等),中间层(如 memcached,ice)等,数据库(Oracle, postgresql, mysql 等等)。这个还是需要程序开发之前就应该计划好的。而数据库的分区也是很重要的,可以把不同的数据库分布到不同机器上,同时做好 master-slave,实现读写分离。系统的监控在系统正式上线开放之前可必须是搭建好的,有些公司会有自己的一套
11、监控系统,也有很多自定义的监控内容。但是更多的是使用开源的监控产品 nagios, cacti, munin 等等。而 nagios 我个人觉得非常不错,特别是结合 nrpe 作为客户端,可以自定义很多监控需求,你自己可以编写监控内容,比如监控内存啊,监控 Memcached 等等。而 nagios 更是提供了很多监控脚本。而 nagios 现在不光能进行发报警邮件,还能发短信,发 msn。而对于系统历史的展示,用 cacti和 munin 就是非常不错的。Cacti 是基于 snmp 的,易于监控,但是一旦跨网络,比如跨个电信网通啥的,那你用 cacti 就会发生经常发生取不到数据的情况发生
12、。而且对于服务器太多的情况下就会发生 5 分钟一个轮询都来不及,这个就需要对 cacti 本身进行优化,这个直接参考 zys.3322.org 上面的提示一步步的进行优化,主要是 cacti 默认的那个数据库居然所有表都没有索引。而 munin也是基于客户端,是走 tcp 协议,这样就相比 snmp 的稳定的多。而且也不需要数据库支持。系统的备份系统的备份也是需要上线之前做好。备份有简单的 tar 和比较企业级的开源产品 bacula 等等。Bacula 之前也在内部使用过,对于大型的备份确实是比较好的,备份方式也有增量,全体备份等等各种方式。它有中心服务器,备份服务器,客户端,也支持磁带备份
13、等等。也许我不怎么会用,因为它备份完成了也是单个文件,这样对我来说不够可视化,虽然 bacula 也支持很好的恢复,但是不够直接,万一处理不好就实在没法恢复了。所以我还是选用了直接的 tar 来进行备份。首先要选择好哪些东西是需要备份的,在我这里主要是数据库和用户上传的数据,而程序性文件本来就是分布在多台机器上,只需要简单的备份就可以了。用户上传的数据现在是基本 5 分就同步到其它文件服务器上,并且进行一次增量备份。同时每天都会一次进行一次完整的备份。而对于数据库,首先是必须要有 slave,同时还必须每 30 分钟备份一次,myisam 数据引擎的还是比较容易备份的,可以直接备份数据文件,也
14、可以进行mysqldump,也有 mysql 默认提供的 Hotcopy。而 Innodb 的可以用 mysqldump 直接导出 sql 文件和直接进行 xcopy 导出数据文件。但是个人觉得 xcopy 性能上也并不是特别优越,速度上也不是特别快,而且以后需要恢复备份的时候还必须安装一下 xcopy 才可以。每 30 分钟备份一次,同时每天凌晨就保留当天唯一一份,而不是全部保留。静态数据迁移这个完全可以实现通过 rsync 来进行,而一旦真的开始迁移,还是使用 rsync来进行同步,而最好不要进行 tar 来进行迁移,这样首先是传输的文件太大,其次未必能完全同步。数据库迁移这个有 2 种方
15、式,一种是本身就有 slave,这样直接切换的时候把这个 slave专成 master 就可以了,但是如果你是临时搭建的 slave,那很有可能会造成数据库不同步,毕竟你在搭建 slave 的时候 master 肯定是在进行更新,而你就算slave 指定了从哪个 position 开始,你也会发生同步出错的情况。所以另外一种方式还是停机进行 mysqldump,这个还是最保险的方式,但是当你数据量特别大或者索引特别多的情况下会比较花时间,几乎都是以小时来进行的,但是其实 mysqldump 也是可以进行增量式的备份,其实就是根据 mysql bin log 的 position 来进行增量式备
16、份。完整的网站上线过程首先确定需要新的网站支持多少在线人数,根据这个来确定网站的带宽和服务器数量,然后根据这个服务器的数量和带宽来确定交换机的数量和型号。确定服务器的配置和相关品牌。然后根据这些你必须画出网站的架构图,网络图,网络接线图,服务器接线图。架构图是网站的整体的逻辑架构,是一个整体的逻辑概览网络图是展示网络交换机的逻辑架构,比如 VSRP,VLAN 的配置就在这里展示。网络接线图这里展示的网络交换机直接如何连线,连多少线,要标明到连接哪个端口。服务器接线图,这里展示了服务器的哪些端口接哪个网络交换机的哪个端口。后面 2 个图对于操作人员是最重要的,如果画的不清楚,很可能会耽误很多时间
17、在沟通上。接上线后就需要安装操作系统,这个现在基本都是网络来进行安装了,不会一台台通过光驱来进行安装,这样不光买机器的时候多付不必要的钱,而且安装比较慢,同时光驱有时候还会有使用寿命,有时候时间长了就没办法进行安装了。Redhat 系统的都可以选择 kickstart 来进行远程安装,kickstart 在安装过程中还能安装时候执行自己的系统初始化脚本。比如指定 hostname, 修改相关的 tcp/ip 设置,设置好 Iptables 等等。而对于网络环境特别复杂的服务器必须要在网络配置文件中指定好去各个 vlan 之间的网关,这个以前我都是放到rc.local 中,而这种虽然能在系统启动
18、的时候会自动进行加载,而如果手动启动网卡会丢失这些网络信息。安装完操作系统后,就要进行各自程序文件的部署。相关程序文件部署完毕后就可以进行线上测试,这个不光是应用程序的测试,更要进行压力测试,测试新的系统到底能够承受多大的负载。这个当中可能出现各种各样的瓶颈,这个一般是由于 web 服务器的问题,特别是 resin,tomcat这些出现问题的情况比较大,而 Php 网站由于 fast-cgi 现在往往可以承受更大的并发。另外一个可能的瓶颈会是数据库。比如 Mysql 就需要根据你选择的数据引擎来调整 buffer 的大小,这个是数据库整体性能的调整,个别的调整就需要根据你的 slow log 来进行相应的调整。