1.上线前要准备的内容
(1)发布的程序包:检查程序包的版本是否正确(可以看打包后GIT信息是否是你预期的代码版本)?程序包里面的配置文件是否改成了生产环境的了?
(2)数据库脚本:脚本是否有遗漏?是否有人没提交?脚本是否执行有问题?脚本的执行用户是否正确?每个脚本(无论是DDL还是DML)都必须有对应的回退脚本,一般是先执行DDL再执行DML,如果同一种类型的执行有先后需要写清楚(比如先创建表,才能建索引)。(一般通过工具和制度来保障)
(3)版本说明文档是否具备:比如哪里需要一个目录,linux下需要新增一个用户或者添加一个权限等等这些都需要在文档中体现。还有,多装一个Tomcat或者JDK,端口是多少?拷贝已有的还是重新装?
(4)软件是否准备好了,比如需要安装一个redis,那么就需要redis的软件准备好,安装指导文档也准备好,安装完后怎么启动怎么停止,怎么验证redis安装结果,应急措施有了吗?当redis有问题的时候,怎么一步步查看问题在哪里?
(5)功能是否已经通过了测试了,测试人员是否已经同意上线了?产品经理试用过系统的功能了吗?是否符合客户的预期。
(6)集成部署方案:提供部署方案,总共有多少台虚拟机,需要部署多少个应用节点,多少个数据库,是采用集群部署还是主备部署?是否需要缓存redis,redis采用哪种部署模式?应用/数据库/redis的端口多少?并且各自部署在哪些台主机上部署?安装部署完毕后,需要先启动哪个应用,再启动哪个应用。
(7)版本上载评审是否通过了?以上的材料都需要经过开会评审,没有问题后才允许上载到生产。
2.上线的工作事项
(1) 发布公告,通知客户和使用者,上线的时间和影响范围。
(2)停止应用,再停数据库。
(3)备份应用/中间件/数据库/配置文件等。
(4)启动数据库。
(5)先执行数据库变更脚本,先执行DDL脚本,按照要求先后执行,再执行DML脚本。
(6)替换程序包,修改配置。
(7)启动应用程序,启动应用时需要及时关注启动日志,如果有报错一定要处理。
(8)将所有应用都启动完毕后,开发人员先进行主体功能使用,功能没问题了再通知测试人员进行功能验证。
(9)如果在限定的时间内没有完成上线升级,则需要回退版本,将之前备份的进行回滚。
(10)如果数据库数据太大,没法全量备份的话,就需要每个脚本都需要进行事先备份。