天天看點

Fabric遠端自動化使用說明

關于Fabric的介紹,可以看官網說明。簡單來說主要功能就是一個基于Python的伺服器批量管理庫/工具,Fabric 使用 ssh(通過 paramiko 庫)在多個伺服器上批量執行任務、上傳、下載下傳。在使用Fabric之前,都用Python的paramiko子產品來實作需求,相比之後發現Fabric比paramiko子產品強大很多。具體的使用方法和說明可以看官方文檔介紹。下面寫類一個用paramiko(apt-get install python-paramiko)封裝的遠端操作類的模闆: 

關于更多的paramiko資訊可以看官方文檔和python運維之paramiko、python遠端連接配接paramiko 子產品。本文将要介紹的是Fabric的使用方法。

1.安裝

2.參數(fab -h)

①:指令行接口

效果:

不推薦使用指令行,最好都寫到一個檔案腳本裡,友善也安全。

②:腳本

注:預設fabric使用一個名為fabfile.py檔案裡,如:

如果寫到其他檔案則需要通過-f來指定執行:

③:參數

定義的執行函數裡帶參數:

帶參數的執行函數執行:

④:子產品說明

執行個體1: 本地操作

用-l檢視可以執行的指令函數:

可以執行上面2個執行函數,執行:

上面2個函數合并,并且對外隻顯示一個執行入口函數(@task):

執行:

執行個體2:遠端操作,env變量

執行看到的資訊:執行的函數,指令和指令的輸出結果。

遠端機器的密碼不一緻,怎麼配置?這時可以用env.passwords來替換env.password:注意格式:user@ip:pwd

執行個體3:如何讓不同伺服器組執行不同的操作?如DB和WEB伺服器各自執行自己的操作。這裡需要用env.roledefs來定義角色組,根據不同的roles來使用execute進行不同的操作。

執行效果:執行get_memory函數,在dbserver中的主機上執行,mkfile_touch函數則在webserver中的主機上執行。

通過env.roledefs和env.passwords指定好了使用者名、端口和密碼,這時上面2個函數合并,并且對外隻顯示一個執行函數(@task),還要注意的是因為各自的執行函數處于不同的roles下執行的,要放到一個函數裡執行,需要添加:execute(),這樣可以在一個執行函數裡操作多個遠端的機器。 

 View Code

執行個體4:多台伺服器并行執行,@parallel

執行效果:執行函數同時在多個主機上運作,加快執行效率

執行個體5:輸出資訊等級設定:with settings(hide(...)):

隐藏:

沒有隐藏:

執行個體6:異常處理、捕獲:

異常處理:settings(warn_only=True)遇到錯誤繼續執行還是退出settings(warn_only=False),False是預設方式。

異常捕獲:if result.failed:abord()捕獲到異常之後直接退出;if result.failed and not confirm("")捕獲到異常之後确認退出還是繼續 

執行個體7:通過中轉(路由)機連接配接遠端機執行,env.gateway 

效果:本地執行腳本通過中轉機來向遠端機器上傳檔案,本機和遠端機不需要有關聯

執行個體8:通過ssh key(密鑰)登陸

效果:執行腳本的機器通過密鑰登陸GATEWAY機器,再在GATEWAY機器上通過賬号密碼登陸要操作的機器(不确定這裡能否也通過SSH密鑰登陸?)。

如何建立SSH的密鑰連接配接,在MySQL MHA 搭建&測試裡有說明,可以了解一下。 

應用1:帶參數批量修改伺服器密碼

執行效果:

應用2:遠端開、關、更新MySQL,并且自動完成MHA相關的切換開啟工作。

 View Code 

該腳本執行在Ubuntu上,并且用于Percona5.6、5.7的相關操作,以及mha的切換開啟工作。需要注意的是,mysql無密碼登陸用了mysql_config_editor和遠端開啟mha背景運作程式時用到的程序監控(deamon運作)Supervisor程式。

本文轉自帥氣的頭頭部落格51CTO部落格,原文連結http://blog.51cto.com/12902932/1927044如需轉載請自行聯系原作者

sshpp