在生產(chǎn)環(huán)境中如何批量編輯配置文件
在生產(chǎn)環(huán)境中,你是否會碰到這樣的需求:在成百上千的機器上需要去改動一個配置文件。顯然登錄到服務(wù)器上面手動去改是不太現(xiàn)實的。這里為大家介紹一下小編在生產(chǎn)環(huán)境中所以使用的方法。
這里我們需要借助幾個工具來實現(xiàn)這個功能
1.ansible
2.sed
3.RegularExpression
ansible的作用是連到我們需要改動的主機上面,借助cmd、script等模塊執(zhí)行一些特定的操作,sed用來增、 刪、 改指定的內(nèi)容,重點是可以避免交互,而RegularExpression則主要是用來匹配要修改的字符串或者需要從系統(tǒng)中獲取的一些值。
廢話不說多,我們舉個例子來說明:
安裝ansible
yum install ansible -y
?
編輯ansible的配置文件,這里我172.16.4.98 172.16.4.99 172.16.4.100這三臺主機起了一個pro_es的名字,在后面使用ansible的時候pro_es就代表這三參主機了。通常還需要寫上對應(yīng)的登錄密碼,這里小編用的是證書認證,就不需要寫密碼了。

?
???????????

?
對上面的命令進行說明pro_es對應(yīng)的是172.16.4.98 172.16.4.99 172.16.4.100這三臺主機,-m 指定使用的模塊,這里使用的是shell 模塊,-a指定模塊的參數(shù)。sed -n '3p' /webapp/elasticsearch-5.2.0/config/elasticsearch.yml 是一個sed的命令表示顯示elasticsearch.yml 這個文中中的第三行。所以整條命令的意思就是去98 99 100 這三臺主機上查看一下elasticsearch.yml這個文件的第三行。
我們已經(jīng)知道怎么去批量查看配置文件,所以想要批量的去修改配置文件,只需要寫修改文件的sed命令就可以了。在使用的過程中小編碰到的一個問題是,如果我們對文件的操作命令很復(fù)雜,換句話說就是當-a 后面跟的參數(shù)里包含了單引號,雙引號,轉(zhuǎn)義符等讓你頭疼的時候,可以考慮使用ansible的script模塊,將復(fù)雜的命令寫到一個shell或者sed腳本中,就不需要去處理這些引號及轉(zhuǎn)義符了。
?
舉個例子來說明:
將復(fù)雜的命令放進腳本sed.sh里

?
這個腳本將從目標主機上獲取ip地存到ip這個變量里,在elasticsearch.yml文件的最后一行添加一個注釋著的IP地址。
執(zhí)行

ansible pro_es -m script -a "sed.sh"
驗證結(jié)果,是OK的。

?
總結(jié):通過這種方式可以解決批量修改配置文件的問題。前期需要花一些時間在ansible配置文件的編寫上面,后面只需要sed相應(yīng)的sed命令就可以了,修改一臺和一千臺機器的操作是一樣的。