批量管理模式
串行
并行
ansible批量管理服务概述
1、基于python语言开发
2、基于ssh实现远程管理
ansible批量管理服务意义
1、提高工作效率
2、提高准确度
3、减少维护成本
4、减少重复性的工作
ansible批量管理服务功能
1、实现批量系统操作配置
2、实现批量软件服务部署
3、实现批量文件数据分发
4、实现批量系统信息收集
ansible批量管理服务特点
管理端不需要启动服务进程,即ansible是以非deamon的形式提供服务的(no server)
管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
被控端不需要安装软件程序
被管理端的selinux没有关闭----影响selinux软件的管理,需要调整其配置(libselinux-Python:在selinux开启的情况下也可以启动ansible软件)
被控端不需要启动额外的服务(no client)
管理端是基于模块化运作(moudle run)
利用剧本编写实现自动化(playbook)
ansible批量管理服务部署
PS:ansible不需要以守护进程的方式启动即可提供服务
1、服务端安装部署软件
a、yum install -y ansiable ----需要依赖epel源
b、rpm -ql ansible|egrep -v "^/usr/(share|lib)" #排除的文件
2、不需要配置文件,需要编写主机清单文件
/etc/ansible #
/etc/ansible/ansible.cfg #ansible服务配置文件
/etc/ansible/hosts #主机清单文件
/etc/ansible/roles #角色目录
3、vim /etc/asible/hosts #注意;不要丢了asible,否则会出现问题;配置的主机一定要存在,否则分发不了公钥
172.16.1.31
192.16.1.41
4、测试需要的管理主机
asible all -a "hostname"
ansible服务架构信息
1、清单配置
2、软件模块信息
3、基于密钥的链接主机 getenforce 客户端执行时确定selinux是否关闭
4、主机需要关闭selinux
5、软件剧本功能
主机清单配置方式:
1、方式一:定义一个主机组
[atlanta]
host1
host2
2、方式二、定义主机配置信息
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
[demo]
172.16.1.31 ansible_port=52113 ansible_user=demo ansible_ssh_pass=123456
3、方式三、划分子组配置方式
[usa:children] 定义一个主机组
southeast 定义组里面细化的分组信息
northeast
southwest
northwest
[demoall:children]
demodb
demoweb
[demodb]
172.1.1.1
[demoweb]
172.2.2.2
4、方式四、定义变量得方式配置清单
ansible批量管理服务应用——模块应用
- https://docs.ansible.com
- ansible-doc -l #命令手册
- ansible-doc -s fetch #具体模块的简绍信息
模块命令
格式:
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块) 模块名称 -a(指定动作) "执行的动作"
ansible 127.0.0.1 -m command -a "hostname"
ansible 127.0.0.1 -m command -a "chdir=/tmp touch demo.txt" #在执行命令时进行判断
ansible 127.0.0.1 -m command -a "creates=/tmp touch demo.txt" #执行命令前判断,如果存在,则不进行创建
ansible 127.0.0.1 -m command -a "removes=/tmp touch demo.txt" #如果存在,则删除
常用模块
一、command
comman - executes a command on a remote node #在一个远程主机上执行操作,使用此模块的时候,-a参数后面必须加上一个合法的linux命令
二、shell
executes a command in nodes #在节点上执行操作,万能模块
ansible 192.1.11.1 -m shell -a "echo 123>/tmp/test.txt"
利用shell模块执行脚本步骤:①在服务端编写脚本②将脚本发送到远程终端③添加脚本执行权限
scp -rp yum.sh 192.1.1.1:/server/scripts #远程传输脚本
三、script
Runs a local srcipt,
a、编写脚本
b、运行ansible命令,执行脚本
文件类型模块:
copy - Copies files to remote locations #批量分发数据信息
基本用法:
ansible 192.1.1.1 -m copy -a "src=/etc/hosts dest=/etc/hosts_bak"
补充说明:ansible输出颜色说明
1、绿色:查看主机信息/对主机信息未做改动
2、黄色:对主机信息做了修改
3、红色:命令执行出错了
4、紫色:警告信息
5、蓝色:显示ansible执行过程
扩展用法:
a、传输文件时修改文件的属主和属组信息
ansible 192.1.1.1 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=demo group=demo"
b、修改权限信息
ansible 192.1.1.1 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ model=1777"
c、源文件存在的情况下进行备份
ansible 192.1.1.1 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ backup=yes"
d、远端主机添加一个不存在的文件
ansible 192.1.1.1 -m copy -a "content='demo123' dest=/etc/rsync.password" #只能添加一些简单的内容
file - sets attributes of file #设置文件属性
基本用法:
ansible 192.1.1.1 -m file -a "dest=/etc/hosts owner=demo group=demo model=666"
扩展用法:
1、利用模块创建数据信息(文件、目录、链接文件)
state 参数
=absent ---缺席文件
=directory ---创建目录信息
=file ----检查创建的信息是否存在,绿色存在,红色不存在
=hard ----创建一个硬链接文件
=link ----创建一个软连接文件
=touch ----创建一个文件
ansible 192.1.1.1 -m file -a "dest=/etc/hosts.txt state=directory"
2、利用模块删除数据
ansible 192.1.1.1 -m file -a "dest=/etc/hosts.txt state=absent"
yum模块说明:
ansible 172.1.1.1 -m yum -a "name=iotop state=installed"
service模块说明:管理服务器的运行状态
a、停止
b、启动
c、重启
name:管理服务器名称
state:指定服务状态
started:启动
restarted:重启
stoped:停止
enable:是否开机自启
ansible 172.1.1.1 -m service -a "name=nfs state=started enable=yes"
cron模块说明:批量设置多个主机的定时任务
crontab -e
* * * * * 格式
分 时 日 月 周
ansible 172.1.1.1 -m cron -a "minute=0 hours=2 /job='/usr/sbin/ntpdate ntp1.aliyun.com>/dev/null 2>&1'"
扩展用法:
1、定时任务描述信息
ansible 172.1.1.1 -m cron -a "name='time sync' minute=0 hours=2 /job='/usr/sbin/ntpdate ntp1.aliyun.com>/dev/null 2>&1'"
2、删除定时任务(只能是ansible自己设置的定时任务)
ansible 172.1.1.1 -m cron -a "name='time sync' state=absent"
3、批量注释定时任务(只能是ansible自己设置的定时任务)
ansible 172.1.1.1 -m cron -a "name='time sync' disabled=yes job='/usr/sbin/ntpdate ntp1.aliyun.com>/dev/null 2>&1'"
mount模块:批量挂载操作
src:需要挂载的存储设备或者文件信息
path;指定目标挂载点目录
fstype:指定挂载时的文件文件系统类型
state
present/mounted ---进行挂载
present:不会实现立即挂载,修改fstab文件,实现开机自启
mounted:立即挂载,并且修改fstab
absent/unmounted ---进行卸载
absent:立即卸载,禁止开机自启,删除fstab文件
unmounted:立即卸载,不删除fstab
ansible -m
user模块:实现批量创建用户
基本用法:
ansible 172.1.1.1 -m user -a "name=testuser"
扩展用法:
1、 ansible 172.1.1.1 -m user -a "name=testuser1 uid=6666" #指定用户uid信息
2、ansible 172.1.1.1 -m user -a "name=testuser1 group=testuser"
ansible 172.1.1.1 -m user -a "name=testuser1 groups=testuser"
3、ansible 172.1.1.1 -m user -a "name=rsync create_home=no shell=/sbin/nologin" #创建虚拟用户
4、ansible 172.1.1.1 -m user -a "name=rsync1 " #ansible设置密码需要将明文转换为密文
剧本
作用:一键完成任务
结构:
a、hosts——主机
b、tasks——任务
规范:pyyaml
a、合理缩进 #在ansible中一定不要使用tab进行缩进
b、冒号的使用方法 #使用冒号后面需要一个空格,冒号结尾或者冒号出现在注释中,不需要空格
hosts:172.1.1.1
tasks:
c、短横线应用——(列表)
1、自动化部署rsync
服务端操作:
a、ansible 172.1.1.1 -m yum -a "name=rsync state=installed" #下载安装rsync软件
b、ansible 172.1.1.1 -m copy -a "src=/xxx/rsyncd.conf dest=/etc/" #编写配置文件
c、ansible 172.1.1.1 -m user -a "name=rsync create_home=no shell=/sbin/nologin" #创建虚拟用户rsync
d、ansible 172.1.1.1 -m file -a "dest=/backup state=directory owner=rsync group=rsync" #创建目录
e、ansible 172.1.1.1 -m copy -a "content='rsync_backup:demo123' dest=/etc/rsync.password mode=600" #创建密码文件
f、ansible 172.1.1.1 -m service -a "name=rsyncd state=started enabled=yes" #启动服务
剧本案例:
vim rsync_server.yaml #剧本的后缀名yaml,提示作用
- hosts: 172.1.1.1
tasks:
-name: 01、install rsync
yum: name=rsync state=installed
-name: 02、push conf file
copy:src=/tmp/rsyncd.conf dest=/etc/
- hosts: 172.1.1.2
tasks:
如何执行剧本?
1、检查剧本的语法格式
ansible-playbook --syntax-check rsync_server.yaml
2、模拟执行
ansible-playbook -C rsync_server.yaml
3、直接执行剧本
ansible-playbook rsync_server.yaml
注意事项
随着ansible的迭代升级,其容错能力也在不断提升
有些符号信息无法识别:"<,>,|,;,&"
远程主机无法管理问题分析
1、管理端没有分发好主机的公钥
2、被管理端的ssh服务出现问题
3、被管理端的进程出现僵尸状态
/usr/sbin/sshd -D #负责建立远程链接
sshd: root@pts/0 #维护远程连接(windows--linux)
sshd: root@notty #维护远程连接(ansible---被管理端)
未完待续(335)...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。