ansible:管理配置系统,是当下最流行的批量化自动化运维工具之一.
1.Ansible的作用
批量部署,服务安装,日常备份
2.Ansible官方文档
https://docs.ansible.com/ansible/latest/index.html
3.Ansible的特性
(1)无客户端软件,通过ssh远程管理
(2)安装后不需要启动服务
(3)依赖大量的Python模块扩展功能
(4)配置文件:/etc/ansible/ansible.cfg
4.Ansible基础架构
(1).连接插件(connecter plugins):用来连接主机,连接被管理端 核心模块(core
(2).modules:连接主机,实现操作,依赖于具体模块来执行 自定义模块:用户自己开发的功能模块
(3).剧本(playbook):将多个任务组合成一个剧本,由ansible自动批量执行
(4). 主机清单(host inventory):定义ansible管理的客户端主机范围,中大型环境我们有可能需要使用静态inventory或者动态主机清单来生成我们所需要执行的目标主机
Ansible的命令格式:
ansible 主机清单名 -m 调用的模块 -a 动作命令
5.ansible的常用模块
仅支持简单语法命令,但语句中不能包含管道符等复杂元素
ansible web -m command -a “hostname”
command升级版,支持复杂语句,但不支持别名
ansible web -m shell -a “echo 123 |passwd --stdin zhangsan”
安装某些服务的模块
ansible web -m yum -a “name=httpd state=installed”
注释:name 后面的httpd是安装的软件包名,多个软件","分开
state 服务状态:
installed,present 安装软件包
removed,absent 卸载软件包
latest 安装最新软件包
ansible all -m copy -a “src=/etc/hosts dest=/etc/hosts backup=yes”
注释: src: 源文件路径
dest: 目标文件路径
backup 覆盖到目标文件前,是否提前备份
content:添加文件内容
group 指定属组
owner 指定属主
mode 指定权限
(3)创建目录,并赋权,更改属主属组
ansible all -m file -a “path=/backup owner=root group=root recurse=yes mode=777”
(4)在源文件a.txt中写入a:1:
ansible rsync -m copy -a “content=‘a:1’ dest=/a.txta.txtowner=root group=root mode=600”
ansible rsync -m shell -a “ls -l /etc/rsync.password”
ansible rsync -m shell -a “cat /etc/rsync.password”
用于开启某些服务的模块
ansible web -m service -a “name=httpd state=stopped enabled=yes”
注释: name 指定服务名 state 指定服务运行状态
started 开启服务
stopped 关闭服务
reloaded 重载服务
restarted 重启服务
enabled 是否开机自启
在所有清单主机上创建组www,gid 666
ansible all -m group -a “name=www gid=666”在所有清单主机删除组www
ansible all -m group -a “name=www gid=666 state=absent”
absent为删除
ansible all -m user -a “name=www”
ansible web -m shell -a “echo 123 | passwd --stdin www”
创建目录,并赋权,更改属主属组
ansible rsync -m file -a “path=/backup owner=root group=root recurse=yes mode=777”
创建文件
ansible rsync -m file -a “path=/test.txt owner=root group=root state=touch mode=777”
挂载nfs目录到web下的/var/www/html
ansible web -m mount -a “src=192.168.1.113:/nfs path=/var/www/html fstype=nfs state=mounted”
注释: state 挂载状态
mounted 挂载
unmounted 卸载
在ansible上编写任意测试脚本,让指定主机执行:
ansible web -m script -a “/root/test.sh”
ansible all -m cron -a "name='a.txt' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' "
参数: (1.)minute参数:此参数用于设置计划任务中分钟设定位的值
(2.)hour参数:此参数用于设置计划任务中小时设定位的值,
(3.)day参数:此参数用于设置计划任务中日设定位的值,
(4.)month参数:此参数用于设置计划任务中月设定位的值,
(5.)weekday参数:此参数用于设置计划任务中周几设定位的值,
(6.)year参数:此参数用于设置计划任务中年设定位的值,
(7.)special_time参数:,计划任务的时间设定格式为 @reboot 或者@hourly。@reboot
表示重启时执行,@hourly 表示每小时执行一次,相当于设置成”0 0 * * *” ,这种@开头的时间设定格式则需要使用
special_time 参数进行设置,special_time 参数的可用值有
reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。(8.)user参数:此参数用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户。
(9.)job参数:此参数用于指定计划的任务中需要实际执行的命令或者脚本,比如上例中的 “echo test” 命令。
(10.)name参数:此参数用于设置计划任务的名称,计划任务的名称会在注释中显示,当不指定计划任务的名称时,ansible
会默认为计划任务加入注释,注释的内容为 #Ansible: None,假设指定计划任务的名称为 test,那么注释的内容为#Ansible:
test,在一台机器中,计划任务的名称应该具有唯一性,方便我们以后根据名称修改或删除计划任务。(11.)state参数:当计划任务有名称时,我们可以根据名称修改或删除对应的任务,当删除计划任务时,需要将 state 的值设置为
absent。(12.)disabled参数:当计划任务有名称时,我们可以根据名称使对应的任务”失效”(注释掉对应的任务)。注意,使用此参数时,除了需要指定任务的名称,还需要同时指定任务的job
以及任务的时间设定,而且任务的时间设定必须和对应任务完全相同,否则在注释任务的同时,任务的时间设定会被修改,除非你确定这样做。(13.)backup参数:如果此参数的值设置为
yes,那么当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,cron 模块会在远程主机的 /tmp
目录下创建备份文件,以 crontab 开头并且随机加入一些字符,具体的备份文件名称会在返回信息的 backup_file
字段中看到,推荐将此此参数设置为 yes
ansible web01 -m cron -a "name=‘ntpdate time’ minute=*/5 job=’/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null’ "
注释:写时间必须按照这个顺序:分钟(minute),小时(hour),日(day),month(月),weekday(周)
ansible web -m unarchive -a “src=/usr/src/redis-5.0.7.tar.gz dest=/usr/src/”
ansible:192.168.1.133
web:192.168.1.137
ansibnle主机
yum -y install epel-release
yum -y install ansible
#末尾添加:
[web]
192.168.1.137
3.本机 安装httpd,
yum -y install httpd
启用80端口
vim /etc/httpd/conf/httpd.conf
ServerName www.example.com:80 #将94行的#好去点
修改tab缩进2格
root@localhost playbook]# vim /root/.vimrc
#添加:
set tabstop=2
#保存退出
root免密登录
ssh-keygen -t rsa
ssh-copy-id [email protected]
关闭两台主机的防火墙
[root@localhost ansible]# ansible all -m shell -a "systemctl stop firewalld"
[root@localhost ansible]# ansible all -m shell -a "systemctl status firewalld"
[root@localhost ansible]# cd /etc/ansible/
[root@localhost ansible]# mkdir playbook
[root@localhost ansible]# cd playbook/
root@localhost playbook]# vim httpd.yaml
- hosts: web
tasks:
- name: install httpd
yum: name=httpd state=latest
- name: httpd config
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: start httpd
shell: systemctl start httpd
handlers:
- name: restart httpd
shell: systemctl restart httpd