这个小工具真的好用,运维方便了很多。随着慢慢用的变多,整个单独的文档记录一些平时需要批量处理的小场景和命令。
因为场景通常比较简单,基本都是用的 Linux命令和shell脚本,也没什么学习成本。理论上只要能写好shell脚本、传到目标库、执行,足够干n多事情了。基本命令参考:
ansible权威指南笔记(一)—— 安装配置、常用命令与模块_Hehuyi_In的博客-CSDN博客_ansible中文权威指南
一、 检查服务器磁盘使用率
主要场景:节前快速检查服务器磁盘
先从最简单的开始,利用ansible批量执行 df -h 命令,并且这个普通用户都能执行,不存在sudo之类的配置。想看的方便点也可以搞成个shell脚本,下面有批量执行shell脚本的方法。
- 编辑host文件(任意位置均可)
vi /tmp/host
[all:vars]
ansible_ssh_user=dba # ssh用户
ansible_ssh_pass=xxxx # ssh用户的密码,配置了key可以不用
[testgroup]
10.192.168.101
10.192.168.137 ansible_ssh_port=9528
- 批量执行df -h命令
ansible -i /tmp/host testgroup -m shell -a "df -h" > disk_usage.txt
二、 安装/更新软件包
主要场景:服务器需要批量安装新软件包,或者修复漏洞要批量升级。
- 编辑host文件(任意位置均可)
vi /tmp/host
生产服务器一般不会有root的密码,都是sudo用户切换过去的,所以下面的文件加上了sudo的配置。
[all:vars]
ansible_ssh_user=dba # ssh用户
ansible_ssh_pass=xxxx # ssh用户的密码,配置了key可以不用
ansible_become=true # 执行sudo
ansible_become_pass=xxxxx # sudo切换的密码,配置了免密可以不用
[testgroup]
10.192.168.101
10.192.168.137 ansible_ssh_port=9528
- 传送rpm文件至目标库
# /tmp/host为host文件位置,testgroup为主机组名称
ansible -i /tmp/host testgroup -m copy -a "src=polkit-0.112-26.0.1.el7_9.1.x86_64.rpm dest=/tmp/"
- 更新rpm文件
ansible -i /tmp/host testgroup -m shell -a "cd /tmp; rpm -Uvh polkit-0.112-26.0.1.el7_9.1.x86_64.rpm"
三、 备份原文件,发送新文件
主要场景:批量修改服务器配置文件、监控脚本等
- 编辑host文件(任意位置均可)
vi /tmp/host
[all:vars]
ansible_ssh_user=dba # ssh用户
ansible_ssh_pass=xxxx # ssh用户的密码,配置了key可以不用
ansible_become=true # 执行sudo
ansible_become_pass=xxxxx # sudo切换的密码,配置了免密可以不用
[testgroup]
10.192.168.101
10.192.168.137 ansible_ssh_port=9528
- 备份旧文件
ansible -i /tmp/host testgroup -m shell -a "cd /etc/zabbix/zabbix_agentd.d/zabora/sql/; cp db_enqueue_count.sql db_enqueue_count.sql.bak0802"
- 传送新文件至各服务器
ansible -i /tmp/host testgroup -m copy -a "src=db_enqueue_count.sql dest=/etc/zabbix/zabbix_agentd.d/zabora/sql/"
当然还可以再传个小脚本验证下配置有没成功
四、sql 与 shell 脚本执行
主要场景:批量设置Oracle、pg 数据库参数、创建用户、执行shell脚本等等
- 编辑host文件(任意位置均可)
vi /tmp/host
因为是改数据库参数,这里我们需要用oracle用户,但是没有oracle用户的密码(也可能每个服务器上密码是不一样的)。所以需要:dba用户 -> sudo切换到root -> 切换到oracle
[all:vars]
ansible_ssh_user=dba # ssh用户
ansible_ssh_pass=xxxx # ssh用户的密码,配置了key可以不用
ansible_become=true # 执行sudo
ansible_become_pass=xxxxx # sudo切换的密码,配置了免密可以不用
ansible_become_user=oracle # 再切换到oracle用户
[testgroup]
10.192.168.101
10.192.168.137 ansible_ssh_port=9528
- 准备修改脚本
vi setParams.sh
#!/bin/bash
source ~/.bash_profile
sqlplus -S / as sysdba << EOF
set heading off feedback off pagesize 0 verify off echo off
Alter system set "_optimizer_use_feedback" = FALSE;
Alter system set "_optimizer_gather_feedback" = FALSE;
EOF
chmod +x setParams.sh
- 传送脚本并执行
script命令 = 传送+执行+删除脚本,一步到位
ansible -i /tmp/host testgroup -m script -a "setParams.sh"
更多场景,等待发现...