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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容