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

  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服务)