云原生技術(shù)實現(xiàn)Devops自動化運維_第1頁
云原生技術(shù)實現(xiàn)Devops自動化運維_第2頁
云原生技術(shù)實現(xiàn)Devops自動化運維_第3頁
云原生技術(shù)實現(xiàn)Devops自動化運維_第4頁
云原生技術(shù)實現(xiàn)Devops自動化運維_第5頁
已閱讀5頁,還剩92頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、技術(shù)創(chuàng)新,變革未來云原生技術(shù)實現(xiàn)Devops自動化運維01為什么要運維自動化02DevOps03云與容器04互聯(lián)網(wǎng)企業(yè)數(shù)據(jù)中心 運維盤點目 錄Contents05感受DevOps06運維平臺介紹01為什么要運維自動化01為什么要運維自動化規(guī)?;碌男聠栴}:人力02為什么要運維自動化03為什么要運維自動化04為什么要運維自動化通常企業(yè)的整體架構(gòu)如圖所示,客戶連接應(yīng)用服 務(wù)器,應(yīng)用服務(wù)器再連接數(shù)據(jù)庫。通常企業(yè)中數(shù)據(jù)庫數(shù)量不太很多,有上百套數(shù)據(jù) 庫的話,已經(jīng)是有相當(dāng)規(guī)模的公司了。但是應(yīng)用 服務(wù)器數(shù)量會比較多,會是數(shù)據(jù)庫數(shù)量的十幾倍 甚至幾十倍。比如一家企業(yè),可能數(shù)據(jù)庫只有50個,而各類應(yīng) 用服務(wù)器數(shù)

2、量,可能達(dá)到1000臺左右。雖然應(yīng)用服務(wù)器中沒有用戶數(shù)據(jù),但上面存放的 應(yīng)用程序代碼很重要。前面所說的事故,就是有 技術(shù)人員將一批應(yīng)用服務(wù)器上的代碼刪除所至。05為什么要運維自動化至于應(yīng)用服務(wù)器上的代碼為什么會被刪除?以這家旅游網(wǎng)站的規(guī)模,應(yīng)用服務(wù)器的數(shù)量應(yīng)該在萬臺之上, 達(dá)到這個量級,有點混亂是難免的。如下圖所示,有可能A應(yīng)用占用一部分主機(jī),B應(yīng)用占用了A應(yīng)用的一 部分主機(jī),B應(yīng)用還有一部分自己單獨的主機(jī)。C應(yīng)用也有一部分單獨的主機(jī),但和A、B應(yīng)用混用一部分主 機(jī)。(圖看出來很亂,實際的情況只會比這個更亂)A應(yīng)用B應(yīng)用C應(yīng)用C應(yīng)用06為什么要運維自動化可以看到,圖中中間偏左,紅色這部分主機(jī)非

3、常亂,有些服務(wù)器是屬于A、C應(yīng)用,有些服務(wù)器是A、B應(yīng)用, 有些是A、B、C三個應(yīng)用都有?,F(xiàn)在C應(yīng)用要升級,將原有代碼刪除、重新部署新的代碼。A應(yīng)用B應(yīng)用C應(yīng)用C應(yīng)用07為什么要運維自動化把這些服務(wù)器上的這個應(yīng)用程 序更新為最新版,那些服務(wù)器 上的那個應(yīng)用遷移到另一批服 務(wù)器上??烊?。08為什么要運維自動化很可能一個誤操作,把同一臺機(jī)器上的A、B應(yīng)用都刪除了,從而影響了應(yīng)用。A應(yīng)用B應(yīng)用C應(yīng)用C應(yīng)用09為什么要運維自動化當(dāng)然這并不一定是前面所說的某旅游公司故障的原因,我們只是通過這個例子說明一個問題,主機(jī)數(shù)量太 多之后。亂,是必然的。那么,隨之而來的,出故障也是必然的。這就是痛點。A應(yīng)用B應(yīng)用

4、C應(yīng)用C應(yīng)用02DevOps01DevOps:運維開發(fā))DevOps:運維開發(fā)DevOps(英文Development和Operations的組合 是一組過程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)開發(fā)(應(yīng)用程序/軟件工程)、技術(shù)運營和質(zhì)量保障(QA)部門之間的溝通、協(xié)作與整合。它的出現(xiàn) 是由于軟件行業(yè)日益清晰地認(rèn)識到:為了按時交付 軟件產(chǎn)品和服務(wù),開發(fā)和運營工作必須緊密合作。起源于SA,系統(tǒng)管理員,逐漸影響到了DBA。02DevOps:運維開發(fā)SA:上為應(yīng)用開發(fā)人員,維護(hù)應(yīng)用服務(wù)器。 下為DBA維護(hù)數(shù)據(jù)庫服務(wù)器、存儲。03DevOps:運維開發(fā)隨著企業(yè)的壯大,程序員數(shù)量會很快增加,應(yīng)用 程序的數(shù)量更是會

5、翻倍的增加。但DBA不會增加。04DevOps:運維開發(fā)應(yīng)用服務(wù)器數(shù)量越來越多,應(yīng)用程序的數(shù)量也越來越多。05DevOps:運維開發(fā)但眾多的應(yīng)用程序就像這山,都是土、石和樹構(gòu)成,但每個山峰絕不相同,每處的風(fēng)景獨一無二。多樣化, 這大大提高了運維的難度。06DevOps:運維開發(fā)把這些服務(wù)器上的這個應(yīng)用程 序更新為最新版,那些服務(wù)器 上的那個應(yīng)用遷移到另一批服 務(wù)器上。快去。07DevOps:運維開發(fā)一些簡單的操作,執(zhí)行一次,可以確保不會出問題,但要重復(fù)在一百臺主機(jī)上都執(zhí)行一遍呢! 人天生喜歡新鮮感,大量重復(fù)的勞動,極易讓人疲倦,此時,一個不小心,就容易釀成問題。如果有一門簡單的語言,可以編寫簡

6、單的腳本程序,在多臺主機(jī)上執(zhí)行同樣的操作,問題不就解決了嗎!08DevOps:運維開發(fā)運維人員掌握開發(fā)技術(shù),面對復(fù)雜的環(huán)境、大批量的目標(biāo),通過寫簡單的小程序,多快好省的完成工作, 就是DevOps。09為什么是Python可供使用的模塊多。比Java簡單。和操作系統(tǒng)打交道方便。大家都在用,方便招人、也方便找工作。等等。DevOps:運維開發(fā)10DevOps:運維開發(fā)這個Python程序只有42行(算上空行), 實現(xiàn)的效果卻十分驚人,它可以批量在多臺主 機(jī)上運行指定腳本。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這是運行的效果,在多臺主機(jī)(畫面上顯示的 是兩臺)上顯示空間、內(nèi)存和進(jìn)程數(shù)。腳本接收兩個參數(shù),一個是命令文件: cmd_list.aop,一個是目標(biāo)列表文件: host_list.txt。這個是主機(jī)列表文件: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:運維開發(fā)如果要在多臺主機(jī)上執(zhí)行某個腳本,使用這個Pytho

10、n 程序就可以完美的完成任務(wù),關(guān)鍵這個Python程序只 有42行代碼。這就是Python是DevOps的首選語言的原因。為什么可以在如此短的代碼中實現(xiàn)如此強(qiáng)大的功能? 眾多的模塊是關(guān)鍵。利用現(xiàn)成的模塊,就相當(dāng)于站在巨人的肩膀上。 這個程序用到了三個模塊:argparse:解析命令行參數(shù) configParser:解析配置文件 paramiko:遠(yuǎn)程操作使用已有的模塊,往往只用幾行代碼,就可以實現(xiàn)某 個強(qiáng)大的功能。13對DBA的影響:由于數(shù)據(jù)庫的規(guī)模少于主機(jī),但DevOps的需求也在發(fā)展,因為DB的規(guī)模也正在爆發(fā)。非Oracle類數(shù)據(jù)庫,分庫分表造成了大量數(shù)據(jù)庫。每個庫可能不大,但數(shù)據(jù)庫個數(shù)越

11、來越多。阿里云RDS,云數(shù)據(jù)庫下,隨著“云”技術(shù)發(fā)展,云端數(shù)據(jù)庫也會讓數(shù)據(jù)庫數(shù)量大規(guī)模爆發(fā)。Oracle 12C中的CDC、PDB(容器數(shù)據(jù)庫),每一個PDB就是一個獨立的數(shù)據(jù)庫,這也會促使Oracle數(shù)據(jù)庫數(shù)量的擴(kuò)大。DevOps:運維開發(fā)03云與容器01相較于幾年前的不知所“云”,云技術(shù)的面目正在逐漸清晰起來。面向主機(jī):“硬”云。面向程序:“軟”云。云與容器:云02“硬”云:IaaS(Infrastructure as a Service),即基礎(chǔ)設(shè)施即服務(wù)。技術(shù)基礎(chǔ)是虛擬化技術(shù)。云的基礎(chǔ)單元,就是一個個的虛擬機(jī)。云與虛擬化只有幾臺虛擬機(jī),叫虛擬機(jī)。有十幾、幾十臺虛擬機(jī)時,叫虛擬化。 有幾

12、百、成千上萬臺虛擬機(jī)時,就叫云。虛擬機(jī)的臺數(shù)多數(shù),有什么不同嗎?云與容器03“硬”云:IaaS量變決定質(zhì)變,數(shù)量越多,管理成本越高。只有幾臺虛擬機(jī),手動管理就可以了。幾十臺虛擬機(jī)時,手動管理就開始混亂了,需要虛擬化平臺。成千上萬臺虛擬機(jī)時,各種需要整合、分配的資源,這就需要云平臺進(jìn)行管理了。著名的OpenStack管理大批量虛擬機(jī)整合網(wǎng)卡、存儲、CPU、內(nèi)存等資源云與容器04云與容器CEPH資源整合舉例 : ceph將眾多物理主機(jī)中的磁盤整合為一個大磁盤。05云與容器資源整合舉例 : ceph文件可以從這個大磁盤中分配空間。Ceph將自動將文件 打散到多塊物理磁盤中,并且可以做冗余。06硬云與

13、運維自動化改變大批量虛擬機(jī)管理混亂局面。合理的分配資源,減少資源浪費。主機(jī)上線這樣的操作,可以自動化完成。云與容器07云與容器硬云與運維自動化:OpenStack的使用場景案例原來ebay用OpenStack實現(xiàn)了這樣一套東西:假設(shè)有新應(yīng)用要上線,需要三臺配置較好的服務(wù)器,安裝、部署一個Mongo DB數(shù)據(jù)庫。另外,還需要50臺 配置一般的服務(wù)器,做部署代碼、做應(yīng)用服務(wù)器用。如果走原有流程,采購服務(wù)器、上架、裝系統(tǒng)、配置系統(tǒng)、部署Mongo DB等等,這一整套流程走下來,需 要至少兩個月時間。現(xiàn)在,項目負(fù)責(zé)人只要在一個Web界面中,選擇自己的需求,比如,所需內(nèi)存,32G。 CPU 16核 ,應(yīng)

14、用類型:Mongo DB數(shù)據(jù)庫,磁盤空間1T,臺數(shù):3臺。點一下確定,等上個半天時間,3臺 機(jī)器就有了,當(dāng)然,這3臺機(jī)器是OpenStack的虛擬機(jī)了。不單機(jī)器到位的快,操作系統(tǒng)也已經(jīng)安裝配置得 當(dāng),連Mongo DB也安裝好了,只需要對Mongo DB進(jìn)行簡單的初始化,比如說導(dǎo)入初始數(shù)據(jù),一切就都OK 了。所需時間,從原來的幾個月,到最多只需一天。另個的50臺應(yīng)用服務(wù)器也是這樣,只要在Web網(wǎng)頁中選擇所需的機(jī)器類型就OK了。08云與容器上云之后,還有一個好處,如果資源使用不平均,比如一臺物理主機(jī)很閑,但另外一臺物理主機(jī)很忙???以快速的把虛擬主機(jī)從忙的物理主機(jī)上,遷移到閑的物理機(jī)上,讓資源的

15、使用更平均。09“軟”云:軟件即服務(wù),SaaSSaaS是Software-as-a-Service(軟件即服務(wù))。軟件的使用方式,不再是獲得軟件、安裝軟件、配置、開始使用。SaaS下,打開Web,就進(jìn)入了軟件。不需要購買、下載、安裝。都是已經(jīng)安裝好的??梢灾苯邮褂?。 軟件通常不安裝在本地,安裝在云端(即安裝在網(wǎng)絡(luò)中某個數(shù)據(jù)中心)。要么免費使用,要么以服務(wù)費方式付費使用。云與容器10“軟”云:DBaaS,數(shù)據(jù)庫即服務(wù)。以阿里云的RDS為例:申請即可獲得,免下載、免安裝,可直接使用。數(shù)據(jù)庫在云端(在阿里云數(shù)據(jù)中心機(jī)房)。服務(wù)費方式付費。云與容器11“軟”云:DBaaS,數(shù)據(jù)庫即服務(wù)。以阿里云的RD

16、S為例:優(yōu)點:安裝使用方便。假設(shè)一家小公司,有某個業(yè)務(wù)要使用一個數(shù)據(jù)庫。原有流程是,買臺主機(jī),在電信機(jī) 房租個機(jī)位,找運維人員上架、裝系統(tǒng)、安裝數(shù)據(jù)庫,業(yè)務(wù)才能開始使用數(shù)據(jù)庫。整個流程比較長,以后業(yè)務(wù)變動,這個數(shù)據(jù)庫又不需要了,這臺主機(jī)只能低價轉(zhuǎn)賣。現(xiàn)在,只需要打開網(wǎng)頁,幾分鐘就能申請到一個MySQL數(shù)據(jù)庫。以后這個數(shù)據(jù)庫不用了,不再付費即可。 阿里云RDS非常適合小公司、小數(shù)據(jù)庫。和淘寶的長尾理論一樣。云與容器12“軟”云:DBaaS,數(shù)據(jù)庫即服務(wù)。以阿里云的RDS為例:缺點:不適合較大規(guī)模數(shù)據(jù)庫。相較傳統(tǒng)模式,成本較高。不適合對性能和穩(wěn)定性要求較高的數(shù)據(jù)庫。低層架構(gòu)的不可知,奇怪的性能問題

17、無法定位、解決。云與容器13云與容器14“軟”云:DBaaS,數(shù)據(jù)庫即服務(wù)。以阿里云的RDS為例:兩核8G內(nèi)存,7000 IOPS,包月價1700元。如果需要50個這樣的MySQL數(shù)據(jù)庫,單月成本8.5萬元,一年成本102萬。不如購買幾臺高型能服務(wù)器,自建 數(shù)據(jù)庫。而且這么多的數(shù)據(jù)庫,肯定需要專門的運維人員,一股腦全放在阿里云上,運維人員成本也節(jié)省不了多少。云與容器15容器技術(shù)對運維的影響:操作系統(tǒng)容器。OS容器目前最流行的是DockerDocker在Linux中是一個進(jìn)程,進(jìn)入Docker后,Docker里面就像一個完整的操作系統(tǒng)。云與容器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進(jìn)程為例,在操作系統(tǒng)中,它是一個普通進(jìn)程。云與容器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:/#云與容器進(jìn)入進(jìn)Do入ckDeor之cke后r之,后可,以可df以hd,f 可h,可 以以ps psef,ef,看看到到的的東東西西和和在在DoDckoecrker 之外都不相同,在Docker之中,又是一個獨立的小操作系統(tǒng)。18容器技術(shù)對運維的影響:操作系統(tǒng)容器。Docker :輕量級虛擬操作系統(tǒng)。和OpenStack相比:OpenStack是虛擬機(jī),虛擬物理設(shè)備。Docker是虛擬操作系統(tǒng),虛擬軟件。Docker用途:PaaS。Docker加上Mesos,最流行的PaaS平臺架構(gòu)。云

25、與容器19云與容器Mesos應(yīng)用 程序應(yīng)用 程序應(yīng)用 程序應(yīng)用 程序應(yīng)用 程序應(yīng)用 程序20容器技術(shù)對運維的影響:簡化部署Linux下,如果把Redis放在Docker中,在N臺主機(jī)上、部署M個Redis啊、MySQL啊,也就是分分鐘的事。Oracle是否可以跑到Docker中?當(dāng)然可以。技術(shù)上不是問題,不過,大規(guī)模部署oracle的場景十分有限而 已。而且,數(shù)據(jù)庫有自己的容器技術(shù)。云與容器21數(shù)據(jù)庫級容器:12C CDB與PDB和Schema相比,更好的隔離性。每個PDB自成一體,有自己的UNDO,Redo,和SYSTEM表空間。 PDB有自己的用戶。在一個CDB中不能直接跨PDB訪問另一P

26、DB 中的表。只能通過DBLINK??梢院蚏esource Manager結(jié)合,實現(xiàn)CPU資源隔離。內(nèi)存是共享的。Buffer Cache、Shared Pool都是共享的。內(nèi)存分隔沒有意義,RAC下努力為我們提供跨節(jié) 點的內(nèi)存一致性,讓用戶覺得所有節(jié)點內(nèi)存是一個整體。因此CDB下沒必要切隔。而且,Oracle內(nèi)存池設(shè)計, 本身就可以避免一個PDB大量使用內(nèi)存對另一個PDB的影響。云與容器22云與容器對運維的技術(shù)的需求:無論OpenStack的虛擬機(jī),Docker的輕量虛擬操作系統(tǒng),還是DBaaS、RDS的云數(shù)據(jù)庫,或者Oracle 12C的 容器數(shù)據(jù)庫。都會造成“量”的增加?!傲俊钡脑黾樱?/p>

27、定會增加重復(fù)的勞動。DevOps,就是針對這個問題的。云技術(shù)的發(fā)展,促進(jìn)了DevOps的發(fā) 展。云與容器04互聯(lián)網(wǎng)公司數(shù)據(jù)中心運維盤點01互聯(lián)網(wǎng)企業(yè)數(shù)據(jù)中心運維盤點阿里巴巴數(shù)據(jù)中心運維:勇于探索運維范圍:數(shù)據(jù)庫以外的所有主機(jī)、網(wǎng)絡(luò)等設(shè)備。以配置管理為核心以自建機(jī)房為基礎(chǔ)標(biāo)準(zhǔn)化、統(tǒng)一化、自動化、流程化硬件采購標(biāo)準(zhǔn)化軟件環(huán)境統(tǒng)一化日常運維自動化(主要是軟的方面)處理操作流程化必要人力不可或缺(硬件 方面,還是需要人工處理)02阿里巴巴數(shù)據(jù)庫自動化運維:無奈的選擇淘寶單個MySQL拆分為3000個MySQL庫,數(shù)量巨大,必須自動化。 降低主庫失敗的影響范圍:控制每個庫數(shù)據(jù)量。降低主庫失敗的影響時間:

28、直接切換從庫,不對原因做調(diào)查?;ヂ?lián)網(wǎng)企業(yè)數(shù)據(jù)中心運維盤點03ebay自動化數(shù)據(jù)中心:硅谷老牌互聯(lián)公司的探索之路三個數(shù)據(jù)中心:PHX(鳳凰城)、LVS(拉斯維加斯)、SLC(鹽湖城)集裝箱式機(jī)房:模塊化便于移動、調(diào)配互聯(lián)網(wǎng)企業(yè)數(shù)據(jù)中心運維盤點03ebay數(shù)據(jù)庫自動化運維圖形化與自動化并重,流程化內(nèi)嵌其中:三中心主備庫切換:圖形化操作,自動生成ITIL單子歸檔DG搭建:圖形化操作,自動生成ITIL單子歸檔 III.分庫分表后的批量化操作:開發(fā)提單子,提供初始SQL語句。DBA審核,提供標(biāo)準(zhǔn)SQL語句。運維平臺生成ITIL單子執(zhí)勤DBA分配ITIL單子給某一個DBA。DBA根據(jù)情況在批量平臺中操作。

29、完成后在ITIL中更新狀態(tài)。簡單操作自動化,自動生成ITIL單子歸檔。如建表操作,就是將4、5、6步操作自動完成。QA所有操作自動化05感受DevOps01Python基本語法每一門編程語言,都有以下基本要素:數(shù)據(jù):變量、常量、數(shù)組等。流程控制:條件、分支、循環(huán)。模塊化編程:子程序、子函數(shù)。面向?qū)ο螅侯?、繼承了解了這些要素,就可以使用一門語言干活了。感受DevOps02數(shù)據(jù):變量變量類型:Numbers(數(shù)字) String(字符串) 布爾不需定義,直接使用。字符串定界符:單引號、雙引號、三個單引號跨類型不能運算,必須手動轉(zhuǎn)換。常用的轉(zhuǎn)換:int(val) float(val) str(val

30、):將變量轉(zhuǎn)為整數(shù):轉(zhuǎn)為浮點數(shù):轉(zhuǎn)為字符串感受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函數(shù)生成列表: list1 = range(0,5) print list1 0, 1, 2, 3, 4 list1 = range(0,5,2) prin

31、t list1 0, 2, 4感受DevOps數(shù)據(jù):擴(kuò)展類型,數(shù)組(列表)。數(shù)組:其實就是列表。就是將一組數(shù)據(jù)存放在一起,用編號從0開始,可以依次訪問每一個數(shù)據(jù)。 一個列表可以保存數(shù)據(jù)類型不一致的數(shù)據(jù)。列表本身是無類型的,只是用來保存一組數(shù)據(jù): list = vage, 123 , 1.23, lhb print listvage, 123, 1.23, lhb list.append(onekeeper) print listvage, 123, 1.23, lhb, onekeeperrange函數(shù)原型:range(start, end, scan):04數(shù)據(jù):擴(kuò)展類型,元組。元組:相當(dāng)于

32、只讀列表。和列表兩點區(qū)別,一是使用圓括號。二是初始值一旦確定,不可修改,也不能使 用append方法,追加元素。因此說相當(dāng)于只讀列表。 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數(shù)據(jù):擴(kuò)展類型,字典。字典:以Key:Value形式存儲數(shù)據(jù)。 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數(shù)據(jù):擴(kuò)展類型,列表和字典的

34、區(qū)別:列表也相當(dāng)于字典,它的下標(biāo)從0、1、起始,此下標(biāo)相當(dāng)于key,列表中的數(shù)據(jù)相當(dāng)于Value。list1 = Tom, China ZJ列表list1相當(dāng)于如下的鍵值對:字典0 : Tom, 1 : 2 : China ZJ列表是有序的,按照0、1、2、3下標(biāo)存儲、訪問數(shù)據(jù)。字典是無序的。感受DevOps07感受DevOps空格,代表此幾兩行代碼屬于IF語句不再有空格,代表到此行為 止,IF語句已經(jīng)結(jié)束。流程控制:條件、分支、循環(huán)#!/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空格,或縮進(jìn),控制某些 語句段是否屬于某個條件或循 環(huán)語句08流程控制:條件、分支、循環(huán)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循環(huán):for i in range(5): print i循環(huán)的常用語句:break : 提前退出循環(huán)。 continue : 提前結(jié)束本次循 環(huán),開始下次循環(huán)。其他語句try語句1 語句2語句n exception語句1其他語句當(dāng)try中語句執(zhí)行異常時,跳 轉(zhuǎn)到exception中繼續(xù)執(zhí)行。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程序的控制權(quán),在出 現(xiàn)系統(tǒng)級錯誤時,并沒交 回操作系統(tǒng)。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導(dǎo)入其他模塊。類似C語言中的#include定義一個子函數(shù),可以執(zhí)行某個OS命令。Python程序的通常結(jié)構(gòu):#!/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語句中的代碼不會被執(zhí)行。它的另外一個作用,相當(dāng)于Python程序的 起始點??梢园堰@個地方理解發(fā)c/c+或 Java中的main函數(shù)。14感受DevOpsDevOps實戰(zhàn):顯示所有Oracle數(shù)據(jù)庫中,等待時間超過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實戰(zhàn):將此SQL語句寫進(jìn)Shell腳本:source /.bash_profile sqlplus / as sysdba 300 and wait_classIdle;exit EOF腳本名為: get_long_wt.sh我的方式是,將此腳本自動推送到多臺數(shù)據(jù)庫,

43、再自動執(zhí)行。這樣,就不用一臺臺主機(jī)登錄、執(zhí)行。可以結(jié)省不少 時間。16感受DevOpsDevOps實戰(zhàn):此Shell腳本將在哪些服務(wù)器上執(zhí)行,由此配置文件決定: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它有兩個命令行參數(shù):主機(jī)信息: -host host_list.txt推送并執(zhí)行的腳本信息: -cmd get_long_wt.shargparse是pyth

49、on命令行解析模塊, 我在第二行將它引入:“import argparse”。借助模塊,我們可以極為方便的完成強(qiáng)大的功能。25到28行,4行代碼, 就是解析命令行參數(shù)。使用 add_argument函數(shù), 我要解析的參數(shù)是- host和-cmd。29行是讀取-cmd參 數(shù)后的值到變量 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、導(dǎo)入。31到33行,解析配 置文件。32行的 args.host_file,就是 剛才讀到的命令行 參數(shù),-host 參數(shù)的 值。33行將所有“節(jié)” 中的配置信息,讀 到變量hsecs中。35到41行,讀取每 一節(jié)中的item值。每個.是一個節(jié), sections。我們樣例 配置文件,共有兩個 節(jié)。42行,調(diào)用自定義子函 數(shù)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行將腳本推送到遠(yuǎn)端 服務(wù)器的指定目錄中。 13行,關(guān)閉FTP連接。15行到18行建立SSH連 接。19行,

53、ssh到遠(yuǎn)端,執(zhí) 行chmod命令。20行,ssh到遠(yuǎn)端,調(diào) 用推送過去的腳本。21、22行,讀取執(zhí)行結(jié) 果,并顯示。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更進(jìn)一步:并發(fā)示例程序是串行的,如果目標(biāo)主機(jī)有幾十、幾百臺,串行的性能無法保證。失敗處理如果在某個目標(biāo)主機(jī)上執(zhí)行Hang住,如何不影響在其余目標(biāo)上繼續(xù)執(zhí)行?由并發(fā)帶來的問題:多個進(jìn)/線程的同步競爭資源控制復(fù)雜度增加復(fù)雜度會隨著并發(fā)、失敗處理等問題的引入,復(fù)雜度急劇增加。06運維平臺介紹01運維平臺介紹前面章節(jié)介紹了DevOps,雖說使用Pyt

56、hon,已經(jīng)可以很簡單的實現(xiàn)自動化操作,但還是要自己寫很多的代碼。 就算Python再簡單,也有使用門檻。為了降低難度,我們結(jié)合日常工作開發(fā)了運維平臺,已經(jīng)將很多工作,變?yōu)榱顺绦?,大家只需要使用就?以了,不必自己動手寫Python代碼。02運維平臺介紹OneKeeper一體機(jī)OneKeeper一體機(jī)OneKeeper一體機(jī)OneKeeper一體機(jī)云運維中心云運維中心 二線團(tuán)隊03運維平臺介紹功能模塊監(jiān)控管理報警分析健康評分運維工具箱04運維平臺介紹全體系監(jiān)控交換機(jī)存儲各種主機(jī)數(shù)據(jù)庫04運維平臺介紹全體系監(jiān)控交換機(jī)存儲各種主機(jī)數(shù)據(jù)庫05運維平臺介紹數(shù)據(jù)庫監(jiān)控:Alert_log日志中的報錯活動

57、進(jìn)程過多非空閑等待事件過多阻塞時間過長06運維平臺介紹健康分析Oracle 11G有1200多個等待事件SQL select count(*) from v$event_name; COUNT(*)1367679個v$sysstat中的性能資料,還有v$undostat, v$filestat等其他性能資料視圖極有挑戰(zhàn)的工作:如何在兩千多個指標(biāo)中分析判斷數(shù)據(jù)庫的健康狀態(tài) ?通常的作法,將重要的指標(biāo)羅列出來,由用戶自己查看、分析。07運維平臺介紹羅列了數(shù)據(jù)庫的許多指標(biāo), 但缺乏分析,是目前Oracle類 運維軟件、監(jiān)控軟件的現(xiàn)狀。Oracle的健康分析,是困 難的。08運維平臺介紹SQL select w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論