zoukankan      html  css  js  c++  java
  • 第八章 Ansibleplaybook基础介绍

    一、playbook简介

    PlayBook即"剧本","兵书"之意,PlayBook是由以下部分组成的:
    
    play(host): 定义的是主机的角色。(主角还是配角)
    Book(task): 定义的是具体执行的任务。(角色的台词和动作)
    playbook: 由一个或多个play(角色)组成,一个play(角色)可以包含多个task(台词,动作)。
    
    简单理解为: 对不同的主机使用很多不同的模块做很多工作完成一件事情
    
    在Ansible中"剧本文件"是以yml结尾的文件。
    在SaltStack中"剧本文件"是以sls结尾的文件。
    但是语法,使用的都是yaml语法
    

    二、playbook的组成

    [root@m01 ~]# vim touch.yml
    #指定执行动作的主机组
    - hosts: web_group
    #指定远端操作的用户
      remote_user: root
    #开始定义变量
      vars:
        file_name: lhd
    #指定动作
      tasks:
    #注释:说明这个动作
        - name: 创建文件
    #指定shell模块创建一个文件
          shell: touch /tmp/{{ file_name }}
    
    #执行前检查语法
    [root@m01 ~]# ansible-playbook --syntax-check touch.yml 
    playbook: touch.yml
    #该命令,只能检查语法,无法验证逻辑
    

    三、PlayBook与ad-hoc

    特点 PlayBook ad-hoc
    完整性
    持久性
    执行效率
    变量 支持 不支持
    耦合度
    1.PlayBook功能比ad-hoc更全,是对ad-hoc的一种编排.
    2.PlayBook能很好的控制先后执行顺序, 以及依赖关系.
    3.PlayBook语法展现更加的直观.
    4.playbook可以持久使用,ad-hoc无法持久使用.
    

    四、playbook中yaml语法

    语法 描述
    缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用TAB
    冒号 以冒号结尾的除外,其他所有冒号后面所有必须有空格
    短横线 表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表
    中国:
      北京:
      上海:
        - 日本
        - 浦东新区
        - 青浦区
    

    五、playbook实战-部署httpd

    1.配置主机清单

    [root@m01 ~]# vim /etc/ansible/hosts 
    [web_group]
    web01 ansible_ssh_pass='1'
    web02 ansible_ssh_pass='1'
    web03 ansible_ssh_pass='1'
    
    [root@m01 ~]# vim /etc/hosts
    172.16.1.7 web01
    172.16.1.8 web02
    172.16.1.9 web03
    

    2.测试连接

    [root@m01 ~]# ansible web_group -m ping
    

    3.编写剧本

    [root@m01 ~]# cat httpd.yml 
    - hosts: web_group
      tasks:
        - name: Stop Selinux
          selinux:
            state: disabled
    
        - name: Stop Firewalld
          systemd:
            name: firewalld
            state: stopped
    
        - name: Install Httpd
          yum:
            name: httpd
            state: present
    
        - name: Start Httpd Server
          systemd:
            name: httpd
            state: started
    
        - name: Config Httpd Index
          copy:
            content: test ansible install httpd
            dest: /var/www/html/index.html
    

    六、编写搭建交作业页面剧本

    1.编写剧本

    [root@m01 ~]# cat zuoye.yml 
    - hosts: all
      tasks:
        - name: Add www group
          group:
            name: www
            gid: 666
    
        - name: Add www User
          user:
            name: www
            uid: 666
            group: www
    
    - hosts: web_group
      tasks:
        - name: Install Httpd Server
          yum:
            name: httpd
            state: present
    
        - name: Mkdir Package
          file:
            path: /package
            state: directory
    
        - name: Tar php.tar.gz
          unarchive:
            src: /root/php.tar.gz
            dest: /package/
    
        - name: Install PHP Server
          shell: yum localinstall -y /package/*.rpm
    
        - name: Tar kaoshi.zip
          unarchive:
            src: /root/kaoshi.zip
            dest: /var/www/html
            owner: www
            group: www
    
        - name: Mkdir upload
          file:
            path: /var/www/html/upload
            state: directory
            owner: www
            group: www
    
        - name: Config Httpd Server
          copy:
            src: /root/httpd.conf
            dest: /etc/httpd/conf/
         
        - name: Start Httpd Server
          systemd:
            name: httpd
            state: restarted
            enabled: yes
    
    - hosts: nfs_group
      tasks:
        - name: Install nfs Server
          yum:
            name: nfs-utils
            state: present
    
        - name: Config nfs Server
          copy:
            content: /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
            dest: /etc/exports
    
        - name: Mkdir data
          file:
            path: /data
            state: directory
            owner: www
            group: www
    
        - name: Start nfs Server
          systemd:
            name: nfs
            state: restarted
            enabled: yes
    
    - hosts: web_group
      tasks:
        - name: Mount nfs
          mount:
            src: 172.16.1.31:/data
            path: /var/www/html/upload
            fstype: nfs
            opts: defaults
            state: mounted
    

    2.测试语法

    [root@m01 ~]# ansible-playbook --syntax-check zuoye.yml 
    
    playbook: zuoye.yml
    

    3.运行剧本

    [root@m01 ~]# ansible-playbook zuoye.yml
    

    七、配置rsync备份

    1.创建项目目录

    [root@m01 ~]# mkdir /project/rsync
    

    2.部署准备

    1)配置主机清单

    [root@m01 ~]# vim /etc/ansible/hosts 
    [web_group]
    web01 ansible_ssh_pass='1'
    web02 ansible_ssh_pass='1'
    web03 ansible_ssh_pass='1'
    [nfs_group]
    nfs ansible_ssh_pass='1'
    [backup_server]
    backup ansible_ssh_pass='1'
    

    2)准备rsync配置文件

    [root@m01 ~]# vim /etc/rsyncd.conf
    uid = www
    gid = www
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    ignore errors
    read only = false
    list = false
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    comment = welcome to oldboyedu backup!
    path = /backup
    

    3)上传安装包

    1.上传sersync包
    

    4)准备sersync配置文件

    [root@m01 ~]# vim GNU-Linux-x86/confxml.xml
    	<sersync>
            <localpath watch="/data">
                <remote ip="172.16.1.41" name="backup"/>
                <!--<remote ip="192.168.8.39" name="tongbu"/>-->
                <!--<remote ip="192.168.8.40" name="tongbu"/>-->
            </localpath>
            <rsync>
                <commonParams params="-artuz"/>
                <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>
                <userDefinedPort start="false" port="874"/><!-- port=874 -->
                <timeout start="false" time="100"/><!-- timeout=100 -->
                <ssh start="false"/>
            </rsync>
            
    [root@m01 ~]# cp GNU-Linux-x86/confxml.xml ./
    

    3.编写剧本

    [root@m01 ~]# cat rsync.yml 
    - hosts: backup_server
      tasks:
        - name: Install rsync Server
          yum:
            name: rsync
            state: present
    
        - name: Config rsync Server
          copy:
            src: /etc/rsyncd.conf
            dest: /etc/
    
        - name: Config Password File 
          copy:
            content: rsync_backup:123456
            dest: /etc/rsync.passwd
            mode: 0600
    
        - name: Mkdir backup
          file:
            path: /backup
            state: directory
            owner: www
            group: www
    
        - name: Start Rsyncd Server
          systemd:
            name: rsyncd
            state: restarted
    
    - hosts: nfs_group
      tasks:
        - name: Install rsync Server
          yum:
            name: rsync
            state: present
    
        - name: Install rsync Server
          yum: 
            name: inotify-tools
            state: present
    
        - name: Install sersync
          copy:
            src: /root/sersync
            dest: /usr/local/
            mode: 0755
    
        - name: Config sersync Server
          copy:
            src: /root/confxml.xml
            dest: /usr/local/sersync/
    
        - name: Touch Client Password File
          copy:
            content: 123456
            dest: /etc/rsync.pass
            mode: 0600
    
        - name: Start sersync Server
          shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
          #script: /root/start_sersync.sh
    
  • 相关阅读:
    mongo备份&恢复
    logstash参数配置
    elasticsearch索引自动清理
    Linux将公网ip映射到局域网ip
    普通用户创建ssh无密码访问
    软考介绍
    安装ffmpeg
    Hadoop实战-Flume之自定义Sink(十九)
    Hadoop实战-Flume之自定义Source(十八)
    Hadoop实战-Flume之Sink Load-balancing(十七)
  • 原文地址:https://www.cnblogs.com/jhno1/p/15723195.html
Copyright © 2011-2022 走看看