批量管理模式

串行
并行

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服务架构信息

image.png

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批量管理服务应用——模块应用

模块命令
格式:
    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)...


撸猫鼠
10 声望1 粉丝