zoukankan      html  css  js  c++  java
  • 综合架构_ansible自动化管理服务

    友情链接博文地址:

    https://www.michaelxia.cn/Michael/55.html

     https://ansible-tran.readthedocs.io/en/latest/docs/intro_adhoc.html#deploying-from-source-control

     ansible 添加数据库: https://docs.ansible.com/ansible/latest/modules/mysql_db_module.html

     ansible mysql 添加户: https://docs.ansible.com/ansible/latest/modules/mysql_user_module.html

     

    ansible帮助信息查看方法:


    01. 查看官方资料文档
    02. 利用ansible帮助查看命令


    ansible-doc -l         --- 列出所有ansible模块信息

    ansible-doc -s 模块名  --- 查看指定模块详细参数信息

    ansible-doc 模块名      --- 显示的帮助信息更加详细

    概述:

      01:基于Python语言开发的自动化软件工具

      02:基于SSH远程管理服务实现远程主机批量管理

    意义:

      01:提高工作效率

      02:提高工作准备度

      03:减少维护的成本

      04:减少重复性工作

    功能:

      批量系统操作配置,软件服务部署,文件数据分发,系统信息收集

    特点:

      01:管理端不需要启动服务程序(no server)

      02:管理端不需要编写配置文件(/etc/ansible/ansible.cfg)

      03:受空端不需要安装软件程序(liuselinux-python)

      04:受控端不需要启动服务程序(no agent)

    服务架构:

     

    ansible服务软件程序安装

    管理端安装软件: yum install -y ansible (需要依赖epel源)

    受控端安装软件:yum install -y libselinux-puthon(可选)

    ansible软件主机清单配置(vim  /etc/ansible/hosts)

    方式一:直接编写主机地址

    172.16.1.7

    172.16.1.31

    172.16.1.41

     

     

    方式二:编写主机组信息

    [rsync_server]

    172.16.1.41

    [rsync_client]

    172.16.1.7

    172.16.1.8

    172.16.1.31

    测试:

    ansible rsync_server -m ping

    ansible rsync_client -m ping

     

    方式三:主机清单内置变量配置方法:

    利用基于内置密码方式批量管理

    172.16.1.41 ansible_user=root ansible_password=****** ansible_port=22

    复制代码
    ansible_host    --- 可以设置IP地址信息,建立地址和名称解析关系
    ansible_port    --- 指定被管理主机远程服务端口信息
    ansible_user    --- 指定被管理主机远程连接用户信息
    ansible_password  -指定被管理主机连季节用户密码信息
    
    ansible_become -- 是否开启普通用户权限 yes true(开启)/no false(关闭)
    ansible_become_method --指定普通用户提权方法 su -root/ sudo
    ansible_become_user  --- 指定提权后用户身份
    ansible_become_password --- 指定提前后用户密码
    复制代码

     

     

     

    以普通用户进行批量管理提权操作: 

    复制代码
    采用su方式进行提权
    172.16.1.41 ansible_user=zhq ansible_password=****** ansible_become=yes ansible_become_method=su ansible_become_user=root ansible_become_password=******
    
    采用sudo方式进行提权: 
    172.16.1.41 ansible_user=zhq ansible_password=****** ansible_become=yes ansible_become_method=sudo ansible_sudo_user=root ansible_become_password=123456
    复制代码

     

    方式四:主机组变量设置方法(剧本)

    [rsync_server]

    172.16.1.41

    [rsync_server:vars]

    ansible_user=root

    ansible_password=******

    ansible_port=22

     

    方式五:主机组子组配置方法

    [db:children]

    master_db

    slave_db

    [master_db]

    172.16.1.7

    [salve_db]

    172.16.1.31

    172.16.1.41

     

    方式六:序列

    172.16.1.[1:100]

    ansible配置模块信息

    ansible模块使用方法:

    ansible 命令语法结构:

    ansible 管理主机信息(主机组名称 主机地址或名称 all) -m(用什么模块) -a "模块参数信息 "

    ansible  主机信息  -m  模块名称  -a "参数信息"


     颜色说明:

    https://docs.ansible.com/ansible/latest/reference_appendices/config.html

    1)命令模块(默认模块) --command 

    作用:批量管理多个数据,执行命令

    常见用法:

    ansible db -m command -a "hostname

    复制代码
     特殊参数:
    
    chdir: 在操作远程主机前,先切换目录,再执行命令
    
    ansible db -m command -a "chdir=/backup touch oldboy.txt"
    
    creates:判断一个文件是否存钻
    
      如果文件数据存在,就跳过后续的操作过程
    
      如果文件数据没有,就执行后续的操作过程
    
    remove:判断一个文件是否存在:
    
      如果文件数据存在,就执行后续的操作过程
    
      如果文件数据没有,就跳过后续的操作过程
    
    ansible db -m command -a "creates=/backup/oldgirl.txt touch oldgirl.txt"
    ansible db -m command -a "removes=/backup/oldgirl.txt touch oldgirl.txt"
    复制代码

     2)命令模块(万能模块) shell 

    复制代码
    作用: 批量管理多个数据,执行命令; 但是可以识别特殊一些符号: < > | ... 
    常见用法:
    ansible db -m shell -a "echo oldboy66 >/tmp/oldboy.txt"
    
    特殊参数:
    chdir参数: 在操作远程主机之前, 先切换目录, 在执行操作命令
    
    ansible db -m shell -a "chdir=/backup touch oldboy.txt"
    creates参数: 判断一个文件是否存在
      如何文件数据存在, 就跳过后续的操作过程
      如何文件数据没有, 就执行后续的操作过程
    removes参数: 判断一个文件是否存在
      如何文件数据存在, 就执行后续的操作过程
      如何文件数据没有, 就跳过后续的操作过程
    
    
    ansible db -m shell -a "creates=/backup/oldgirl.txt touch oldgirl.txt"
    ansible db -m shell -a "removes=/backup/oldgirl.txt touch oldgirl.txt"
    复制代码

     3)命令模块(脚本模块) -script

    复制代码
    作用:可以远程执行脚本文件
    
    shell模块执行脚本
    
    第一步:编写脚本文件
    
    第二步:将脚本进行分发
    
    第三步:修改脚本文件权限
    
    第四部:运行脚本
    
    
    
    script模块执行脚本
    
    第一步:编写脚本文件
    
    第二步:运行脚本文件
    
    ansible 172.16.1.41 -m -script -a "/server/scripts/test.sh"
    复制代码

     4) 文件模块(分发数据) -copy

    复制代码
    作用:
    
    1.将管理主机上的数据分发到其他所有被管理主机上
    
    2.可以将被管理主机上的数据进行复制操作
    
    常见使用方法:
    
    管理主机  ---> 被传输到管理主机
    
    常见使用方法:
    管理主机 --- 传输到被管理主机
    ansible 172.16.1.41 -m copy -a "src=/m01/oldboy.txt dest=/backup"
    操作被管理主机数据(A目录数据) --- 传输到被管理主机(B目录数据)
    ansible 172.16.1.41 -m copy -a "src=/backup/oldboy.txt dest=/backup01/ remote_src=yes"
    
    
    
    特殊用法参数:
    
    mode: 传输文件后进行修改文件数据权限
    
    owner: 传输文件后进行修改文件属主权限
    
    group:  传输文件后进行修改文件属组权限
    
    ansible 172.16.1.41 -m copy -a "src=/m01/oldboy.txt dest=/backup/ mode=666 owner=oldboy group=oldboy"
    
    backup: 传输文件之前, 对要进行覆盖的文件做备份操作
    ansible 172.16.1.41 -m copy -a "src=/m01/oldboy.txt dest=/backup/ backup=yes"
    
    content: 在被管理主机创建一个新的文件, 并添加简单内容
    ansible 172.16.1.41 -m copy -a "content='oldboy123' dest=/backup/rsync.password"
    复制代码

     5)文件模块(文件属性) -file

    复制代码
    作用:
    1.对已有文件数据属性信息作出修改调整
    2.在对台主机上进行数据创建或删除操作
    参数:
    path
    recurse
    state -> 选项(directory)
    group
    owner
    mode
    常见使用方法: 1. 修改数据属性信息 ansible 172.16.1.41 -m file -a "path=/backup/oldboy.txt mode=644 owner=root group=root" 2. 创建删除数据信息 创建普通文件: ansible 172.16.1.41 -m file -a "path=/backup/oldboy01.txt state=touch" 创建目录文件: ansible 172.16.1.41 -m file -a "path=/backup/oldboy state=directory" 创建链接文件: 软链接: ansible 172.16.1.41 -m file -a "src=/backup/oldboy.txt path=/backup/oldboy/oldboy_link state=link" 硬链接: ansible 172.16.1.41 -m file -a "src=/backup/oldboy.txt path=/backup/oldboy/oldboy_hard state=hard" 删除数据文件: ansible 172.16.1.41 -m file -a "path=/backup/oldboy01.txt state=absent" ansible 172.16.1.41 -m file -a "path=/backup/oldboy/ state=absent"
    复制代码

     

    递归修改目录权限:

    ansible 172.16.1.41 -m  file -a "path=/opt recurse=yes mode=755"

     6)文件模块(拉取数据) -fetch

    作用:将被管理端主机数据进行拉取保存到管理主机上

     7)系统应用模块(安装软件) yum

    复制代码
    作用:可以用于批量安装程序软件

    用法: ansible 172.16.1.41 -m yum -a "name=htop state=installed"
    参数: name: 指定需要安装软件名称 state:是否安装软件(installed)或是卸载软件(removed)
    persent absent(缺席)
    latest:
    复制代码

     8) 系统应用模块 service

    复制代码
    作用:可以用于批量启动/停止/重启服务
    参数:
    name
    state: started
    stopped
    restarted
    reloaded
    enabled: yes
    no
    用法: 停止服务:ansible 172.16.1.41 -m service -a "name=crond state=stopped" 启动服务:ansible 172.16.1.41 -m service -a "name=crond state =started" 重启服务:ansible 172.16.1.41 -m service -a "name=crond state=restarted" 重载服务: ansible 172.16.1.41 -m service -a "name=crond state=reloaded" 开机自动运行服务:ansible 172.16.1.41 -m service -a "name=crond enabled=yes" 开机禁止运行服务:ansible 172.16.1.41 -m service -a "name=crond enabled=no"
    复制代码

     9) 系统应用模块(定时任务模块)  cron

    复制代码
    作用:可以用于批量设置定时任务
    
    * * * * * 执行任务 &>dev/null
    
    minute:分钟信息 0-59 2,*/2, 1-10, 1, 3, 4 
    hour:小时信息 0-23
    day: 日期信息 1-31
    month:月份信息 1-12
    weekday:星期信息0-6
    job: 任务参数
    name: 定时任务注释信息
    
    编写定时任务:
    ansible 172.16.1.41 -m cron -a "name=时间同步01 minute=*/5 job='/usr/sbin/ntpdate  ntp1.aliyun.com &>/dev/null'"
        
    删除定时任务:
    ansible 172.16.1.41 -m cron -a "name=时间同步01 minute=*/5 job='/usr/sbin/ntpdate  ntp1.aliyun.com &>/dev/null' state=absent"
        
    临时关闭定时任务:
    ansible 172.16.1.41 -m cron -a "name=时间同步 minute=*/5 job='/usr/sbin/ntpdate  ntp1.aliyun.com &>/dev/null' disabled=yes"
    复制代码

    10)用户相关模块 user

    复制代码
    作用:可以用于批量创建用户信息
    用法:
    ansible 172.16.1.41 -m user -a 'name=zhq password="$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1"'
    
    name: 指定创建用户名称信息
    uid:设置用户uid数值信息
    group:指定用户所属主组信息 useradd  -g
    groups: 指定用户所属附属组信息 useradd -G
    shell: 指定用户登录方式 /sbin/nologin
    create_home:指定创建用户是否有家目录
    password: 指定用户密码信息必须是密文
    
        如何生成密文密码信息:
        ========================================================================
        方式一: 利用ansible命令给用户设置密文密码
        ansible 172.16.1.41 -m debug  -a "msg={{'明文密码'|password_hash('sha512','zhq') }}"
        $6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1
        
        方式二: 利用python命令给用户设置密文密码
        yum install -y python-pip
        pip install passlib
        python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
        ========================================================================
    复制代码

     

    复制代码
    删除用户信息:
    ansible 172.16.1.41 -m user -a 'name=zhangsan state=absent remove=yes'
    state=absent:删除指定用户信息
    remove=删除用户信息,并移除家目录

    删除用户家目录 == userdel -r

    ansible 172.16.1.41 -m user -a "name=oldboy state=absent remove=yes == userdel -r"
    复制代码

     11)系统应用 mount

    作用:可以用于批量挂载和卸载操作
    用法:
        ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data01 path=/mnt fstype=nfs state=mounted"
        ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data01 path=/mnt fstype=nfs state=unmounted"
    复制代码
    挂载操作:
        present:  进行挂载操作参数, 只是实现永久挂载(在/etc/fstab文件添加了挂载配置信息)
        mounted:  进行挂载操作参数, 既可以实现永久挂载, 有可以实现临时挂载
    卸载操作:
        absent    卸载操作参数 临时卸载 永久卸载
        unmounted 卸载操作参数 临时卸载
    复制代码

     12)压缩解压模块:

    复制代码
    unarchive
        参数:
            src
            dest
            owner/group
            mode
            ctrates
            copy:yes/no
            list_files:yes/no
    archive
    复制代码

     13) lineinfile

    复制代码
    ansible 172.16.1.31 -m lineinfile -a "dest=/oldboy/oldboy.txt regexp='aaa(.*)' line='bbbb'"       替换某一行
    ansible 172.16.1.31 -m lineinfile -a "dest=/oldboy/oldboy.txt insertbefore='aaa(.*)' 'line='bbbb'" 在一行前插入信息 
    
    参数:
    insertafter='ccc(.*)' 在一行后插入信息 regexp='ggg(.*)' state=absent 删除某一行 dest=/oldboy/oldboy.txt line='bbbbbbbbbb'
    复制代码

    在进行判断匹配时,如何取出内置变量指定子集信息

    复制代码
    描述人特点: 身高 体重 性别 学历: 金融学历_企业管理 财务学历_注册会计师 工作
    方式一: 利用点进行分割取出子集信息
    [root@m01 ansible_playbook]# cat test02.yml 
    - hosts: 172.16.1.41
      tasks:
        - name: show host_eth0 info
          debug: msg={{ ansible_eth0.ipv4.address }}
          
    方式二: 利用中括号分割取出子集信息
    [root@m01 ansible_playbook]# cat test02.yml 
    - hosts: 172.16.1.41
      tasks:
        - name: show host_eth0 info
          debug: msg={{ ansible_eth0["ipv4"]["address"] }}
          
    [root@m01 ansible_playbook]# cat test02.yml 
    - hosts: all
      tasks:
        - name: copy file
          copy: src=/etc/hosts dest=/tmp/
          when: ansible_eth0.ipv4.address == "10.0.0.41"
    复制代码

     剧本扩展编写方法

     1).剧本设置变量方法  

    复制代码
    方法一: 在剧本中编写变量                  其次优先
    - hosts: 172.16.1.41
     vars:
       bak_dir: /backup
     tasks:
       - name: 01.创建备份数据目录
         file: path={{ bak_dir }}  state=directory
       - name: 02.将数据进行备份保存
         copy: src=/etc/hosts dest={{ bak_dir }}
    
    方法二: 在主机清单中编写变量              最不优先
    [rsync_server] 
    172.16.1.41  bak_dir=/backup01    --- 只针对某一个主机设置变量信息
    
    [rsync_server]                    --- 对主机组中所有主机设置变量
    172.16.1.41
    [rsync_server:vars]
    bak_dir=/backup02
    
    方法三: 在剧本执行命令中添加变量参数信息   最优先
    -e EXTRA_VARS, --extra-vars=EXTRA_VARS    --- 设置剧本变量信息
    ansible-playbook -e bak_dir=/backup04  test_变量功能.yaml
    复制代码

     2) 剧本判断功能功能设置

      setup --- 收集受控段主机信息

    复制代码
        ansible_all_ipv4_addresses:                仅显示ipv4的信息。
           ansible_devices:                        仅显示磁盘设备信息。
           ansible_distribution:                    显示是什么系统,例:centos,suse等。
           ansible_distribution_major_version:        显示是系统主版本。
           ansible_distribution_version:            仅显示系统版本。
           ansible_machine:                        显示系统类型,例:32位,还是64位。
           ansible_eth0:                            仅显示eth0的信息。
           ansible_hostname:                        仅显示主机名。
           ansible_kernel:                            仅显示内核版本。
           ansible_lvm:                            显示lvm相关信息。
           ansible_memtotal_mb:                    显示系统总内存。
           ansible_memfree_mb:                        显示可用系统内存。
           ansible_memory_mb:                        详细显示内存情况。
           ansible_swaptotal_mb:                    显示总的swap内存。
           ansible_swapfree_mb:                    显示swap内存的可用内存。
           ansible_mounts:                            显示系统磁盘挂载情况。
           ansible_processor:                        显示cpu个数(具体显示每个cpu的型号)。
           ansible_processor_vcpus:                显示cpu个数(只显示总的个数)。
    复制代码
    复制代码
    总结判断用法:
           方法一:单个条件进行判断
           when: ansible_eth1.ipv4.address == "172.16.1.31"
           
           方法二:多个条件进行判断
           when: (ansible_eth1.ipv4.address == "172.16.1.31") and (ansible__distribution == "CentOS")
           when: (ansible_eth1.ipv4.address == "172.16.1.31") or  (ansible__distribution == "CentOS")
           
           方法三: 对条件取反操作
           when: ansible_eth1.ipv4.address != "172.16.1.31"
           
           - hosts: rsync_client
             tasks:
               - name: 判断是否是172.16.1.31
                 file:
                   path: /oldboy
                   state: directory
                 when: ansible_eth1.ipv4.address == "172.16.1.31"
               - name: 判断是否是172.16.1.7
                 file:
                   path: /oldgirl
                   state: directory
                 when: ansible_eth1.ipv4.address == "172.16.1.7"
    
            - hosts: new_server
              tasks:
                - name: install software
                  yum:
                    name: nfs-utils
                    state: installed
                  when: ansible_distribution == "CentOS"
                - name: install software - debian
                  apt:
                    name: nfs
                    state: installed
                  when: ansible_distribution  == "Debian"
    复制代码

     3)剧本循环功能设置

    复制代码
    循环方式一:
    - hosts: 172.16.1.41 tasks: - name: 创建多个用户 user: name={{ item }} loop: - oldboy - oldgirl - olddog 循环方式二: - hosts: 172.16.1.41 tasks: - name: 创建多个用户 user: name={{ item.username }} uid={{ item.useruid }} shell={{ item.usershell }} with_items: - {username: 'oldboy01', useruid: '2000', usershell: '/sbin/nologin'} - {username: 'oldboy02', useruid: '3000', usershell: '/bin/bash'} - {username: 'oldboy03', useruid: '4000', usershell: '/sbin/nologin'}   - name: 04:启动服务程序 service: name={{ item }} state=started loop: - rpcbind.socket - nfs rsync 临时启动 永久启动 nfs-utils 临时启动 永久启动 telnet-server 临时启动 不要永久启动 service: name={{ item.name }} state={{ item.state }} enabled={{ item.enable }} with_items: - {name: 'rsync', state: 'started', enable: 'yes'} - {name: 'nfs', state: 'started', enable: 'yes'} - {name: 'telnet.socket', state: 'started', enable: 'no'}
    复制代码

    4)剧本忽略错误功能 ignore_errors  调试剧本|shell

    复制代码
    shell 不具有环境操作判断功能  创建用户 user --- 判断用户是否存在 
    - hosts: 172.16.1.41
     tasks:
       - name: install software
         shell: yum install -y rsync
       - name: create user
         shell: useradd rsync -s /sbin/nologin -M
         ignore_errors: yes
       - name: create backup dir
         shell: mkdir -p /backup && chown rsync.rsync /backup
        
    复制代码

     5)剧本标记功能 调试剧本

    复制代码
    - name: 04:启动服务程序
     service: name={{ item }} state=started
     loop:
       - rpcbind.socket
       - nfs
     tags: oldboy
    
    只让标记任务执行:ansible-playbook -t oldboy auto_nfs.yaml 
    跳过标记任务执行:ansible-playbook --skip-tags oldboy auto_nfs.yaml
    复制代码

     6)剧本执行输出功能

    复制代码
    - hosts: 172.16.1.41
     tasks:
       - name: boot server
         service: name=rsyncd state=started enabled=yes
       - name: check server state
         shell: netstat -lntup|grep rsync
         register: status
       - name: output info
         debug: msg={{ status.stdout_lines }}
    复制代码

     7)剧本执行提升效率

    复制代码
    综合架构一键化部署: 
    1)软件安装
      搭建本地yum仓库  
    2)Gathering Facts(收集受控端主机信息)
      关闭收集功能操作
      - hosts: 172.16.1.31
        gather_facts: no
        tasks:
      PS: 一定是剧本中没有配置判断功能时, 可以关闭信息收集功能

    总结:剧本执行慢的原因
    01. SSH远程连接优化没有配置,关闭认证功能 关闭DNS反向解析功能
    02. yum下载软件慢 使用本地yum仓库
    03. 剧本收集信息慢
    04. 剧本执行过程必须完整 (不要经常CTRL+C)
    复制代码

     8)剧本执行触发功能 notify | handlers

    复制代码
    PS: 触发器任务会在所有任务执行完毕之后才执行
    - hosts: 172.16.1.31 tasks: - name: config file info copy: src=/etc/ansible/ansible_playbook/exports dest=/etc/ notify: - nfs_server - nfs_check - nfs_output - name: create dir file: path=/data state=directory owner=nfsnobody group=nfsnobody - name: boot server service: name={{ item }} state=started loop: - rpcbind.socket - nfs - name: check server shell: showmount -e 172.16.1.31 register: mount_info - name: output info debug: msg={{ mount_info.stdout_lines }} handlers: - name: nfs_server service: name=nfs state=reloaded - name: nfs_check shell: showmount -e 172.16.1.31 register: mount_info - name: nfs_output debug: msg={{ mount_info.stdout_lines }}
  • 相关阅读:
    纯数学教程 Page 325 例LXVIII (12)
    纯数学教程 Page 325 例LXVIII (11) Math.Trip.1927,1928
    纯数学教程 Page 325 例LXVIII (11) Math.Trip.1927,1928
    纯数学教程 Page 325 例LXVIII (9)
    纯数学教程 Page 325 例LXVIII (14) $\frac{1}{1^2}+\frac{1}{3^2}+\frac{1}{5^2}+\cdots=\frac{3}{4}(\frac{1}{1^2}+\frac{1}{2^2}+\frac{1}{3^2}+\cdots)$
    纯数学教程 Page 325 例LXVIII (14) $\frac{1}{1^2}+\frac{1}{3^2}+\frac{1}{5^2}+\cdots=\frac{3}{4}(\frac{1}{1^2}+\frac{1}{2^2}+\frac{1}{3^2}+\cdots)$
    纯数学教程 Page 325 例LXVIII (13)
    纯数学教程 Page 325 例LXVIII (12)
    纯数学教程 Page 325 例LXVIII (9)
    纯数学教程 Page 325 例LXVIII (13)
  • 原文地址:https://www.cnblogs.com/zhanghongqi/p/11765064.html
Copyright © 2011-2022 走看看