day40综合架构批量管理篇

  • ansible剧本角色功能配置

  • 用户访问网站页面原理过程

  • HTTP协议报文结构

1.ansible剧本角色功能配置说明
1.角色功能作用:
  a.让剧本配置更加规范
  b.可以让剧本信息简化
  c.可以再汇总剧本中看到主机信息
2.如何配置角色功能:

第一个里程:配置好主机清单
  vim /etc/ansible/roles/hosts
  [rsync_server]
  172.16.1.41
  [rsync_client]
  172.16.1.31
  172.16.1.7
  [nfs_server]
  172.16.1.31    
  [nfs_client]
  172.16.1.41
  172.16.1.7
第二个里程:创建角色目录(以rsync举例)
 方式一:自己手动创建目录:
  mkdir /etc/ansible/roles/rsync
  mkdir /etc/ansible/roles/rsync/{tasks,files,vars,handlers,templates}
  tasks:目录中定义任务的剧本信息
  files:保存要分发文件信息
  vars:目录保存定义变量剧本文件
  handlers:目录中保存触发器剧本信息
  templates:目录中保存模板文件(jinjia2)
 方式二:使用命令自己生成目录:
  ansible-galaxy init nginx  --- 创建角色目录路径信息
  [root@m01 roles]#ansible-galaxy init nginx
  - nginx was created successfully
  [root@m01 roles]#ll
  total 0
  drwxr-xr-x 10 root root 135 Aug 27 21:33 nginx
  [root@m01 roles]#tree nginx/
  nginx/
  ├── defaults
  │   └── main.yml
  ├── files
  ├── handlers
  │   └── main.yml
  ├── meta
  │   └── main.yml
  ├── README.md
  ├── tasks
  │   └── main.yml
  ├── templates
  ├── tests
  │   ├── inventory
  │   └── test.yml
  └── vars
      └── main.yml

  8 directories, 8 files
第三个里程:
  1.编写tasks/main.yml
  编写方式一:
    去除主机清单信息、变量、触发器等只留下要执行任务内容
    - name: install software
      yum: name=rsync state=installed
    - name: push file info
      copy: src={{ file_dir }}/{{ item.src }} dest={{ conf_dir }} mode={{ item.mode }}
      notify:
        - rsync_restart
        - rsync_port
        - rsync_port_info
      with_items:
        - {src: 'rsyncd.conf', mode: '644'}
        - {src: 'rsync.password', mode: '600'}
      when: ansible_eth0.ipv4.address == "10.0.0.41"
    - name: create user
      user: name=rsync shell=/sbin/nologin create_home=no
      when: ansible_eth0.ipv4.address == "10.0.0.41"
    - name: create backup dir
      file: path=/backup state=directory owner=rsync group=rsync
      when: ansible_eth0.ipv4.address == "10.0.0.41"
    - name: boot server
      service: name=rsyncd state=started enabled=yes
      when: ansible_eth0.ipv4.address == "10.0.0.41"
    - name: check rsync server status
      shell: netstat -lntup|grep rsync
      register: rsync_state
      when: ansible_eth0.ipv4.address == "10.0.0.41"
    - name: show rsync port info before
      debug: msg={{ rsync_state.stdout_lines }}
      when: ansible_eth0.ipv4.address == "10.0.0.41"
    - name: push pass file
      copy: content='oldboy123' dest=/etc/rsync.password mode=600
      when: ansible_eth0.ipv4.address != "10.0.0.41"
  编写方式二:将一个完整的剧本拆分成多个剧本
  vim /etc/ansible/roles/rsync/tasks/copy_file.yml
       - name: push file info
         copy: src={{ file_dir }}/{{ item.src }} dest={{ conf_dir }} mode={{ item.mode }}
         notify: 
           - rsync_restart
           - rsync_port
           - rsync_port_info
         with_items:
           - {src: 'rsyncd.conf', mode: '644'}
           - {src: 'rsync.password', mode: '600'}
   vim /etc/ansible/roles/rsync/tasks/install_rsync.yml
       - name: install software
         yum: name=rsync state=installed
   将多个拆分开的任务剧本进行整合:
    vim /etc/ansible/roles/rsync/tasks/main.yml
     - include_tasks: install_rsync.yml
     - include_tasks: copy_file.yml
  2.保存files文件信息
    [root@m01 files]# ll
       总用量 8
       -rw-r--r-- 1 root root 409 8月  26 19:00 rsyncd.conf
       -rw-r--r-- 1 root root  23 8月  26 18:23 rsync.password
  3.配置vars/main.yml
    # cat ../vars/main.yml 
       conf_dir: /etc/
       file_dir: /ansible_playbook/file
  4.配置handlers/main.yml
    [root@m01 files]# cat ../handlers/main.yml
       - name: rsync_restart
         service: name=rsyncd state=restarted
       - name: rsync_port
         shell: netstat -lntup|grep rsync
         register: rsync_port
       - name: rsync_port_info
         debug: msg={{ rsync_port.stdout_lines }}
第四个里程:调取角色信息
  [root@m01 ansible]# cat roles/site.yml 
    - hosts: rsync_server,rsync_client
      roles:
        - rsync
第五个里程:执行角色汇总剧本
  ansible-playbook /etc/ansible/roles/site.yml -i /etc/ansible/roles/hosts
i:指定加载自己所配置的主机清单路径
还可以修改ansible配置文件/etc/ansible/ansible.cfg中的
#inventory      = /etc/ansible/hosts
来加载要选择的主机清单

剧本角色调用流程图:


剧本角色调用流程图.png

补充: templates目录作用:
放置存储模板文件

第一个历程: 修改配置文件 变成 模板文件
vim rsyncd.conf
port = {{ prot }}

第二个历程: 需要将模板文件移动到templates/目录中
mv rsync/files/rsyncd.conf rsync/templates/

第三个历程: 修改复制数据的模块
copy     复制文件数据 == ''  所见即所得
template 复制文件数据 == "" 可以解析{{}}调取变量信息

2.用户访问网站原理过程
1.进行域名解析过程(DNS解析原理(本地查询、递归查询、迭代查询))
2.和网站服务建立连接(三次握手过程)
3.发送HTTP请求信息(HTTP请求报文)
4.发送HTTP响应信息(HTTP响应报文)
5.和网站服务断开连接(四次挥手过程)

HTTP协议:
  HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。

HTTP请求报文结构信息:
1.请求行:

> GET / HTTP/1.1

  1. 请求方法 GET(获得 客户端 -- 从 -- 服务端获得页面数据信息 ) POST(提交 客户端 -- 发送数据 --- 服务端)
  2. 请求内容 请求网站资源信息(页面文件 图片 视频 音频) 没有具体只需求会默认请求首页文件(index.html)
  3. 请求使用的协议 HTTP/1.0 HTTP/1.1 HTTP/2.0
    TCP长链接: HTTP/1.1 一次链接,可以发送多个请求
    TCP短链接: HTTP/1.0 一次链接,可以发送一次请求

2.请求头:

Hosts: www.oldboyedu.com --- 指定显示什么网站页面 www bbs blog 主机记录信息
User-Agent: curl/7.29.0 --- 根据用户访问客户端信息不同,可以显示不同的页面

3.空行
4.请求主体:
get方法没有请求主体 post方法具有请求主体

HTTP响应报文结构信息:
1).起始行:

HTTP/1.1 302 Found

  1. 协议信息
  2. 响应状态码信息

2).响应头
3).空行
4).响应主体

HTTP请求与响应报文图示:


HTTP请求与响应报文.png

3.常见状态码:

状态码.png

状态码2.png

4.HTTP协议版本:
HTTP/0.9
  HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。

HTTP/1.0:
  在0.9版本上做了进步,增加了请求方式POST和HEAD;不再局限于0.9版本的HTML格式,根据Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;同时也开始支持cache,就是当客户端在规定时间内访问统一网站,直接访问cache即可。
  但是1.0版本的工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keepalive。

HTTP/1.1:
  解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求; 加入了管道机制,一个TCP连接同时允许多个请求同时发送,增加了并发性;新增了请求方式PUT、PATCH、DELETE等。
  但是还存在一些问题,服务端是按队列顺序处理请求的,假如一个请求处理时间很长,则会导致后边的请求无法处理,这样就造成了队头阻塞的问题;同时HTTP是无状态的连接,因此每次请求都需要添加重复的字段,降低了带宽的利用率。

HTTP/2.0:
  为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。
  另外也增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。

当前主流的协议版本还是HTTP/1.1版本。

你可能感兴趣的:(day40综合架构批量管理篇)