目前在国外,互联网巨头如Google、Facebook、Amazon、LinkedIn、Netflix、Airbnb,传统软件公司如Adobe、IBM、Microsoft、SAP等,亦或是网络业务非核心企业如苹果、沃尔玛、索尼影视娱乐、星巴克等都在采用DevOps或提供相关支持产品。那么DevOps究竟是怎样一回事?
http://www.cnblogs.com/cy163/p/3869175.html
http://www.importnew.com/17770.html
什么是DevOps
DevOps (a clipped compound of "development" and "operations") is a software development process that emphasizes communication and collaboration between product management, software development, and operations professionals. DevOps also automates the process of software integration, testing, deployment and infrastructure changes.[1][2] It aims to establish a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.https://en.wikipedia.org/wiki/DevOps
DevOps是强调产品管理,软件开发和运营专业人员之间沟通和协作的软件开发过程。DevOps还可以自动化软件集成,测试,部署和基础设施变更过程。DevOps旨在建立一套快速、频繁、稳定地进行构建,测试,发布软件的文化与环境。https://en.wikipedia.org/wiki/DevOps
2 DevOp工具链
Code — Code development and review, version control tools, code mergingBuild — Continuous integration tools, build statusTest — Continuous testing tools that provide feedback on business risksPackage — Artifact repository, application pre-deployment stagingRelease — Change management, release approvals, release automationConfigure — Infrastructure configuration and management, Infrastructure as Code toolsMonitor — Applications performance monitoring, end–user experiencehttps://en.wikipedia.org/wiki/DevOps#DevOps_toolchain
1
DevOps是什么?从哪里来?****DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps概念早先升温于2009年的欧洲,因传统模式的运维之痛而生。
DevOps是为了填补开发端和运维端之间的信息鸿沟,改善团队之间的协作关系。不过需要澄清的一点是,从开发到运维,中间还有测试环节。DevOps其实包含了三个部分:开发、测试和运维。
换句话说,DevOps希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。专家们总结出了下面这个DevOps能力图,良好的闭环可以大大增加整体的产出。
历史变革由上所述,相信大家对DevOps有了一定的了解。但是除了触及工具链之外,作为文化和技术的方法论,DevOps还需要公司在组织文化上的变革。回顾软件行业的研发模式,可以发现大致有三个阶段:瀑布式开发、敏捷开发、DevOps。DevOps早在九年前就有人提出来,但是,为什么这两年才开始受到越来越多的企业重视和实践呢?因为DevOps的发展是独木不成林的,现在有越来越多的技术支撑。微服务架构理念、容器技术使得DevOps的实施变得更加容易,计算能力提升和云环境的发展使得快速开发的产品可以立刻获得更广泛的使用。
(注:上图摘自上月红帽副总裁Ashesh Badani的一次新闻分享会)
2
DevOps的几个关键问题****好处是什么?****DevOps的一个巨大好处就是可以高效交付,这也正好是它的初衷。Puppet和DevOps Research and Assessment (DORA) 主办了2016年DevOps调查报告,根据全球4600位各IT公司的技术工作者的提交数据统计,得出高效公司平均每年可以完成1460次部署。与低效组织相比,高效组织的部署频繁200倍,产品投入使用速度快2555倍,服务恢复速度快24倍。在工作内容的时间分配上,低效者要多花22%的时间用在为规划好或者重复工作上,而高效者却可以多花29%的时间用在新的工作上。所以这里的高效不仅仅指公司产出的效率提高,还指员工的工作质量得到提升。DevOps另外一个好处就是会改善公司组织文化、提高员工的参与感。员工们变得更高效,也更有满足和成就感;调查显示高效员工的雇员净推荐值(eNPS:employee Net Promoter Score)更高,即对公司更加认同。快速部署同时提高IT稳定性。这难道不矛盾吗?快速的部署其实可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。而且,DevOps小步快跑的形式带来的变化是比较小的,出现问题的偏差每次都不会太大,修复起来也会相对容易一些。
因此,认为速度就意味着危险是一种偏见。此外,滞后软件服务的发布也并不一定会完全地避免问题,在竞争日益激烈的IT行业,这反而可能错失了软件的发布时机。
3
为什么DevOps会兴起?****为什么会继续火下去?****条件成熟:技术配套发展技术的发展使得DevOps有了更多的配合。早期时,大家虽然意识到了这个问题的,但是苦于当时没有完善丰富的技术工具,是一种“理想很丰满,但是现实很骨感”的情况。DevOps的实现可以基于新兴的容器技术;也可以在自动化运维工具Puppet、SaltStack、Ansible之后的延伸;还可以构建在传统的Cloud Foundry、OpenShift等PaaS厂商之上。来自市场的外部需求:这世界变化太快IT行业已经越来越与市场的经济发展紧密挂钩,专家们认为IT将会有支持中心变成利润驱动中心。事实上,这个变化已经开始了,这不仅体现在Google、苹果这些大企业中,而且也发生在传统行业中,比如出租车业务中的Uber、酒店连锁行业中的Airbnb、图书经销商Amazon等等。能否让公司的IT配套方案及时跟上市场需求的步伐,在今天显得至关重要。DevOps 2016年度报告给出了一个运维成本的计算公式: 停机费用成本 = 部署频率 * 版本迭代失败概率 * 平均修复时间 * 断电的金钱损失来自团队的内在动力:工程师也需要对于工程师而言,他们也是DevOps的受益者。微软资深工程师Scott Hanselman说过“对于开发者而言,最有力的工具就是自动化工具”(The most powerful tool we have as developers is automation)。工具链的打通使得开发者们在交付软件时可以完成生产环境的构建、测试和运行;正如Amazon的VP兼CTO Werner Vogels那句让人印象深刻的话:“谁开发谁运行”。(You build it, you run it)
4
实现DevOps需要什么?********硬性要求:工具上的准备上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下:代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
、数据库部署脚本
1)add.sh 创建 grp_000* 库,在该库下创建schema :grp_000*、log_000*、stat_000*。其中序列号从1开始递增,库的序列号和schema序列号一直
./add.sh 创建线上库
./add.sh test 创建测试库(参数为test)
./add.sh train 创建联系库(参数为train)
[[图片上传失败...(image-2d3ade-1510644263836)]
2)add_pms.sh 创建pms schema, 在grp_000*下创建名称为pms_000*_00000* schema。 标黄部分序列号和所属库一直,标蓝的序列号从1开始递增
./add_pms.sh grp_000* (参数为库名)
[[图片上传失败...(image-d468b-1510644263836)]
2、备份脚本
1)备份非pms库,备份文件会打tar压缩包
pg_backup_all.sh
[[图片上传失败...(image-8f2208-1510644263835)]
2)夜审备份
A、夜审前备份
pms_before_night_audit.sh pms_0001_000001 (参数为pms类schema名称)
[[图片上传失败...(image-9e18ed-1510644263835)]
pms_before_night_audit.sh](https://dev.jointwisdom.net/confluence/download/attachments/29101250/pms_before_night_audit.sh?version=1&modificationDate=1509520379000&api=v2)
B、夜审后备份
pms_after_night_audit.sh pms_0001_000001 (参数为pms类schema名称)。 判断依据 hpt_cmm_hoteldate表字段ngt_dt大于今天时间。
[[图片上传失败...(image-7d5712-1510644263835)]
3、数据迁移
1)单库迁移(库为单位)
备份文件位置/mnt/ops/scripts/test_env/pg_migrate, 备份文件库名.sql
a.备份./export_db.sh grp_0001 (参数 为库名)
[[图片上传失败...(image-31931b-1510644263835)]
b.拷贝备份文件到要目标服务器下的 /mnt/ops/scripts/test_env/pg_migrate
c.导入数据./import_db.sh grp_0001 (参数 为库名)
[[图片上传失败...(image-4df6bf-1510644263835)]
2)单schema迁移(schema为单位)
备份文件位置/mnt/ops/scripts/test_env/pg_migrate ,备份文件库名.schema名称
a. 备份./ schema_migration.sh expect grp_0001 grp_0001 (3参数,第1个 expect 操作类型为导出, 第2个grp_0001为库名, 第3个grp_0001为schema名称)
[[图片上传失败...(image-ec47b8-1510644263835)]
b. 拷贝备份文件到要目标服务器下的 /mnt/ops/scripts/test_env/pg_migrate
c. 导入数据./ schema_migration.sh import grp_0001 grp_0001 grp_test_0001 grp_test_0001 (5参数, 第1个impect 操作类型为入, 第2个grp_0001为导出库名, 第3个grp_0001为导出schema名称,第4个grp_test_0001 为导入库名 第5个grp_test_0001为导入schem名称)
4、新增脚本
1)export_template_and_scp.sh
[[图片上传失败...(image-e14791-1510644263835)]
export_template_and_scp.sh](https://dev.jointwisdom.net/confluence/download/attachments/29101250/export_template_and_scp.sh?version=1&modificationDate=1509520379000&api=v2)
导出模板并传输到联系库,供线上和练习系统部署库使用
2)transmit_dev_to_train.sh 库名grp_0001
导数数据库,传输到联系库
[[图片上传失败...(image-70d672-1510644263835)]
3)export_template_and_scp.sh 库名grep_train_0003
练习库导入