测试环境在xxxxx节点
版本ansible2.6.20 , 节点存在1.7 2.7 2.8 2.9版本的可以自行升降级,命令1版本有部分差别
1.ansible 安装
python setup.py install --record files.txt (指定安装信息保存在files.txt)
cat files.txt | xargs rm -rf (通过files.txt保存信息可以卸载ansible)
ansible安装中
cp /opt/beh/ans/ansible-2.6.20/examples/ansible.cfg /etc/ansible
建议启用两个参数
host_key_checking=False #检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log #日志文件
测试命令:
ansible 192.168.10.10 -m command -a 'ls /' -u hadoop -k -b -K
ansible系列的命令
ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull
2.模块查看
ansible-doc -l |wc -l
3681
ansible-doc命令使用
ansible-doc -a 显示所有模块的文档
-l ,--list 列出可用模块
-s ,--snippet 显示指定模块的playbook片段
3.ansible典型模块使用
(1)ansible通过ssh 实现配置管理,应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
(2)ansible <host-pattarn> [-m moudle_name] [-a args]
--version 显示版本
-m moudle 指定模块,默认为command
-v 详细过程 -vv -vvv更详细
--list-hosts 显示主机列表。简写为--list
-k ,--ask-pass 提示输入ssh连接密码,默认为Key验证
-K .--ask-become-pass 提示输入sudo的口令
-C ,--check 检查,不执行
-T ,--timeout=TIMEOUT 执行命令的超时时间,默认为10s
-u ,--user=REMOTE_USER 执行远程执行的用户
-b ,--become 代替旧版的sudo切换
(3)ansible 的 host-pattarn
匹配主机的列表
all:表示所有Inventory中的所有主机
ansible all -m ping
通配符 *
ansible serve* -m ping
或的关系 :
ansible servers:git -m ping
逻辑与 :& (需要用引号引起来)
ansible "servers:&git" -m ping
逻辑非 :!
ansible 'servers:!git' -m ping
在servers组但是不在git组
注意,这里用单引号
正则表达式
ansible "servers:&dbvers" -m ping
ansible "~(ser|db)vers" -m ping
(4)ansible的命令执行过程
1.加载自己的配置文件,默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如 command
3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应用户$HOME/.ansible/tmp/ansible-tmp-数字/xxx.py文件
4.给文件+x执行
5.执行并返回结果
6.删除临时py文件,sleep 0退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并对目标主机做出变更
红色:执行失败
(5)ansible常用模块使用整理
1.command :在远程主机执行命令,默认模块,可忽略-m选项
eg: ansible all -a 'df -h'
-chdir (切换文件夹)
-create (存在而不执行)
-removes(不存在而不执行)
ansible all -a 'removes=/etc/fs cat /etc/fstab'
ansible 192.168.10.10 -a 'useradd test1'
ansible 192.168.10.10 -a 'getnet passwd test1'
command 模块不支持 $VARNAME < > | ; & 等,这些用shell模块实现
2.shell:和command相似,用shell执行命令
ansible-doc shell
ansible 192.168.10.10 -m shell -a "echo $HOSTNAME"
ansible 192.168.10.10 -m shell -a "echo hsdekl_jd |passwd -stdin wang"
3.script:运行脚本
-a "/path/to/script_file"
ansible servers -m script -a "/opt/beh/ans/f1.sh"
4.copy(从服务器复制文件到客户端):
ansible servers -m copy -a 'src=/opt/beh/ans/f1.sh dest=/opt/beh backup=yes'
默认复制过去,直接覆盖,这里backup设置为先备份
ansible servers -m copy -a 'src=/opt/beh/ans/f1.sh dest=/opt/beh mode=000 owner=hive backup=yes' -b -K
ansible servers -m copy -a 'content="hello" dest=/opt/beh/he mode=000 owner=hive backup=yes' -b -K
content 可以添加内容到文件传过去
5.fetch (从客户端取文件到服务器端,copy相反):
ansible-doc -s fetch
只能抓取单个文件
ansible servers -m fetch -a 'src=/var/log/messages dest=/opt/beh/test' -b -K
[hadoop@jftestenv-cs31 beh]$ tree test/
test/
├── 10.124.211.32
│ └── var
│ └── log
│ └── messages
└── 192.168.10.10
└── var
└── log
└── messages
ansible 192.168.10.10 -m shell -a 'tar jcf log.tar.xz /var/log*.log'
archive/unarchive(打包与解包模块)
6.file(设置文件属性):
ansible-doc -s file
ansible 192.168.10.10 -m file -a 'name=/home/hadoop/ansible_test/666.test state=touch' (创建文件)
ansible 192.168.10.10 -m file -a 'name=/home/hadoop/ansible_test/666.test state=absent' (删除文件)
ansible 192.168.10.10 -m file -a 'name=/home/hadoop/ansible_test/666.test state=directory' (创建文件夹)
ansible 192.168.10.10 -m file -a 'name=/home/hadoop/ansible_test/666.test state=absent' (删除文件夹)
ansible 192.168.10.10 -m file -a 'src=/home/hadoop/ansible_test/666.test dest=/home/hadoop/ansible_test/666.link state=link' (创建软连接)
ansible 192.168.10.10 -m file -a 'src=/home/hadoop/ansible_test/666.test dest=/home/hadoop/ansible_test/666.link state=absent' (删除软连接)
还支持owner和mode添加
7.hostname(管理主机名)
ansible 192.168.10.10 -m hostname -a 'name=node1' -b -K
8.cron(计划任务)
支持时间:minute ,hour ,day ,month ,weekday
ansible 192.168.10.10 -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBI warning" name=warningcron' -b -K (添加一个每分钟执行的cron定时任务)
ansible 192.168.10.10 -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron' -b -K (禁用) disabled=true/yes
ansible 192.168.10.10 -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warningcron' -b -K (启用) disabled=false/no
ansible 192.168.10.10 -m cron -a 'state=absent job="/usr/bin/wall FBI warning" name=warningcron' -b -K (删除)
9.Yum (管理包)
ansible 192.168.10.10 -m yum -a 'name=ftp' (安装)
ansible 192.168.10.10 -m yum -a 'name=ftp state=absent' (卸载)
ansible 192.168.10.10 -m yum -a 'name=ftp,expect' (安装多个)
ansible 192.168.10.10 -m yum -a 'name=ftp,expect state=absent' (卸载多个)
如果需要单独的安装独立的rpm包,需要先copy到所有执行节点 再执行
ansible 192.168.10.10 -m yum -a 'name=/home/hadoop/mysql...rpm ' disable_gpg_check=yes' (忽略依赖检查)
dstat (监控工具)
ansible 192.168.10.10 -m yum -a 'name=dstat update_cache=yes' (更新缓存)
10.service (服务管理)
ansible-doc -s service
ansible 192.168.10.10 -m service -a 'name=vsftpd state=started enabled=yes' (启动并设置开机自启动)
确认下是否开机启动: systemctl is-enabled vsftpd
systemctl status vsftpd
11.user (管理用户)
ansible-doc -s user
ansible 192.168.10.10 -m user -a 'name=yrz shell=/sbin/nologin system=yes home=/home/yrz groups=root,bin uid=2222 comment="test user"' -b -K (创建用户)
命令检查:
ansible 192.168.10.10 -a 'getent passwd yrz'
ansible 192.168.10.10 -m shell -a 'ls /home'
ansible 192.168.10.10 -m user -a 'name=yrz state=absent remove=yes' -b (删除用户)
12.group (管理用户组)
ansible-doc -s group
ansible 192.168.10.10 -m group -a 'name=yrz system=yes gid=2222' -b (创建用户组)
ansible 192.168.10.10 -a 'getent group yrz' (检查是否存在)
ansible 192.168.10.10 -m group -a 'name=yrz state=absent' -b (删除用户组)