云原生技术实现Devops自动化运维_第1页
云原生技术实现Devops自动化运维_第2页
云原生技术实现Devops自动化运维_第3页
云原生技术实现Devops自动化运维_第4页
云原生技术实现Devops自动化运维_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技术创新,变革未来云原生技术实现Devops自动化运维01为什么要运维自动化02DevOps03云与容器04互联网企业数据中心 运维盘点目 录Contents05感受DevOps06运维平台介绍01为什么要运维自动化01为什么要运维自动化规模化下的新问题:人力02为什么要运维自动化03为什么要运维自动化04为什么要运维自动化通常企业的整体架构如图所示,客户连接应用服 务器,应用服务器再连接数据库。通常企业中数据库数量不太很多,有上百套数据 库的话,已经是有相当规模的公司了。但是应用 服务器数量会比较多,会是数据库数量的十几倍 甚至几十倍。比如一家企业,可能数据库只有50个,而各类应 用服务器数

2、量,可能达到1000台左右。虽然应用服务器中没有用户数据,但上面存放的 应用程序代码很重要。前面所说的事故,就是有 技术人员将一批应用服务器上的代码删除所至。05为什么要运维自动化至于应用服务器上的代码为什么会被删除?以这家旅游网站的规模,应用服务器的数量应该在万台之上, 达到这个量级,有点混乱是难免的。如下图所示,有可能A应用占用一部分主机,B应用占用了A应用的一 部分主机,B应用还有一部分自己单独的主机。C应用也有一部分单独的主机,但和A、B应用混用一部分主 机。(图看出来很乱,实际的情况只会比这个更乱)A应用B应用C应用C应用06为什么要运维自动化可以看到,图中中间偏左,红色这部分主机非

3、常乱,有些服务器是属于A、C应用,有些服务器是A、B应用, 有些是A、B、C三个应用都有。现在C应用要升级,将原有代码删除、重新部署新的代码。A应用B应用C应用C应用07为什么要运维自动化把这些服务器上的这个应用程 序更新为最新版,那些服务器 上的那个应用迁移到另一批服 务器上。快去。08为什么要运维自动化很可能一个误操作,把同一台机器上的A、B应用都删除了,从而影响了应用。A应用B应用C应用C应用09为什么要运维自动化当然这并不一定是前面所说的某旅游公司故障的原因,我们只是通过这个例子说明一个问题,主机数量太 多之后。乱,是必然的。那么,随之而来的,出故障也是必然的。这就是痛点。A应用B应用

4、C应用C应用02DevOps01DevOps:运维开发)DevOps:运维开发DevOps(英文Development和Operations的组合 是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现 是由于软件行业日益清晰地认识到:为了按时交付 软件产品和服务,开发和运营工作必须紧密合作。起源于SA,系统管理员,逐渐影响到了DBA。02DevOps:运维开发SA:上为应用开发人员,维护应用服务器。 下为DBA维护数据库服务器、存储。03DevOps:运维开发随着企业的壮大,程序员数量会很快增加,应用 程序的数量更是会

5、翻倍的增加。但DBA不会增加。04DevOps:运维开发应用服务器数量越来越多,应用程序的数量也越来越多。05DevOps:运维开发但众多的应用程序就像这山,都是土、石和树构成,但每个山峰绝不相同,每处的风景独一无二。多样化, 这大大提高了运维的难度。06DevOps:运维开发把这些服务器上的这个应用程 序更新为最新版,那些服务器 上的那个应用迁移到另一批服 务器上。快去。07DevOps:运维开发一些简单的操作,执行一次,可以确保不会出问题,但要重复在一百台主机上都执行一遍呢! 人天生喜欢新鲜感,大量重复的劳动,极易让人疲倦,此时,一个不小心,就容易酿成问题。如果有一门简单的语言,可以编写简

6、单的脚本程序,在多台主机上执行同样的操作,问题不就解决了吗!08DevOps:运维开发运维人员掌握开发技术,面对复杂的环境、大批量的目标,通过写简单的小程序,多快好省的完成工作, 就是DevOps。09为什么是Python可供使用的模块多。比Java简单。和操作系统打交道方便。大家都在用,方便招人、也方便找工作。等等。DevOps:运维开发10DevOps:运维开发这个Python程序只有42行(算上空行), 实现的效果却十分惊人,它可以批量在多台主 机上运行指定脚本。roothzmc tools# ./case1.py -host host_list.txt -cmd cmd_list.ao

7、p # 22 #Space:FilesystemSizeUsedAvailUse%Mounted on/dev/sda1241G31G198G14%/tmpfs3.9G911M3.0G24%/dev/shmFree Memory:cachedtotalusedfreesharedbuffersMem:23717858312447330224-/+ buffers/cache:5287330Swap:999909999Process count:233# 23 #Space:Used Avail Use% Mounted onFilesystem/dev/sda1 tmpfsSize 241G7

8、.8G83G146G37% /72K7.8G1% /dev/shmFree Memory:cachedtotalusedfreesharedbuffersMem:159377685825203125864-/+ buffers/cache:150814429Swap:99992879712Process count: 210这是运行的效果,在多台主机(画面上显示的 是两台)上显示空间、内存和进程数。脚本接收两个参数,一个是命令文件: cmd_list.aop,一个是目标列表文件: host_list.txt。这个是主机列表文件:roothzmc tools# cat host_list.txt

9、 TARGET1IPADDR = 22USER = oracle PASSWORD = hzmcdba SCRIPT_DIR = /tmpTARGET2IPADDR = 23USER = oracle PASSWORD = hzmcdba SCRIPT_DIR = /tmp这个是命令文件:roothzmc tools# cat cmd_list.aop echo Space:df -h echoecho Free Memory: free -mechoecho Process count: ps -ef | wc -l12DevOps:运维开发如果要在多台主机上执行某个脚本,使用这个Pytho

10、n 程序就可以完美的完成任务,关键这个Python程序只 有42行代码。这就是Python是DevOps的首选语言的原因。为什么可以在如此短的代码中实现如此强大的功能? 众多的模块是关键。利用现成的模块,就相当于站在巨人的肩膀上。 这个程序用到了三个模块:argparse:解析命令行参数 configParser:解析配置文件 paramiko:远程操作使用已有的模块,往往只用几行代码,就可以实现某 个强大的功能。13对DBA的影响:由于数据库的规模少于主机,但DevOps的需求也在发展,因为DB的规模也正在爆发。非Oracle类数据库,分库分表造成了大量数据库。每个库可能不大,但数据库个数越

11、来越多。阿里云RDS,云数据库下,随着“云”技术发展,云端数据库也会让数据库数量大规模爆发。Oracle 12C中的CDC、PDB(容器数据库),每一个PDB就是一个独立的数据库,这也会促使Oracle数据库数量的扩大。DevOps:运维开发03云与容器01相较于几年前的不知所“云”,云技术的面目正在逐渐清晰起来。面向主机:“硬”云。面向程序:“软”云。云与容器:云02“硬”云:IaaS(Infrastructure as a Service),即基础设施即服务。技术基础是虚拟化技术。云的基础单元,就是一个个的虚拟机。云与虚拟化只有几台虚拟机,叫虚拟机。有十几、几十台虚拟机时,叫虚拟化。 有几

12、百、成千上万台虚拟机时,就叫云。虚拟机的台数多数,有什么不同吗?云与容器03“硬”云:IaaS量变决定质变,数量越多,管理成本越高。只有几台虚拟机,手动管理就可以了。几十台虚拟机时,手动管理就开始混乱了,需要虚拟化平台。成千上万台虚拟机时,各种需要整合、分配的资源,这就需要云平台进行管理了。著名的OpenStack管理大批量虚拟机整合网卡、存储、CPU、内存等资源云与容器04云与容器CEPH资源整合举例 : ceph将众多物理主机中的磁盘整合为一个大磁盘。05云与容器资源整合举例 : ceph文件可以从这个大磁盘中分配空间。Ceph将自动将文件 打散到多块物理磁盘中,并且可以做冗余。06硬云与

13、运维自动化改变大批量虚拟机管理混乱局面。合理的分配资源,减少资源浪费。主机上线这样的操作,可以自动化完成。云与容器07云与容器硬云与运维自动化:OpenStack的使用场景案例原来ebay用OpenStack实现了这样一套东西:假设有新应用要上线,需要三台配置较好的服务器,安装、部署一个Mongo DB数据库。另外,还需要50台 配置一般的服务器,做部署代码、做应用服务器用。如果走原有流程,采购服务器、上架、装系统、配置系统、部署Mongo DB等等,这一整套流程走下来,需 要至少两个月时间。现在,项目负责人只要在一个Web界面中,选择自己的需求,比如,所需内存,32G。 CPU 16核 ,应

14、用类型:Mongo DB数据库,磁盘空间1T,台数:3台。点一下确定,等上个半天时间,3台 机器就有了,当然,这3台机器是OpenStack的虚拟机了。不单机器到位的快,操作系统也已经安装配置得 当,连Mongo DB也安装好了,只需要对Mongo DB进行简单的初始化,比如说导入初始数据,一切就都OK 了。所需时间,从原来的几个月,到最多只需一天。另个的50台应用服务器也是这样,只要在Web网页中选择所需的机器类型就OK了。08云与容器上云之后,还有一个好处,如果资源使用不平均,比如一台物理主机很闲,但另外一台物理主机很忙。可 以快速的把虚拟主机从忙的物理主机上,迁移到闲的物理机上,让资源的

15、使用更平均。09“软”云:软件即服务,SaaSSaaS是Software-as-a-Service(软件即服务)。软件的使用方式,不再是获得软件、安装软件、配置、开始使用。SaaS下,打开Web,就进入了软件。不需要购买、下载、安装。都是已经安装好的。可以直接使用。 软件通常不安装在本地,安装在云端(即安装在网络中某个数据中心)。要么免费使用,要么以服务费方式付费使用。云与容器10“软”云:DBaaS,数据库即服务。以阿里云的RDS为例:申请即可获得,免下载、免安装,可直接使用。数据库在云端(在阿里云数据中心机房)。服务费方式付费。云与容器11“软”云:DBaaS,数据库即服务。以阿里云的RD

16、S为例:优点:安装使用方便。假设一家小公司,有某个业务要使用一个数据库。原有流程是,买台主机,在电信机 房租个机位,找运维人员上架、装系统、安装数据库,业务才能开始使用数据库。整个流程比较长,以后业务变动,这个数据库又不需要了,这台主机只能低价转卖。现在,只需要打开网页,几分钟就能申请到一个MySQL数据库。以后这个数据库不用了,不再付费即可。 阿里云RDS非常适合小公司、小数据库。和淘宝的长尾理论一样。云与容器12“软”云:DBaaS,数据库即服务。以阿里云的RDS为例:缺点:不适合较大规模数据库。相较传统模式,成本较高。不适合对性能和稳定性要求较高的数据库。低层架构的不可知,奇怪的性能问题

17、无法定位、解决。云与容器13云与容器14“软”云:DBaaS,数据库即服务。以阿里云的RDS为例:两核8G内存,7000 IOPS,包月价1700元。如果需要50个这样的MySQL数据库,单月成本8.5万元,一年成本102万。不如购买几台高型能服务器,自建 数据库。而且这么多的数据库,肯定需要专门的运维人员,一股脑全放在阿里云上,运维人员成本也节省不了多少。云与容器15容器技术对运维的影响:操作系统容器。OS容器目前最流行的是DockerDocker在Linux中是一个进程,进入Docker后,Docker里面就像一个完整的操作系统。云与容器16roothzmc# ps-ef|grepdock

18、erroot3020104600:08:43docker-proxy-prototcp-host-ip-host-port6379-container-port6379root3118104600:07:53docker-proxy-prototcp-host-ip-host-port2375-container-port2375root2855104600:08:10docker-proxy-prototcp-host-ip-host-port13306 -container-port 3306root3670104600:08:08docker-proxy-prototcp-host-ip

19、-host-port7001-container-port7001root3705104600:08:04docker-proxy-prototcp-host-ip-host-port4001-container-port4001root3931104600:08:19docker-proxy-prototcp-host-ip-host-port8888-container-port5000root4120104600:08:24docker-proxy-prototcp-host-ip-host-port8080-container-port8080root6638104600:01:00d

20、ocker-proxy-prototcp-host-ip-host-port9300-container-port9300root6652104600:00:30docker-proxy-prototcp-host-ip-host-port9200-container-port9200root6780104600:01:01docker-proxy-prototcp-host-ip-host-port9400-container-port9400root6811104600:00:35docker-proxy-prototcp-host-ip-host-port9201-container-p

21、ort9200root4235319400:00:00socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sockroot5251319400:00:36socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sockroot5972593500:00:00grep -color=auto docker以红色显示Docker进程为例,在操作系统中,它是一个普通进程。云与容器17roothzmc # docker exec -ti 42ede3fcfe04 bash root42e

22、de3fcfe04:/#root42ede3fcfe04:/# df -h417MSizeUsed Avail Use% Mounted on 10G4.9G4.9G90G64M9.6G5% /04.9G0% /dev04.9G0% /sys/fs/cgroup 45G46G50% /etc/hosts064M0% /dev/shmFilesystem/dev/mapper/docker-253:0-2026892 tmpfstmpfs/dev/mapper/centos-root shm root42ede3fcfe04:/# root42ede3fcfe04:/#root42ede3fcf

23、e04:/# ps -efUIDPIDPPIDCSTIMETTYTIMECMDmysql100Jun01?02:16:22mysqldroot7200Jun01?00:00:00bashroot83720Jun01?00:00:00mysql -uroot-px xxxxxxxroot9600Jun02?00:00:00bashroot107960Jun02?00:00:00mysql -uroot-proot11700Jun02?00:00:00bashroot1281170Jun02?00:00:00mysql -uroot-px xxxxxxxroot13000Jun02?00:00:0

24、0bashroot273261014:23?00:00:00ps -efroot42ede3fcfe04:/#云与容器进入进Do入ckDeor之cke后r之,后可,以可df以hd,f 可h,可 以以ps psef,ef,看看到到的的东东西西和和在在DoDckoecrker 之外都不相同,在Docker之中,又是一个独立的小操作系统。18容器技术对运维的影响:操作系统容器。Docker :轻量级虚拟操作系统。和OpenStack相比:OpenStack是虚拟机,虚拟物理设备。Docker是虚拟操作系统,虚拟软件。Docker用途:PaaS。Docker加上Mesos,最流行的PaaS平台架构。云

25、与容器19云与容器Mesos应用 程序应用 程序应用 程序应用 程序应用 程序应用 程序20容器技术对运维的影响:简化部署Linux下,如果把Redis放在Docker中,在N台主机上、部署M个Redis啊、MySQL啊,也就是分分钟的事。Oracle是否可以跑到Docker中?当然可以。技术上不是问题,不过,大规模部署oracle的场景十分有限而 已。而且,数据库有自己的容器技术。云与容器21数据库级容器:12C CDB与PDB和Schema相比,更好的隔离性。每个PDB自成一体,有自己的UNDO,Redo,和SYSTEM表空间。 PDB有自己的用户。在一个CDB中不能直接跨PDB访问另一P

26、DB 中的表。只能通过DBLINK。可以和Resource Manager结合,实现CPU资源隔离。内存是共享的。Buffer Cache、Shared Pool都是共享的。内存分隔没有意义,RAC下努力为我们提供跨节 点的内存一致性,让用户觉得所有节点内存是一个整体。因此CDB下没必要切隔。而且,Oracle内存池设计, 本身就可以避免一个PDB大量使用内存对另一个PDB的影响。云与容器22云与容器对运维的技术的需求:无论OpenStack的虚拟机,Docker的轻量虚拟操作系统,还是DBaaS、RDS的云数据库,或者Oracle 12C的 容器数据库。都会造成“量”的增加。“量”的增加,一

27、定会增加重复的劳动。DevOps,就是针对这个问题的。云技术的发展,促进了DevOps的发 展。云与容器04互联网公司数据中心运维盘点01互联网企业数据中心运维盘点阿里巴巴数据中心运维:勇于探索运维范围:数据库以外的所有主机、网络等设备。以配置管理为核心以自建机房为基础标准化、统一化、自动化、流程化硬件采购标准化软件环境统一化日常运维自动化(主要是软的方面)处理操作流程化必要人力不可或缺(硬件 方面,还是需要人工处理)02阿里巴巴数据库自动化运维:无奈的选择淘宝单个MySQL拆分为3000个MySQL库,数量巨大,必须自动化。 降低主库失败的影响范围:控制每个库数据量。降低主库失败的影响时间:

28、直接切换从库,不对原因做调查。互联网企业数据中心运维盘点03ebay自动化数据中心:硅谷老牌互联公司的探索之路三个数据中心:PHX(凤凰城)、LVS(拉斯维加斯)、SLC(盐湖城)集装箱式机房:模块化便于移动、调配互联网企业数据中心运维盘点03ebay数据库自动化运维图形化与自动化并重,流程化内嵌其中:三中心主备库切换:图形化操作,自动生成ITIL单子归档DG搭建:图形化操作,自动生成ITIL单子归档 III.分库分表后的批量化操作:开发提单子,提供初始SQL语句。DBA审核,提供标准SQL语句。运维平台生成ITIL单子执勤DBA分配ITIL单子给某一个DBA。DBA根据情况在批量平台中操作。

29、完成后在ITIL中更新状态。简单操作自动化,自动生成ITIL单子归档。如建表操作,就是将4、5、6步操作自动完成。QA所有操作自动化05感受DevOps01Python基本语法每一门编程语言,都有以下基本要素:数据:变量、常量、数组等。流程控制:条件、分支、循环。模块化编程:子程序、子函数。面向对象:类、继承了解了这些要素,就可以使用一门语言干活了。感受DevOps02数据:变量变量类型:Numbers(数字) String(字符串) 布尔不需定义,直接使用。字符串定界符:单引号、双引号、三个单引号跨类型不能运算,必须手动转换。常用的转换:int(val) float(val) str(val

30、):将变量转为整数:转为浮点数:转为字符串感受DevOps6 2016, )roothzmc # python Python 2.7.5 (default, Nov a=1 b=2 a+bTraceback (most recent call last): File , line 1, in TypeError: unsupported operand type(s) for +: int and str a+int(b) 303Range函数生成列表: list1 = range(0,5) print list1 0, 1, 2, 3, 4 list1 = range(0,5,2) prin

31、t list1 0, 2, 4感受DevOps数据:扩展类型,数组(列表)。数组:其实就是列表。就是将一组数据存放在一起,用编号从0开始,可以依次访问每一个数据。 一个列表可以保存数据类型不一致的数据。列表本身是无类型的,只是用来保存一组数据: list = vage, 123 , 1.23, lhb print listvage, 123, 1.23, lhb list.append(onekeeper) print listvage, 123, 1.23, lhb, onekeeperrange函数原型:range(start, end, scan):04数据:扩展类型,元组。元组:相当于

32、只读列表。和列表两点区别,一是使用圆括号。二是初始值一旦确定,不可修改,也不能使 用append方法,追加元素。因此说相当于只读列表。 arr = (123,456,onekeeper) arr0 123 arr0 = 321Traceback (most recent call last): File , line 1, in TypeError: tuple object does not support item assignment感受DevOps05数据:扩展类型,字典。字典:以Key:Value形式存储数据。 host = ip:, user:oracle, command:fre

33、e -m print hostip: , command: free -m, user: oracle通过Key访问Value: hostcommand free -m在字典中增加新的Key-Value键值对: hostpasswordTraceback (most recent call last): File , line 1, in KeyError: password hostpassword = 123456 print hostip: , password: 123456, command: free -m, user: oracle感受DevOps06数据:扩展类型,列表和字典的

34、区别:列表也相当于字典,它的下标从0、1、起始,此下标相当于key,列表中的数据相当于Value。list1 = Tom, China ZJ列表list1相当于如下的键值对:字典0 : Tom, 1 : 2 : China ZJ列表是有序的,按照0、1、2、3下标存储、访问数据。字典是无序的。感受DevOps07感受DevOps空格,代表此几两行代码属于IF语句不再有空格,代表到此行为 止,IF语句已经结束。流程控制:条件、分支、循环#!/usr/bin/pythonimport commands(status, output) = comm

35、ands.getstatusoutput(df -h) if status = 0 :print #command ran successfully. print outputelse:print #Command ran error: + output print #Command Finished空格,或缩进,控制某些 语句段是否属于某个条件或循 环语句08流程控制:条件、分支、循环roothzmc python# ./case2.py #command ran successfully.FilesystemSizeUsedAvailUse%Mounted on/dev/mapper/ce

36、ntos-root90G45G46G50%/devtmpfs4.8G04.8G0%/devtmpfs4.9G96K4.9G1%/dev/shmtmpfs4.9G522M4.3G11%/runtmpfs4.9G04.9G0%/sys/fs/cgroup/dev/sda1497M124M373M25%/boottmpfs984M12K984M1%/run/user/42tmpfs984M0984M0%/run/user/0#Command Finished感受DevOps09其他语句if 条件1 :语句1 语句2语 句 n elsif 条件2 :语句1if 条件:语句语句2elsif 条件n :语

37、句1else语句1其他语句感受DevOps嵌套条件条件其他语句while 条件1 :语句1 语句2语句n 其他语句For循环:for i in range(5): print i循环的常用语句:break : 提前退出循环。 continue : 提前结束本次循 环,开始下次循环。其他语句try语句1 语句2语句n exception语句1其他语句当try中语句执行异常时,跳 转到exception中继续执行。10#!/usr/bin/pythonfor i in range(-10,10): print i,1/iroothzmc python# ./case3.py-10 -1-9-1-8

38、-1-7-1-6-1-5-1-4-1-3-1-2-1-1-10Traceback (most recent call last):File ./case3.py, line 4, in print 1/iZeroDivisionError: integer division or modulo by zero感受DevOps11#!/usr/bin/pythontry:for i in range(-10,10): print i,1/iexcept :print Errorroothzmc python# ./case3.py-10 -1-9-1-8-1-7-1-6-1-5-1-4-1-3-

39、1-2-1-1-10 Error感受DevOps没有了报错信息,换 成了我们自己的错误信息。 这就是异常的作用。12#!/usr/bin/pythonfor i in range(-10,10): try:print i,1/i except :print Errorprint Finished感受DevOps程序的控制权,在出 现系统级错误时,并没交 回操作系统。roothzmc python# ./case3.py-10 -1-9-1-8-1-7-1-6-1-5-1-4-1-3-1-2-1-1-10 Error 1 12 03 04 05 06 07 08 09 0Finished13感受

40、DevOps导入其他模块。类似C语言中的#include定义一个子函数,可以执行某个OS命令。Python程序的通常结构:#!/usr/bin/pythonimport commandsdef run_cmm( cmm_str ) :(status, output) = commands.getstatusoutput( cmm_str ) if status = 0 :print #command ran successfully. print outputelse:print #Command ran error: + output print #Command Finishedif na

41、me = main : str1 = df -hrun_cmm ( str1 )如果此Python程序被别人import到他的程 序中,此if语句中的代码不会被执行。它的另外一个作用,相当于Python程序的 起始点。可以把这个地方理解发c/c+或 Java中的main函数。14感受DevOpsDevOps实战:显示所有Oracle数据库中,等待时间超过5分钟的非Idle类等待事件。非空闲类等待事件,如时等待时长超过5分钟,Session一定遇到了问题。 我们需要使用的SQL语句为:set linesize 1000set pagesize 50000 col machine for a30

42、col program for a40 col event for a40select sid, machine, program, SECONDS_IN_WAIT, event from v$session where SECONDS_IN_WAIT 300 and wait_classIdle;15感受DevOpsDevOps实战:将此SQL语句写进Shell脚本:source /.bash_profile sqlplus / as sysdba 300 and wait_classIdle;exit EOF脚本名为: get_long_wt.sh我的方式是,将此脚本自动推送到多台数据库,

43、再自动执行。这样,就不用一台台主机登录、执行。可以结省不少 时间。16感受DevOpsDevOps实战:此Shell脚本将在哪些服务器上执行,由此配置文件决定:roothzmc tools# cat host_list.txt TARGET1IPADDR = 22USER = oracle PASSWORD = hzmcdba SCRIPT_DIR = /tmpTARGET2IPADDR = 23USER = oracle PASSWORD = hzmcdba SCRIPT_DIR = /tmp此配置文件定义了IP、用户名、密码和脚本临时存放目录。#!/usr/bin/pythonimport

44、 argparseimport ConfigParserimport paramiko 56 def ssh_exec(exec_para):print # + exec_paraip + #cmm_str = exec_paracmm_dir+/ + exec_paracmm_file t = paramiko.Transport( exec_paraip, 22 )t.connect( username = exec_parauser, password = exec_parapass ) sftp = paramiko.SFTPClient.from_transport(t)sftp.p

45、ut( exec_paracmm_file, cmm_str ) t.close()7891011121314151617181920212223s = paramiko.SSHClient() s.load_system_host_keys()s.set_missing_host_key_policy(paramiko.AutoAddPolicy()s.connect( exec_paraip, 22, exec_parauser, exec_parapass ) stdin, stdout, stderr = s.exec_command( chmod 755 + cmm_str ) st

46、din, stdout, stderr = s.exec_command( cmm_str )s_stdout = stdout.read() print s_stdouts.close()24 if name = main :21s_stdout = stdout.read()22print s_stdout2324if name = main :parser = argparse.ArgumentParser(description=Ansible Case) parser.add_argument(-host, action=store, dest = host_file ) parse

47、r.add_argument(-cmd, action=store, dest=cmd_file)args = parser.parse_args() hcmd = args.cmd_filehcf=ConfigParser.ConfigParser() hcf.read( args.host_file ) hsecs = hcf.sections()252627282930313233343536373839404142for secs in hsecs : exec_para = exec_paraip = hcf.get( secs, IPADDR ) exec_parauser = h

48、cf.get( secs, USER ) exec_parapass = hcf.get( secs, PASSWORD ) exec_paracmm_dir = hcf.get( secs, SCRIPT_DIR ) exec_paracmm_file = hcmdssh_exec( exec_para )19感受DevOps运行方式: ./case1.py -host host_list.txt -cmd get_long_wt.sh它有两个命令行参数:主机信息: -host host_list.txt推送并执行的脚本信息: -cmd get_long_wt.shargparse是pyth

49、on命令行解析模块, 我在第二行将它引入:“import argparse”。借助模块,我们可以极为方便的完成强大的功能。25到28行,4行代码, 就是解析命令行参数。使用 add_argument函数, 我要解析的参数是- host和-cmd。29行是读取-cmd参 数后的值到变量 hcmd中。24 if name = main :parser = argparse.ArgumentParser(description=Ansible Case) parser.add_argument(-host, action=store, dest = host_file ) parser.add_ar

50、gument(-cmd, action=store, dest=cmd_file)args = parser.parse_args() hcmd = args.cmd_file252627282930313233hcf=ConfigParser.ConfigParser() hcf.read( args.host_file ) hsecs = hcf.sections()20感受DevOps配置文件样式:TARGET1IPADDR = 22USER = oracle PASSWORD = hzmcdba SCRIPT_DIR = /tmpConfigParser是配置 文件解析模块,在第三 行

51、导入。31到33行,解析配 置文件。32行的 args.host_file,就是 刚才读到的命令行 参数,-host 参数的 值。33行将所有“节” 中的配置信息,读 到变量hsecs中。35到41行,读取每 一节中的item值。每个.是一个节, sections。我们样例 配置文件,共有两个 节。42行,调用自定义子函 数ssh_exec。hcf=ConfigParser.ConfigParser() hcf.read( args.host_file ) hsecs = hcf.sections()for secs in hsecs : exec_para = exec_paraip = h

52、cf.get( secs, IPADDR ) exec_parauser = hcf.get( secs, USER ) exec_parapass = hcf.get( secs, PASSWORD ) exec_paracmm_dir = hcf.get( secs, SCRIPT_DIR )313233343536373839404142exec_paracmm_file = hcmd ssh_exec( exec_para )21感受DevOps9行到11行,建立FTP连 接。12行将脚本推送到远端 服务器的指定目录中。 13行,关闭FTP连接。15行到18行建立SSH连 接。19行,

53、ssh到远端,执 行chmod命令。20行,ssh到远端,调 用推送过去的脚本。21、22行,读取执行结 果,并显示。6 def ssh_exec(exec_para):78910print # + exec_paraip + #cmm_str = exec_paracmm_dir+/ + exec_paracmm_file t = paramiko.Transport( exec_paraip, 22 )t.connect( username = exec_parauser, password = exec_parapass )sftp = paramiko.SFTPClient.from_

54、transport(t) sftp.put( exec_paracmm_file, cmm_str ) t.close()11121314151617181920212223s = paramiko.SSHClient() s.load_system_host_keys()s.set_missing_host_key_policy(paramiko.AutoAddPolicy() s.connect( exec_paraip, 22, exec_parauser,exec_parapass )stdin, stdout, stderr = s.exec_command( chmod 755 +

55、 cmm_str ) stdin, stdout, stderr = s.exec_command( cmm_str )s_stdout = stdout.read() print s_stdouts.close()22感受DevOps23感受DevOps更进一步:并发示例程序是串行的,如果目标主机有几十、几百台,串行的性能无法保证。失败处理如果在某个目标主机上执行Hang住,如何不影响在其余目标上继续执行?由并发带来的问题:多个进/线程的同步竞争资源控制复杂度增加复杂度会随着并发、失败处理等问题的引入,复杂度急剧增加。06运维平台介绍01运维平台介绍前面章节介绍了DevOps,虽说使用Pyt

56、hon,已经可以很简单的实现自动化操作,但还是要自己写很多的代码。 就算Python再简单,也有使用门槛。为了降低难度,我们结合日常工作开发了运维平台,已经将很多工作,变为了程序,大家只需要使用就可 以了,不必自己动手写Python代码。02运维平台介绍OneKeeper一体机OneKeeper一体机OneKeeper一体机OneKeeper一体机云运维中心云运维中心 二线团队03运维平台介绍功能模块监控管理报警分析健康评分运维工具箱04运维平台介绍全体系监控交换机存储各种主机数据库04运维平台介绍全体系监控交换机存储各种主机数据库05运维平台介绍数据库监控:Alert_log日志中的报错活动

57、进程过多非空闲等待事件过多阻塞时间过长06运维平台介绍健康分析Oracle 11G有1200多个等待事件SQL select count(*) from v$event_name; COUNT(*)1367679个v$sysstat中的性能资料,还有v$undostat, v$filestat等其他性能资料视图极有挑战的工作:如何在两千多个指标中分析判断数据库的健康状态 ?通常的作法,将重要的指标罗列出来,由用户自己查看、分析。07运维平台介绍罗列了数据库的许多指标, 但缺乏分析,是目前Oracle类 运维软件、监控软件的现状。Oracle的健康分析,是困 难的。08运维平台介绍SQL select w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论