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

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

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

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

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

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