Ansible自动化运维工具(一、基础掌握)

一、Ansible概述

Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机。

管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile。

(1)Ansible模块

ansible是新出现的自动化运维工具

基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

模块主要包括:

  1. 连接插件connection plugins:负责和被监控端实现通信;

  2. host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

  3. 各种模块核心模块command模块自定义模块

  4. 借助于插件完成记录日志邮件等功能;

  5. playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible的架构:连接其他主机默认使用ssh协议

二、Ansible操作详解

(1)安装及查询版本

'优先安装epel源'
yum -y install epel-release

'安装ansible'
yum -y install ansible

'查看ansible版本'
ansible --version

'要使用的话需要ssh建立连接'
ssh-keygen -t rsa
ssh-copy-id root@...

(2)配置文件

'主配置文件'
/etc/ansible/ansible.cfg

'主机清单'		
/etc/ansible/hosts				

'存放角色目录'
/etc/ansible/roles/				

(3)主配置文件详解

inventory      = /etc/ansible/hosts		'存放主机清单文件'
forks          = 5						'并发执行数量'
poll_interval  = 15						'回频率或轮询间隔时间,单位s'
sudo_user      = root					'远程主机sudo到什么用户,默认为root'
ask_sudo_pass = True					'sudo时是否需要输入密码'
ask_pass      = True					'Ansible 剧本playbook 是否会自动弹出密码.默认为no'
transport      = smart
remote_port    = 22						'远程主机端口号'
module_lang    = C						'模块和系统之间通信的语言'
module_set_locale = False
roles_path    = /etc/ansible/roles      '使用playbook搜索Ansible roles'
host_key_checking = False       		'不检测主机密钥,第一次连接远程主机不需要输入yes'
timeout = 10            				'SSH超时时间'
remote_user = root      				'使用/usr/bin/ansible-playbook链接的默认用户名,默认使用当前用户名称'
log_path = /var/log/ansible.log     	'日志文件存放路径'
executable = /bin/sh        			'执行的shell环境,用户shell模块'
jinja2_extensions = jinja2.ext.do,jinja2.ext.i18    '允许开启jinja2扩展模块'
private_key_file = /path/to/file    	'私钥文件存储位置'
system_warnings = True      			'禁用系统运行Ansible潜在问题警告'
deprecation_warnings = True    			'PlayBook输出禁用“不建议使用”警告'
nocolor = 1         					'输出带上颜色区别,0表示开启,1表示关闭'
pipelining = False      				'开启pipe SSH通道优化'

(4)主机清单格式

[web]					'表示web组,下面的主机均属于该组'
192.168.1.2
192.168.1.3
[server]
192.168.1.[4:10]		'[4:10]表示连续的主机,包含4和10'
[webserver]
192.168.90.10:22		'默认为22端口,如果不是,需指定'

(5)可执行文件

/usr/bin/ansible			'主程序'
/usr/bin/ansible-doc		'查看文档'
/usr/bin/ansible-galaxy		'连接https://galaxy.ansible.com/下载相应的roles'
/usr/bin/ansible-playbook	'调用playbook剧本'
/usr/bin/ansible-vault		'文件加密工具'

(6)执行状态

绿色:执行成功并且不需要做改变的操作

黄色:执行成功并且对目标主机做变更

红色:执行失败

(7)批量配置管理

a.常用模块
> ansible-doc模块和ping模块 
> ansible-doc相当于shell的man帮助命令,很重要
ansible-doc -l			'列出所有模块'
ansible-doc 模块名		'查看模块帮助文档'
ansible all -m ping     '批量测试连通性'
command模块
> 默认模块,远程执行命令
> 该模块通过-a跟上要执行的命令可以直接执行,若命令中有如下字符则执行不成功:“<”、">""|""&"
> 该模块不启动shell直接在ssh进程中执行,所有使用到shell的命令执行都会失败
ansible web -m command -a 'ls' 
ansible web -m command -a 'top' 
ansible web -m command -a 'pwd'
shell和raw模块
> shell模块基本用法和command一样,区别是shell模块是通过/bin/sh进行执行命令,可以执行任意命令
> raw模块,用法和shell模块一样,可以执行任意命令,区别是raw没有chdir、creates、removes参数
ansible web -m command -a 'chdir=/tmp touch f1'
ansible web -m shell -a 'chdir=/tmp touch f2'
ansible web -m raw -a 'chdir=/tmp touch f3'		'执行出错'
script模块
> 命令比较复杂时,可以通过编写脚本,然后使用script模块批量执行
脚本示例:
所有主机上创建li4用户并设置密码123456,但是存在z3就不进行创建

vim useradd.sh			//创建脚本

id z3
if [ $? != 0 ];then
   useradd li4
   echo 123456 | passwd --stdin li4
fi

ansible all -m script -a './useradd.sh'	 //批量执行脚本
copy模块
> 复制文件到远程主机
> -src 复制本地文件到远程主机,路径为目录时会递归复制,路径以“/”结尾,只复制目录里的内容,若不以“/”结尾,则复制包含目录在内的整个内容
mkdir -p /tmp/liu/xx/
vim  /tmp/liu/xx/resolv.conf

'复制本地文件/tmp/liu/xx/resolv.conf至所有主机的/tmp目录下'
ansible all -m copy -a 'src=/tmp/liu/xx/resolv.conf dest=/tmp'  

'复制本地目录tmp/liu及其子文件至所有主机的/tmp目录下'
ansible all -m copy -a 'src=/tmp/liu dest=/tmp'	 
yum模块和service模块
> 使用yum模块来管理软件包 
> 使用service模块对管理服务的启动、停止、重启和重新加载等操作
'给db组主机批量安装mariadb-server相同配置'
ansible db -m yum -a 'state=installed name=mariadb-server' 		

'给db组批量安装最新的apache'
ansible db -m yum -a 'state=latest name=httpd'	

'db组批量卸载apache'
ansible db -m yum -a 'state=absent name=httpd'		

'启动mariadb.sevice并设置开机自启'
ansible db -m service -a 'state=started name=mariadb.service enable=yes'		
lineinfile模块和replace模块
> 类似于sed的一种行编辑替换模块
> -path 目的文件
> -regexp 正则表达式进行匹配co
> -line 替换后结果
> -replace 替换后的字符串
'匹配后修改对应行'
ansible cache -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^GATEWAY" line="GATEWAY=192.168.1.1"' 

'匹配后修改对应字符串'
ansible cache -m replace -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="\.1\.1" replace=".1.254"' 		
user模块
> user模块是请求三条指令,useradd,userdel,usermod
'模块信息'
ansible-doc -s user

'创建用户'
ansible all -m user -a 'name=test01'

'查看用户账户信息'
ansible all -m 'command' -a 'tail /etc/passwd'

'移除指令'
ansible all -m user -a 'name="test01" state=absent'
cron模块
> 两种状态(state):present表示添加(可以省略),absent表示移除
'查看cron模块信息'
ansible-doc -s cron

'webserver:分类  -m指定模块 -a输出模块内的指令  分钟:每分钟,工作:输出hello,工作名称:test'
ansible webserver -m cron -a 'minute="*/1" job="/usr/bin/echo holle" name="test"'

'查看计划性任务命令'
ansible webserver -a 'crontab -l'

'移除计划性任务'
ansible webserver -m cron -a 'name="test" state=absent'
group模块
> group模块请求的是groupadd、groupdel、groupmod模块
'查看模块信息'
ansible-doc -s group

'system=yes 创建系统组'
ansible mysql -m group -a 'name=mysql gid=1111 system=yes'

'查看组账户信息'
ansible mysql -a 'tail /etc/group'

'创建用户并加入组'
ansible mysql -m user -a 'name=test02 uid=1234 group=mysql system=yes'

'查看用户test02的用户id和组id信息'
ansible mysql -a 'id test02'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值