在生產環境中如何批量編輯配置文件
在生產環境中,你是否會碰到這樣的需求:在成百上千的機器上需要去改動一個配置文件。顯然登錄到服務器上面手動去改是不太現實的。這里為大家介紹一下小編在生產環境中所以使用的方法。
這里我們需要借助幾個工具來實現這個功能
1.ansible
2.sed
3.RegularExpression
ansible的作用是連到我們需要改動的主機上面,借助cmd、script等模塊執行一些特定的操作,sed用來增、 刪、 改指定的內容,重點是可以避免交互,而RegularExpression則主要是用來匹配要修改的字符串或者需要從系統中獲取的一些值。
廢話不說多,我們舉個例子來說明:
安裝ansible
yum install ansible -y
?
編輯ansible的配置文件,這里我172.16.4.98 172.16.4.99 172.16.4.100這三臺主機起了一個pro_es的名字,在后面使用ansible的時候pro_es就代表這三參主機了。通常還需要寫上對應的登錄密碼,這里小編用的是證書認證,就不需要寫密碼了。
?
???????????
?
對上面的命令進行說明pro_es對應的是172.16.4.98 172.16.4.99 172.16.4.100這三臺主機,-m 指定使用的模塊,這里使用的是shell 模塊,-a指定模塊的參數。sed -n '3p' /webapp/elasticsearch-5.2.0/config/elasticsearch.yml 是一個sed的命令表示顯示elasticsearch.yml 這個文中中的第三行。所以整條命令的意思就是去98 99 100 這三臺主機上查看一下elasticsearch.yml這個文件的第三行。
我們已經知道怎么去批量查看配置文件,所以想要批量的去修改配置文件,只需要寫修改文件的sed命令就可以了。在使用的過程中小編碰到的一個問題是,如果我們對文件的操作命令很復雜,換句話說就是當-a 后面跟的參數里包含了單引號,雙引號,轉義符等讓你頭疼的時候,可以考慮使用ansible的script模塊,將復雜的命令寫到一個shell或者sed腳本中,就不需要去處理這些引號及轉義符了。
?
舉個例子來說明:
將復雜的命令放進腳本sed.sh里
?
這個腳本將從目標主機上獲取ip地存到ip這個變量里,在elasticsearch.yml文件的最后一行添加一個注釋著的IP地址。
執行
ansible pro_es -m script -a "sed.sh"
驗證結果,是OK的。
?
總結:通過這種方式可以解決批量修改配置文件的問題。前期需要花一些時間在ansible配置文件的編寫上面,后面只需要sed相應的sed命令就可以了,修改一臺和一千臺機器的操作是一樣的。