半自動化運維之快速連線到指定環境(一)
在大量的分散式環境中,可能存在著大量的主機配置,ip配置,資料庫例項配置,甚至作業系統使用者,資料庫使用者密碼也不同,這個時候如果記錄在10條左右還能應付,但是如果給你幾百個這樣的環境,每次都需要先查詢對應的作業系統使用者,主機名或者IP就顯得很麻煩,儘管已經設定了ssh信任連線。但是還是需要你知道使用者名稱的前提下來操作。
對於資料庫的連線也是如此,你可以使用tnsping來得到對應的主機名,但是還需要費些功夫在查詢對應的資料庫使用者名稱密碼上,因為知道主機名可能變得沒有那麼重要,我們可能只需要在客戶端連線即可。
如果要想把這些操作變為一個更快捷輕鬆的方式,使用配置檔案就是一個不錯的選擇,有很多自動化實現指令碼是把這些配置資訊放在資料庫表中,在需要的時候查取,過濾等等。
其實我們也可以在配置檔案中進行資訊的簡單過濾就可以避免去連線資料庫(因為資料庫環境也有可能不可用)
這個時候使用awk就是一個不錯的選擇。其實sed+awk能夠實現很多複雜的功能,我就次拋磚引玉,做一個粗泛的例子來說明一下。
假設我們使用了配置檔案hosts.lst
內容如下:
oel1 192.168.27.130 TEST11G ora11g n1 n1
oel1 192.168.27.130 DG11G ora11g n1 n1
oel2 192.168.28.131 ORA11G ora11g n1 n1
分別代表的含義就是主機名,主機Ip地址,資料庫例項名,作業系統使用者,資料庫使用者名稱,資料庫使用者密碼
假設我們只知道資料庫例項,這種場景可能比較多。我們只是想連線到指定的資料庫例項,這個時候使用sqlplus即可。
又或者我們知道主機名和資料庫例項名,我們需要連線到伺服器上去做一些操作,就可以使用ssh來完成,ssh信任關係是需要提前配置的。
我們可以使用如下的指令碼來完成這兩個功能,當然繼續擴充套件也是可以的。
if [ $# -eq 1 ]
then
cc_inst=$1
cat hosts.lst |awk '
BEGIN{
IGNORECASE=1
cc_inst="'$cc_inst'"
cc_index=1
}
{
if ($3== cc_inst )
{
print cc_index,$1,$2, $3,$4, "\n sqlplus " $5"/"$6"@"$3
cc_index=cc_index+1
}
}'
fi
if [ $# -eq 2 ]
then
cc_hosts=$1
cat hosts.lst |awk '
BEGIN{
IGNORECASE=1
cc_inst="'$2'"
cc_hosts="'$cc_hosts'"
cc_index=1
}
{
if ($1== cc_hosts && $3==cc_inst)
{
print cc_index,$1,$2, $3,$4, "\n ssh " $4"@"$1
cc_index=cc_index+1
}
}'
fi
簡單演示一下。
比如我們需要連線至TEST11G這個資料塊例項。
$ ksh con.sh test11g
1 oel1 192.168.27.130TEST11G ora11g
sqlplus n1/n1@TEST11G
比如我們知道主機名為oel1,資料庫例項為test11g
$ ksh con.sh oel1 test11g
1 oel1 192.168.27.130TEST11G ora11g
ssh ora11g@oel1
如果觀察仔細,會發現其實這個過濾中已經設定了大小寫不敏感。對於這兩個功能是透過輸入引數來進行區分的,如果輸入引數為1個,即進行第一個場景的處理,如果為2個,則進行主機名和資料庫例項名的過濾和處理。
對於資料庫的連線也是如此,你可以使用tnsping來得到對應的主機名,但是還需要費些功夫在查詢對應的資料庫使用者名稱密碼上,因為知道主機名可能變得沒有那麼重要,我們可能只需要在客戶端連線即可。
如果要想把這些操作變為一個更快捷輕鬆的方式,使用配置檔案就是一個不錯的選擇,有很多自動化實現指令碼是把這些配置資訊放在資料庫表中,在需要的時候查取,過濾等等。
其實我們也可以在配置檔案中進行資訊的簡單過濾就可以避免去連線資料庫(因為資料庫環境也有可能不可用)
這個時候使用awk就是一個不錯的選擇。其實sed+awk能夠實現很多複雜的功能,我就次拋磚引玉,做一個粗泛的例子來說明一下。
假設我們使用了配置檔案hosts.lst
內容如下:
oel1 192.168.27.130 TEST11G ora11g n1 n1
oel1 192.168.27.130 DG11G ora11g n1 n1
oel2 192.168.28.131 ORA11G ora11g n1 n1
假設我們只知道資料庫例項,這種場景可能比較多。我們只是想連線到指定的資料庫例項,這個時候使用sqlplus即可。
又或者我們知道主機名和資料庫例項名,我們需要連線到伺服器上去做一些操作,就可以使用ssh來完成,ssh信任關係是需要提前配置的。
我們可以使用如下的指令碼來完成這兩個功能,當然繼續擴充套件也是可以的。
if [ $# -eq 1 ]
then
cc_inst=$1
cat hosts.lst |awk '
BEGIN{
IGNORECASE=1
cc_inst="'$cc_inst'"
cc_index=1
}
{
if ($3== cc_inst )
{
print cc_index,$1,$2, $3,$4, "\n sqlplus " $5"/"$6"@"$3
cc_index=cc_index+1
}
}'
fi
if [ $# -eq 2 ]
then
cc_hosts=$1
cat hosts.lst |awk '
BEGIN{
IGNORECASE=1
cc_inst="'$2'"
cc_hosts="'$cc_hosts'"
cc_index=1
}
{
if ($1== cc_hosts && $3==cc_inst)
{
print cc_index,$1,$2, $3,$4, "\n ssh " $4"@"$1
cc_index=cc_index+1
}
}'
fi
比如我們需要連線至TEST11G這個資料塊例項。
$ ksh con.sh test11g
1 oel1 192.168.27.130TEST11G ora11g
sqlplus n1/n1@TEST11G
比如我們知道主機名為oel1,資料庫例項為test11g
$ ksh con.sh oel1 test11g
1 oel1 192.168.27.130TEST11G ora11g
ssh ora11g@oel1
如果觀察仔細,會發現其實這個過濾中已經設定了大小寫不敏感。對於這兩個功能是透過輸入引數來進行區分的,如果輸入引數為1個,即進行第一個場景的處理,如果為2個,則進行主機名和資料庫例項名的過濾和處理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1692274/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 半自動化運維之伺服器資訊維護運維伺服器
- 半自動化運維之動態新增資料檔案(一)運維
- IT運維之自動化運維運維
- Oracle 自動化運維-Python連線OracleOracle運維Python
- 半自動化運維之動態新增資料檔案(二)運維
- 自動化運維的快速演進運維
- 自動化運維工具之Puppet常用資源(一)運維
- 自動化運維工具之Puppet模組運維
- 運維前線:一線運維專家的運維方法、技巧與實踐1.3 運維自動化的困境和價值運維
- 自動化運維工具 SaltStack 在雲端計算環境中的實踐運維
- Python自動化運維之IPy模組Python運維
- MySQL自動化運維之安裝篇MySql運維
- 運維自動化之賬單系統運維
- 關於自動化運維的思考-基線運維
- 自動化運維 Expect運維
- 自動化測試之Selenium篇(一):環境搭建
- 用自動化運維工具解放IT運維運維
- docker入門到自動化搭建php環境DockerPHP
- 自動化運維工具之Puppet master/agent模型、站點清單和puppet多環境設定運維AST模型
- 運維效率之資料遷移自動化運維
- 自動化運維 Ansible運維
- 自動化運維工具之Puppet常用資源(二)運維
- 自動化運維工具之Puppet基礎入門運維
- 品運維自動化之cobbler的安裝序運維
- 自動化運維工具——ansible詳解(一)運維
- mysql-inception自動化運維MySql運維
- Ansible自動化運維工具運維
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- 什麼是自動化運維?為什麼選擇Python做自動化運維?運維Python
- 《Python自動化運維快速入門(第2版)》簡介Python運維
- 北京智和信通:信創運維自動化,全棧適配國產軟硬體環境運維全棧
- 搭建自動化測試環境
- 安卓自動化打包環境搭建安卓
- 介紹一個 MySQL 自動化運維利器 - InceptionMySql運維
- 運維轉型之路 —手工運維到無人值守的自動化運維,從根本實現降本增效運維
- ansible自動化運維入門運維
- 自動化運維的發展方向運維
- 分層運維自動化監控運維