- 之前自己搭建集群,使用方法非常老土:
- 在一个机器完成所有的配置,通过scp同步到其他机器
- 逐个机器的登录,在每台机器上启动服务
- 工作以后发现,自己感觉做事很吃力时,还是多上网查查,不要傻傻地用笨方法
- 搭建集群时,使用ansible下发安装包、查看机器状态等,简直不要太方便
- 由于时间问题,ansible的安装、简单使用,可以参考博客:ansible批量执行命令
1. 常见的使用命令
-
自己经常使用到的命令有
# 测试配置的机器是否能ping通 ansile test -m ping # 指定hosts,而非使用默认/etc/ansible/hosts配置 ansile test -m ping -i hosts # 指定登录用户 ansible test -m shell -a "sudo jps" -u datard -k # 拷贝命令 ansible test -m copy -a 'src=./jvm.properties dest=/opt/xxx/etc/' # 执行shell命令 ansible test -m shell -a 'cat /opt/xxxx/jvm.properties | grep "max.request.size" '
2. 一些高阶需求
2.1 shell模块,命令中有特殊字符
-
通过shell执行shell命令时,需要通过awk获取某些列的数据并打印。
-
其中
awk '{print $1}'
中,$
属于特殊字符,需要添加转义字符\
才能正常运行ansible test -m shell -a "sudo jps | awk '{print \$1}'"
2.2 shell模块,命令中需要定义变量
- 将命令的执行结果赋值给变量,再针对该变量进行后续处理
- 下面命令的意图:获取某个服务的进程
pid
,然后进入对应的/proc/pid
目录获取其工作目录信息(cwd
) - 这时,需要将
sudo jps | grep xxServer | awk '{print \$1}'
的结果保存变量中,变量的定义方式$( ... )
- 同样需要对变量定义中的
$
添加转义字符\
ansible test -m shell -a "sudo ls -l /proc/\$(sudo jps | grep xxServer | awk '{print \$1}') | grep cwd "