在生产环境中如何批量编辑配置文件
在生产环境中,你是否会碰到这样的需求:在成百上千的机器上需要去改动一个配置文件。显然登录到服务器上面手动去改是不太现实的。这里为大家介绍一下小编在生产环境中所以使用的方法。
这里我们需要借助几个工具来实现这个功能
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命令就可以了,修改一台和一千台机器的操作是一样的。