美文网首页
Ansible-playbook-角色

Ansible-playbook-角色

作者: ALuckyLive | 来源:发表于2017-09-25 20:46 被阅读0次
    Ansible-playbok的核心元素之一;角色
    角色(roles):
         角色集合:
                 roles/
                    mysql/
                    httpd/
                    nginx/
                    memcached/
    每个角色,以特定的层级目路结构进行组织;
    如; mysql/
        -  files/: 存放由copy或script模块等调用的文件;
        - Templates/:template模块查找所需要模板文件的目录;
        - Tasks/:至少应该包含一个名为mail.yml的文件;其他的文件需要在此文件中通过include进行包含;
        - Handlers/:   至少应该包含一个名为mail.yml的文件;其他的文件需要在此文件中通过include进行包含;
        - Vars/:至少应该包含一个名为mail.yml的文件;其他的文件需要在此文件中通过include进行包含;
        - Meta/:至少应该包含一个名为mail.yml的文件;定义当前角色的特殊定义及依赖关系;其他的文件需要在此文件中通过include进行包含;
        - Default/:设定默认变量时使用此目录中的main.yml文件;
    
        在playbook中的调用方法1;
        - Hosts: webserver
        Remote_user:root
        Roles:
         - mysql
         - memcached
         - nginx
    举例;
    创建目录;如;
        - mkdir nginx/{tasks,files,vars,templates}
    [root@localhost ~]#mkdir nginx/{tasks,files,vars,templates} -pv
    mkdir: created directory ‘nginx’
    mkdir: created directory ‘nginx/tasks’
    mkdir: created directory ‘nginx/files’
    mkdir: created directory ‘nginx/vars’
    mkdir: created directory ‘nginx/templates’
                    
    在/etc/ansible/ansible.cfg文件中定义---模板,角色路径放置位置;
    #roles_path    = /etc/ansible/roles                         
    
    创建目录,mkdir -pv /etc/ansible/roles/nginx/{files,templates,tasks,vars,handlers,meta,default}
    
    [root@localhost playbooks]#mkdir -pv /etc/ansible/roles/nginx/{files,tasks,handlers,templates,default,meta}
    mkdir: created directory ‘/etc/ansible/roles/nginx/files’
    mkdir: created directory ‘/etc/ansible/roles/nginx/tasks’
    mkdir: created directory ‘/etc/ansible/roles/nginx/handlers’
    mkdir: created directory ‘/etc/ansible/roles/nginx/templates’
    mkdir: created directory ‘/etc/ansible/roles/nginx/default’
    mkdir: created directory ‘/etc/ansible/roles/nginx/meta’
    
    创建任务;
    #Cd /etc/ansible/roles/nginx/tasks/
    Vim main.yml
    -name: install nginx
      yum: name=nginx state=latest
     when: ansible_os_family== "ReHat"
      
    创建playbook调用的配置文件;
    #cd
    #vim nginx.yaml
    -hosts: webserver
      remote_user:root
      roles:
      - nginx
    
    
    
    [root@localhost ~]#ansible-playbook --syntax-check nginx.yml 
    
    playbook: nginx.yml
    [root@localhost ~]#ansible-playbook -C  nginx.yml               
    
    PLAY [webserver] ***************************************************************
    
    TASK [setup] *******************************************************************
    ok: [172.16.88.1]
    ok: [172.16.88.2]
    
    TASK [nginx : install nginx] ***************************************************
    skipping: [172.16.88.1]
    skipping: [172.16.88.2]
    
    PLAY RECAP *********************************************************************
    172.16.88.1                : ok=1    changed=0    unreachable=0    failed=0   
    172.16.88.2                : ok=1    changed=0    unreachable=0    failed=0   
    
    ansible上编辑nginx配置文件模板;
    Cd  /etc/ansible/roles/nginx/templates/
    Vim vhost1.yml
    Service{
                listen 80:
                server_name {{ ansible_fqdn }};
                location / {
                       root "/www/ngxdata/vhost1";
               }
    }
    Cp /etc/ansible/roles/nginx/templates/
    Vim vhost1.yml{,.j2}
    
    添加任务---编辑vim roles/nginx/tasks/main.yml
    Vim main.yml
    -name: install nginx
      yum: name=nginx state=latest
     when: ansible_os_family== "ReHat"
    -name: install conf
     template: src=vhost1.j2 dest=/etc/nginx/conf.d/vhost1.conf
    
    Tags: conf
    Notify: restart nginx---------------配置完文件以后创建站点家目录
    -name: install site home directory
     file: path={{ ngxroot }} state=directory
    -name: install index page
    Copy: src=index.html dest={{ ngxroot }}/
    
    -name: start nginx
     service: name=nginx state=started 
    
        Ø handlers--定义handlers -条件设定;
    Cd roles/nginx/handlers
    Vim main.yml
    -name: restart nginx
     service: name=nginx state=restarted
    
        Ø 定义变量vars;
    Cd roles/nginx/vars
    Vim  main.yml
    ngxroot: /ngxdata/vhost1----变量需要字典来定义,不需要加-横线;
    
    
        Ø 定义网页文件files;
    Cd roles/nginx/files/index.html
    <h1> vhost1</h1>
    
    
    将监听端口设定改为8080:---自己创建的网页文件路径与默认网页文件路径所指定的端口冲突,默认监听端口为80,所以需要更改监听端口,否则无法访问到页面;
    
    重新启动服务;
    Ansible-playbook -t tage nginx.yml
    
    
    
    
    [root@localhost ~]#ansible-playbook   nginx.yml 
    
    PLAY [webserver] ***************************************************************
    
    TASK [setup] *******************************************************************
    ok: [172.16.88.2]
    ok: [172.16.88.1]
    
    TASK [nginx : install nginx] ***************************************************
    ok: [172.16.88.2]
    ok: [172.16.88.1]
    
    TASK [nginx : install conf vhost1.conf.j2] *************************************
    ok: [172.16.88.1]
    ok: [172.16.88.2]
    
    TASK [nginx : install site  home  directory] ***********************************
    changed: [172.16.88.1]
    changed: [172.16.88.2]
    
    TASK [nginx : install  index.html page] ****************************************
    changed: [172.16.88.2]
    changed: [172.16.88.1]
    
    TASK [nginx : start nginx] *****************************************************
    ok: [172.16.88.2]
    ok: [172.16.88.1]
    
    PLAY RECAP *********************************************************************
    172.16.88.1                : ok=6    changed=2    unreachable=0    failed=0   
    172.16.88.2                : ok=6    changed=2    unreachable=0    failed=0   
    
    
    ansible的配置文件;
    Ansible.cfg文件;
    【defaults】
    默认选项;
        - Forks =5 ----默认管控的主机数量;
        - Remote_port =22----ssh连接设定的端口,为了安全可以更默认端口;
        
    Roles_path=/etc/ansible/roles----角色的存放路径;
    Module_name=command 默认指定的模块
    Executable= /bin/sh  执行command时默认使用的shell解释执行;
    Connection_plugins=/usr/share/ansible/plugins/connection----将使用的插件存放到此目录下,如果没有此文件创建生成,将使用的插件模块存放到此目录下;
    
    【privilege escalation】---用户升级
    #become=true --- 启用become升级
    #become_method=sudo ----shdo 方式
    #become_user=root  ------------提升为root用户
    #become_ask_pass=false----需要提供密码与否
    
    【paramiko_connection】
    Python 指定库连接个目标主机的选项;
    【ssh_coniction】
    ssh连接时的专用选项;
    【persistent_connection】
    持久连接;
    【accelerate】
    加速选项
    【selinux】
    【colors】
     显示结果,定义颜色
    
        Ø 当配置完成ansible后,可以设定任务计划,每隔多少时间执行一次,如果远程主机配置文件文件被改动可以还原,并保持正常运行;
        Ø 如果客户端主机(ˇˍˇ) 想检测自己的配置文件是否跟ansible主机上的配置文件是否一致,需安装第三方组件,ansible_vsc,使用ansible-pull 命令;
        当需要使用此模型时,应该更换使用saltstack (使用python编写,兼容性好)或pupet(应用广泛)
        比ansible简单易用;
        
        实验;
        主备模式高可用keeplived+nginx(proxy)
        两台主机:httpd+php
        一台主机:mysql-server或mariadb_server
        
        实验;
        nginx反代 tomcat 使用ansible
        
        准备四台主机;
        - node1:nginx
        - Node2: tamcat  
        - Node3: tamcat
        - Node4: ansible
              
        Node4;
        1、安装ansible
        2、定义主机;
        - [lb]-----负载均衡器
        Node1.mageedu.com
        - [tcsrvs]
        Node[2:3].mageedu.com
        3、生成秘钥传送到远程主机,实现无密码传递。
        Ssh-keygen -t rsa -P ' '  ----生成蜜钥
        Ssh-copy-id -I ~/.ssh/id_rsa.pub root@node{1,2,3}--传送到远程主机;
        4、使用ansible,查看使用主机是否存在;
        Ansible all --list-host
        5、创建角色目录;
        Mkdir -pv roles/{nginx,tomcat}/{files,templates,tasks,vars,handlers,meta,default,}
        
        Cd roles/nginx/tasks
        Vim main.yml
        -name: install nginx
         yum: name=nginx state=latest
        When: ansible_os_family == "RadHat"
         -name: install conf
          copy:src=lb.conf dest=/etc/nginx/conf.d/
          tags: conf
        Notify: restart ngnix
        -name: start ngnix
         service: name=nginx state=started enabled=yes
        
        #cd roles/nginx/handlers/
        Vim  main.yml
        -name:restart nginx
         service: name=nginx state=restarted
        
        #Cd roles/nginx/files/
        #vim  lb.conf
        Upstream tcsevs {
        Server node2.magedu.com:8080;
        Server node3.magedu.com:8080;
        }
        Server {
            listen 80;
            server_name node4.mageedu.com;
            location / {
                        proxy_pass http://tcsrvs;
            }
        }
        
        
        #Cd 
        #mkdir playbooks
        #cd playbooks
        #vim nt.yml
              -hosts: lb
                remote_user:root
                roles:
               -nginx
    
               #ansible-playbook -C nt.yml
    
    配置tomcat 配置文件;
    #cd roles/tamcat/tasks
    Vim  main.yml
    -name: install package
     yum: name={{ item }} state=latest
     with_items:
        - Tomcat
        - Tomcat -admin-webapps
        - Tomcat-docs-webapp
        - Tomcat-webapps
    When: ansible_os_family == "RadHat"
    -name: start tomcat
     service: name=tomcat state=started enabled=yes
    
    #Cd roles/
    # mkdir jdk/{tasks,templates,vars,meta,handlers,default,files}
    #cd roles/jdk/tasks/
    #vim mian.yml
    -name: install openjdk
     yum: name=java-{{ version }}-openjdk-devel state=latest
    -name: install env file
     copy: src=java.sh dest=/etc/profile.d/
    
    #cd roles/jdk/files
    Vim java,sh
    Export JAVA_HOME=/usr
    
    
    #cd roles/jdk/vars/
    #vim main.yml
     varsion: 1.8.0

    相关文章

      网友评论

          本文标题:Ansible-playbook-角色

          本文链接:https://www.haomeiwen.com/subject/twodextx.html