zoukankan      html  css  js  c++  java
  • Ansible 利用playbook批量部署Nginx

    我这里直接部署的,环境已经搭建好,如果不知道的小伙伴可以看上一遍ansible搭建,都写好了,这里是根据前面环境部署的

    192.168.30.21     ansible

    192.168.30.25     client1

    192.168.30.26     client2

    1. 创建目录结构

    [root@ansible ~]# mkdir -pv /etc/ansible/roles/nginx/{files,handlers,tasks,templates,vars}

    mkdir: 已创建目录 "/etc/ansible/roles/nginx"

    mkdir: 已创建目录 "/etc/ansible/roles/nginx/files"

    mkdir: 已创建目录 "/etc/ansible/roles/nginx/handlers"

    mkdir: 已创建目录 "/etc/ansible/roles/nginx/tasks"

    mkdir: 已创建目录 "/etc/ansible/roles/nginx/templates"

    mkdir: 已创建目录 "/etc/ansible/roles/nginx/vars"

    2,Nginx的压缩包放到 /etc/ansible/roles/nginx/files/文件下

    [root@ansible files]# ls -l /etc/ansible/roles/nginx/files/nginx-1.16.0.tar.gz

    -rw-r--r--. 1 root root 1032345 5月  16 16:57 /etc/ansible/roles/nginx/files/nginx-1.16.0.tar.gz

    3.定义一个主调用文件

    [root@ansible ansible]# vim /etc/ansible/nginx.yaml

    - hosts: cloud

      gather_facts: True

      remote_user: root

      roles:

      - nginx

    4.handlers:此目录至少应该包含一个名为main.yml文件,用来定义handers

    其他的文件需要由main.yml进行“包含”调用

    [root@ansible files]# vim /etc/ansible/roles/nginx/handlers/main.yaml

    - name: start nginx

      raw: /usr/local/nginx/sbin/nginx

    5.tasks:目录至少应该有一个名为main.yml的文件,用来定义各task,其他的需要main.yml进行“包含”调用(这里我把配置文件中的用户默认登录为nginx)

    [root@ansible files]# vim /etc/ansible/roles/nginx/tasks/main.yaml

    - name: yum install

      yum: name={{ item }} state=latest

      with_items:

        - openssl-devel

        - pcre-devel

        - zlib-devel

        - gcc

        - gcc-c++

        - make

    - name: user nginx

      shell: useradd -M -s /sbin/nologin nginx

    - name: package

      copy: src=nginx-1.16.0.tar.gz dest=/usr/src

    - name: install nginx

      shell: cd /usr/src ;tar xf nginx-1.16.0.tar.gz -C /usr/src; cd /usr/src/nginx-1.16.0; ./configure --prefi

    x=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stu

    b_status_module --with-http_gzip_static_module --with-pcre && make && make install

    - name: copy conf file

      template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf

      notify:

        - start nginx

     

    6.templates: 存储由template 模块调用的模块文本,(这里我添加一个基于识别CPU的模块)会在客户端配置文件中显示)(建议修改或者添加自己的CPU数量

    这样我们的自动化更智能)

    [root@ansible files]# vim /etc/ansible/roles/nginx/templates/nginx.conf

    user nginx;

    worker_proccesses {{ ansible_processor_vcpus }};

    {% if ansible_processor_vcpus == 1%}

    worker_cpu_affinity 10;

    {% elif ansible_processor_vcpus == 2%}

    worker_cpu_affinity 01 10;

    {% elif ansible_processor_vcpus == 4%}

    worker_cpu_affinity 0001 0010 0100 1000;

    {% elif ansible_processor_vcpus == 8%}

    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 0

    0100000 01000000 10000000;{% else %}

    worker_cpu_affinity 0001 0010 0100 1000;

    {% endif %}

     

    error_log logs/error.log;

    pid logs/nginx.pid;

     

    events {

            use epoll;

            worker_connections 65535;

    }

     

    http {

        include       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  logs/access.log  main;

     

        sendfile        on;

     

     

        keepalive_timeout  65;

        gzip on;

     

        server {

            listen       {{ nginxport }};

            server_name  {{ server_name }};

     

     

            location / {

                root   html;

                index  index.html index.htm;

            }

     

            error_page   500 502 503 504 /50x.html;

            location = /50x.html {

                    root html;

            }

            }

    }

     

     

    7.vars :此目录至少应该有一个名为main.yml的文件,用于定义各variable,其他的文件

    需要由main.yml 进行“包含”调用;

    [root@ansible files]# vim /etc/ansible/roles/nginx/vars/main.yaml

    nginxport: "80"

    server_name: "www.ansible.com"

    8.meta :此目录中至少应该有一个名为main.yml 的文件,定义当前角色的特殊设定及依赖关系,其他的文件需要由main.yml进行“包含”调用

    Default :此目录中至少应该有一个名为main.yml的文件,用于设定默认变量

    9测试部署

    [root@ansible templates]# ansible-playbook  /etc/ansible/nginx.yaml

    [root@client1 ~]# netstat -anpt |grep 80

    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9483/nginx: master

    [root@client2 ~]# netstat -anpt |grep 80

    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9483/nginx: master

    查完之后CPU会自动调试,执行完毕可以去客户端测试查看配置文件cpu和用户

  • 相关阅读:
    [Scoi2010]游戏
    HDU3415(单调队列)
    POJ1221(整数划分)
    POJ1050(dp)
    POJ2479(dp)
    HDU1864(背包)
    HDU1175(dfs)
    STL_string.vector中find到的iterator的序号
    Qt532.数值转为16进制(并填充)
    异常处理.VC++
  • 原文地址:https://www.cnblogs.com/zc1741845455/p/10881159.html
Copyright © 2011-2022 走看看