美文网首页
linux学习-week14--综合架构批量管理服务/网站web

linux学习-week14--综合架构批量管理服务/网站web

作者: 亮仔_c1b5 | 来源:发表于2019-10-20 20:28 被阅读0次
    1. 综合架构知识概述说明
      1. 剧本编写扩展说明
      2. 剧本整合功能说明
        方法一: 编写整合剧本信息
        方法二: 编写剧本角色信息 ???
      3. 网站服务概念原理
      4. 网站服务资源信息
      5. 网站服务度量方法
      6. 网站服务软件程序 nginx
      7. 网站服务软件介绍 nginx
      8. 网站服务软件部署
        方法一: yum安装
        方法二: 编译安装
      9. 网站服务配置参数
    1. 综合架构课程回顾:
      1. 远程服务配置文件说明
      2. 批量管理服务概念说明
      3. 批量管理服务部署过程
        a 掌握主机清单配置方法 5种
        b 掌握批量管理模块使用
        ping command shell script file copy fetch yum service user cron mount
        c 掌握剧本编写过程方法
        3点注意: 缩进(空格) 字典(冒号) 列表(短横线)
        剧本语法检查: ansible-playbook --syntax-check
        剧本执行过程: ansible-playbook 剧本文件
    1. 批量管理服务剧本扩展编写

      1. 剧本变量信息设置方法 OK

      2. 剧本判断功能设置方法 OK

      3. 剧本循环功能设置方法 OK

      4. 剧本标签功能设置方法 OK 便于调试剧本

      5. 剧本忽略错误设置方法 OK

      6. 剧本执行加速设置方法

      7. 剧本信息输出设置方法

      8. 剧本触发功能设置方法

      9. 剧本变量信息设置方法
        方法一: 在剧本中设置变量 其次加载

        • hosts: 172.16.1.31
          vars:
          dir_info: /oldboy
          tasks:
          • name: create file
            file: path={{ dir_info }}/nfs.conf state=touch
          • name: backup file
            copy: src={{ dir_info }}/rsync.conf dest=/backup/rsync.conf.bak remote_src=yes

        方法二: 在主机清单中设置变量 最后加载
        单独给某一个主机设置变量
        172.16.1.31 dir_info=/oldboy
        批量给多个主机设置变量
        [oldboy]
        172.16.1.31
        172.16.1.32
        172.16.1.33
        [oldboy:vars]
        dir_info=/oldboy

        方法三: 在剧本执行命令参数中设置变量 优先加载
        ansible-playbook -e dir_info=/oldboy test_变量功能.yaml

      10. 剧本判断功能设置方法
        setup模块: 收集远程主机信息

        • hosts: all
          tasks:
          • name: create dir with backup
            file: name=/etc/backup/ state=directory
            when: ansible_eth1.ipv4.address == "172.16.1.41"
          • name: create dir with data
            file: name=/etc/data/ state=directory
            when: ansible_eth1.ipv4.address == "172.16.1.31"
          • name: create dir with database
            file: name=/etc/database state=directory
            when: ansible_distribution == "CentOS" and ansible_eth1.ipv4.address == "172.16.1.51"
          • name: create dir with zabbix
            file: name=/etc/zabbix state=directory
            when: ansible_distribution == "Debian" or ansible_eth1.ipv4.address == "172.16.1.31"

        常见判断条件的信息:
        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个数(只显示总的个数)。

      11. 剧本循环功能设置方法
        剧本循环参数: with_items loop

        简单循环书写方式:

        • hosts: 172.16.1.31
          tasks:
          • name: add user for oldboy01
            user: name={{ item }}
            loop:
            • oldboy01
            • oldboy02
            • oldboy03

        负载循环书写方式:

        • hosts: 172.16.1.31
          tasks:
          • name: add user for oldboy01
            user: name={{ item.name }} uid={{ item.uid }} shell={{ item.shell }}
            loop:
            • { name: 'oldboy01', uid: '5001', shell: '/sbin/nologin' }
            • { name: 'oldboy02', uid: '5002', shell: '/sbin/bash' }
            • { name: 'oldboy03', uid: '5003', shell: '/bin/bash' }

        https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html

      12. 剧本标签功能设置方法
        设置标记任务:

      • name: 06:boot rsync server
        service: name=rsyncd state=started enabled=yes
        tags: tag06

        执行标记的任务:
        ansible-playbook -i /etc/ansible/hosts.bak01 -t tag06 rsync_auto.yaml
        跳过标记的任务
        ansible-playbook -i /etc/ansible/hosts.bak01 --skip-tag tag06 rsync_auto.yaml

      1. 剧本忽略错误设置方法

        • hosts: 172.16.1.31
          tasks:
          • name: install software
            shell: yum install -y htop
          • name: create user
            shell: useradd oldboy01
            ignore_errors: yes
          • name: create /data
            shell: mkdir /data
            提示: 由于ansible剧本执行具有串行执行特定, 可以将预期中错误进行忽略, 继续执行后续任务信息
      2. 剧本执行加速设置方法

        • hosts: 172.16.1.41
          gathering_facts: no
          tasks:
          • name: umount /mnt
            mount: path=/mnt state=unmounted
            说明: 取消管理端主机收集被管理主机信息功能, 表示剧本中判断功能失效
      3. 剧本信息输出设置方法
        [root@oldboy-m01 /etc/ansible/playbook]# vim test_输出功能.yaml

        • hosts: 172.16.1.41
          tasks:
          • name: mount nfs dir
            mount: src=172.16.1.31:/data fstype=nfs path=/mnt state=mounted
          • name: check
            shell: df -h|grep mnt
            register: oldboy
          • name: display mount info
            debug: msg={{ oldboy.stdout_lines }}
      4. 剧本信息触发功能说明

        • hosts: 172.16.1.31
          tasks:

          • name: push file
            copy: src=/etc/ansible/file/exports dest=/etc/
            notify: oldboy

          handlers:

          • name: oldboy
            service: name=nfs state=restarted
            说明: 定义一个任务, 只有执行时,才会执行触发器中的任务
            定义一个任务, 没有执行时,不会执行触发器中的任务
    image.png
    利用剧本扩展功能编写剧本:
    编写NFS服务一键化部署剧本:
    第一个历程: nfs部署流程:
    服务端:
    01. 安装软件程序  rpcbind nfs-utils
    02. 编写配置文件
    03. 创建存储目录  目录需要进行授权
    04. 启动程序服务  rpcbind nfs 
    
    客户端:
    01. 安装软件程序 
    02. 远程挂载操作
    03. 检查确认挂载
    
    第二个历程: 编写剧本文件
    - hosts: all
      tasks:
        - name: 01.install software
          yum: name={{ item }} state=installed
          loop:
            - rpcbind
            - nfs-utils
        - name: 02.push conf file
          copy: src=/etc/ansible/conf/exports dest=/etc
          notify: 
            - restart_server
            - restart_mount
        - name: 03:mkdir dir
          file: path=/data state=directory owner=nfsnobody group=nfsnobody
          when: ansible_eth1.ipv4.address == "172.16.1.31"
        - name: 04:boot server
          service: name={{ item }} state=started enabled=yes
          loop:
            - rpcbind.socket
            - nfs
          when: ansible_eth1.ipv4.address == "172.16.1.31"
        - name: 05:mount dir
          mount: src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted
          when: ansible_eth1.ipv4.address == "172.16.1.41" 
        - name: 06:check mount
          shell: df -h|grep mnt
          register: oldboy
          when: ansible_eth1.ipv4.address == "172.16.1.41" 
        - name: display mount info
          debug: msg={{ oldboy.stdout_lines }}   
          when: ansible_eth1.ipv4.address == "172.16.1.41"      
      handlers:
        - name: restart_server
          service: name=nfs state=reloaded
          when: ansible_eth1.ipv4.address == "172.16.1.31"
        - name: restart_mount
          mount: path={{ item.path }} state={{ item.state }}
          loop:
            - { path: '/mnt', state: 'unmounted' }
            - { path: '/mnt', state: 'mounted' }
          when: ansible_eth1.ipv4.address == "172.16.1.41"
    
    1. 剧本整合功能说明

      1. 利用整合参数将多个剧本整合
        方法一: include 将多个剧本进行整合
      • include: rsync_auto.yaml
      • include: nfs_auto.yaml

      方法二: import_playbook 将多个剧本进行整合

      • import_playbook: rsync_auto.yaml
      • import_playbook: nfs_auto.yaml
      1. 利用角色功能叫剧本整合 (规范)
        第一个历程: 在 role角色目录中创建角色信息
        mkdir rsync_server
        mkdir rsync_client
        mkdir nfs

      第二个历程: 在不同角色目录中创建子目录
      mkdir {nfs,rsync_server,rsync_client}/{vars,tasks,templates,handlers,files}

      vars: 定义变量信息文件
      tasks: 定义详细任务信息
      templates: 定义模板文件信息 --> 调用var/main.yaml 变量(分发文件 需要使用template模块)
      handlers: 定义触发器信息
      files: 定义需要分发文件

      vars目录: 编写文件信息
      方法一: 将所有任务信息汇总到一个main文件中
      vim tasks/main.yaml

      • name: 01: install
        yum: xxx
      • name: 02: copy
        copy:

      方法二: 编写多个不同任务文件, 将多个任务文件整合到main文件中
      vim tasks/main.yaml

      • include_tasks: yum.ymal
      • include_tasks: copy.yaml

      files: 保存服务程序分发文件信息

      ll files/

      total 4
      -rw-r--r-- 1 root root 30 Oct 20 16:31 exports

      handlers: 保存触发器配置信息

      cat handlers/main.yaml

      • name: restart_server
        service: name=nfs state=reloaded
        when: ansible_eth1.ipv4.address == "172.16.1.31"
      • name: restart_mount
        mount: path={{ item.path }} state={{ item.state }}
        loop:
        • { path: '/mnt', state: 'unmounted' }
        • { path: '/mnt', state: 'mounted' }
          when: ansible_eth1.ipv4.address == "172.16.1.41"
    目录结构信息:
    [root@oldboy-m01 /etc/ansible/roles]# tree
    

    .
    ├── hosts
    ├── nfs
    │?? ├── files
    │?? │?? └── exports
    │?? ├── handlers
    │?? │?? └── main.yaml
    │?? ├── tasks
    │?? │?? ├── copy.yaml
    │?? │?? ├── main.yaml
    │?? │?? └── yum.yaml
    │?? ├── templates
    │?? └── vars
    ├── rsync_client
    │?? ├── files
    │?? ├── handlers
    │?? ├── tasks
    │?? ├── templates
    │?? └── vars
    ├── rsync_server
    │?? ├── files
    │?? │?? └── rsyncd.conf
    │?? ├── handlers
    │?? ├── tasks
    │?? │?? └── main.yaml
    │?? ├── templates
    │?? └── vars
    │?? └── main.yaml
    └── site.yaml

    角色信息汇总文件
    # cat site.yaml 
    - hosts: rsync_server
      roles:
        - rsync_server
    - hosts: all
      roles:
        - nfs
    
    image.png
    1. 网站服务访问原理过程
      1. 用户输入域名地址信息
      2. 会完成域名解析过程 www.baidu.com --> 39.xx.xx.xx
      3. 建立三次握手
      4. 发送请求信息 HTTP协议请求
      5. 回复响应信息 HTTP协议响应
      6. 所有回复信息会利用浏览器进行解析
      7. 断开四次挥手
    image.png
    image.png
    HTTP协议包含信息: 超文本传输协议
    HTTP请求报文:
    请求行: 请求方法  请求数据  协议版本
    eg: 请求行信息
    GET / HTTP/1.1
    
    * 请求方法:
      get:  获得网站数据信息(页面代码 图片信息 视频 音频)  用户获得网站资源
      post: 提交网站数据信息(登录 注册 发送图片)           用户提到网站资源
      
    * 请求数据:
      /             -- 没有指定要的数据信息   网站会自动给你回复一个首页文件信息 index.html
      /img/bd.png   -- 想要网站服务器上面 img/bd.png图片
      
    * 协议版本:
      1.0   TCP连接建立(TCP短链接)
            A用户  ---   B用户  视频聊天
            说了一句话   回复   关闭视频
            建立视频聊天
            说了一句话   回复   关闭视频 
            建立视频
            总结: 一次连接 发送一次请求
            
      1.1   TCP连接建立(TCP长链接)
            A用户  ---   B用户  视频聊天
            第一件事     回复 
            第二件事     回复 
            第三件事     回复 
            断开会话
            总结: 一次连接 发送多个请求 
      2.0 
    
    请求头: 
    > User-Agent: curl/7.29.0    --- 访问者客户端信息    
    > Host: www.baidu.com        --- 请求不同网站页面
      www.baidu.com
      news.baidu.com              
      map.baidu.com       
    > Accept: */*                --- 显示网站特殊功能  压缩 加密
    空行:
    请求主体:
    get  方法没有请求主体
    post 方法拥有请求主体   
    
    HTTP响应报文:
    起始行: 协议信息 状态码信息 状态码描述信息
    eg: 举例
    HTTP/1.1 200 OK
    状态码:  告知访问结果信息
    200:                    访问成功
    301 Moved Permanently:  永久跳转  将域名改写
    302                  :  临时跳转  将域名改写 
    
    响应头: 
    空行:
    响应主体: 网页源代码信息   
    
    image.png

    相关文章

      网友评论

          本文标题:linux学习-week14--综合架构批量管理服务/网站web

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