• 6.Ansible Roles角色实战


    Roles小技巧:

    1.创建roles目录结构,手动或使用ansible-galaxy init test roles

    2.编写roles的功能,也就是tasks。 nginx rsyncd memcached

    3.最后playbook引用roles编写好的tasks

    1.创建标准roles目录结构
    mkdir /root/roles/nginx/{tasks,templates,handlers}
    
    2.编写tasks
    [root@manager ~]# cat /root/roles/nginx/tasks/main.yml 
    - name: Install Nginx Server
      yum:
        name: nginx
        state: present
    
    - name: Configure Nginx Server
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Restart Nginx Server
    
    - name: Systemd Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes
    
    3.template
    [root@manager roles]# cat /root/roles/nginx/templates/nginx.conf.j2 
    user www;
    worker_processes  {{ ansible_processor_vcpus }};
    
    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  {{ ansible_processor_vcpus * 1024 }};
    }
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    	access_log /var/log/nginx/access.log main;
    
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        #gzip  on;
        include /etc/nginx/conf.d/*.conf;
    }
    
    4.handlers
    [root@manager ~]# cat /root/roles/nginx/handlers/main.yml 
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted
        
        
        
    5.调用playbook
    [root@manager roles]# cat /root/roles/site.yml 
    - hosts: webservers
      roles:
        - nginx
    
    PS:hosts ansible.cfg  提前需准备好
    

    实战一:roles部署memcached

    #安装
    #配置
    #启动
    
    1.创建roles的目录结构
    [root@manager roles]# mkdir memcached/{tasks,templates,handlers} -p
    
    2.编写对应的tasks  (1.安装  2配置(templates)  3.启动  4.重启(handlers) )
    [root@manager roles]# cat memcached/tasks/main.yml 
    - name: Installed Memecached Server
      yum:
        name: memcached
        state: present
    
    - name: Configure Memcached Server
      template:
        src: memcached.j2
        dest: /etc/sysconfig/memcached
      notify: Restart Memcached Server
    
    
    - name: System Memcached Server
      systemd:
        name: memcached
        state: started
        enabled: yes
    
    3.配置jinja2
    [root@manager roles]# cat memcached/templates/memcached.j2 
    PORT="11211"
    USER="memcached"
    MAXCONN="1024"
    CACHESIZE="{{ ansible_memtotal_mb //2 }}"
    OPTIONS=""
    
    4.handlers
    [root@manager roles]# cat memcached/handlers/main.yml 
    - name: Restart Memcached Server
      systemd:
        name: memcached
        state: restarted
    
    
    5.playbook调用roles
    [root@manager roles]# cat site.yml 
    - hosts: webservers
      roles:
        - { role: nginx, tags: web }
        - { role: memcached, tags: cache }
    

    实战二:部署NFS存储服务

    #1.创建项目目录结构   ---> 
    [root@manager roles]# mkdir nfs/{tasks,templates,handlers} -p
    
    #2.编写task任务
    
    #3.playbook调用roles项目
    
    [root@ansible roles]# tree nfs/
    nfs/
    ├── handlers
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    └── templates
        └── exports.j2
    
    1.tasks编写
    [root@ansible nfs]# cat tasks/main.yml 
    - name: Installed NFS Server
      yum:
        name: nfs-utils
        state: present
    
    - name: Configure NFS Server
      template:
        src: exports.j2
        dest: /etc/exports
      notify: Restart NFS Server
    
    - name: Create NFS Server Share Directory
      file: 
        path: "{{ nfs_word }}"
        state: directory
        owner: "{{ nfs_user }}"
        group: "{{ nfs_user }}"
        mode: '0755'
        recurse: yes
    
    - name: Started NFS Server
      systemd:
        name: nfs
        state: started
        enabled: yes
    
    2.触发重启,配置handlers
    [root@ansible nfs]# cat handlers/main.yml 
    - name: Restart NFS Server
      systemd:
        name: nfs
        state: restarted
    
    3.调用roles项目
    [root@ansible roles]# cat site.yml 
    - hosts: nfsservers
      roles:
        - { role: nfs, tags: nfs }
    
    

    实战三:roles部署LB

    1.nginxProxy+keepalived 10.0.0.5 10.0.0.6 10.0.0.3
    2.nginx静态网站 172.16.1.7 172.16.1.8

    1.web编写tasks任务
    [root@manager web]# cat tasks/main.yml 
    #1.安装nginx服务
    - name: Install nginx Server
      yum:
        name: nginx
        state: present
    
    #2.创建用户组
    - name: Create group
      group:
        name: "{{ user }}"
        gid: "{{ uid }}"
    
    #3.创建用户
    - name: create user
      user:
        name: "{{ user }}"
        uid: "{{ uid }}"
        group: "{{ user }}"
        create_home: no
        shell: /sbin/nologin
    
    #4.创建站点目录
    - name: Create code directory
      file:
        path: "{{ code }}"
        owner: "{{ user }}"
        group: "{{ user }}"
        mode: 0755
        recurse: yes
    
    #5.配置nginx
    - name: Configure Nginx Server
      template: 
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
        mode: "{{ item.mode }}"
      with_items:
        - { src: nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
        - { src: index.html, dest: /code, mode: '0644' }
        - { src: web.conf.j2, dest: /etc/nginx/conf.d/web.conf, mode: '0644' }
      notify: Restart nginx Server
    
    #6.启动nginx服务
    - name: Systemd Nginx Server
      systemd:
        name: nginx
        state: started
    
    2.handlers触发重启nginx
    [root@manager web]# cat handlers/main.yml 
    - name: Restart nginx Server
      systemd:
        name: nginx
        state: restarted
    
    3.准备j2文件
    [root@manager roles]# tree web/
    web/
    ├── handlers
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    └── templates
        ├── index.html
        ├── nginx.conf.j2
        └── web.conf.j2
    
    4.LB编写tasks任务
    [root@manager lb]# cat tasks/main.yml 
    - name: Intalled Nginx Server
      yum:
        name: "{{ packages }}"
        state: present
      vars:
        packages:
        - nginx
        - keepalived
    
    - name: Create shell share directory
      file:
        path: "{{ script }}"
        state: directory
      
    - name: Configure nginx server
      template:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
        mode: "{{ item.mode }}"
      with_items:
        - { src: nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
        - { src: keepalived.conf.j2, dest: /etc/keepalived/keepalived.conf, mode: '0644' }
        - { src: check_server.sh, dest: /server/scripts/check_server.sh, mode: '0777' }
        - { src: proxy_web.conf, dest: /etc/nginx/conf.d/proxy_web.conf, mode: '0644' }
        - { src: proxy_params, dest: /etc/nginx/proxy_params, mode: '0644' }
      notify: Restart Nginx Server
    - name: Systemd Nginx server
      systemd:
        name: "{{ item }}"
        state: started
        enabled: yes
      with_items:
        - nginx
        - keepalived
    
    5.handlers触发重启nginx服务
    [root@manager lb]# cat handlers/main.yml 
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted
    
    6.配置keepalived
    [root@manager lb]# cat files/keepalived.conf.j2 
    global_defs {     
        router_id {{ ansible_fqdn }}   
    }
    
    vrrp_instance VI_1 {
    {% if ansible_fqdn == 'lb01' %}
    #lb01的配置如下:
        state MASTER
        priority 150
    {% elif ansible_fqdn == 'lb02' %}
    #lb02的配置如下:
        state BACKUP
        priority 100
    {% endif %}
    
        interface eth0
        virtual_router_id 50
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 1111
    }
        virtual_ipaddress {
            10.0.0.3
        }
    }
    
    7.准备对应的j2文件
    [root@manager roles]# tree lb/
    lb/
    ├── files
    │   └── keepalived.conf.j2
    ├── handlers
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    │   ├── check_server.sh
    │   ├── keepalived.conf.j2
    │   ├── nginx.conf.j2
    │   ├── proxy_params
    │   └── proxy_web.conf
    
    
  • 相关阅读:
    【JVM】程序计数器(四)
    【JVM】运行时数据区概述及线程(三)
    【JVM】类加载子系统(二)
    MyException--org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ###
    计算机常用指令大全
    HTML的设计与应用
    想得太多,又做的太少
    互联网数据库分库分表现状及一点思考
    python中的函数与文件操作
    python中的流程控制语句
  • 原文地址:https://www.cnblogs.com/yinwu/p/11741512.html
Copyright © 2020-2023  润新知