-
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
来加载要选择的主机清单
剧本角色调用流程图:
补充: 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
- 请求方法 GET(获得 客户端 -- 从 -- 服务端获得页面数据信息 ) POST(提交 客户端 -- 发送数据 --- 服务端)
- 请求内容 请求网站资源信息(页面文件 图片 视频 音频) 没有具体只需求会默认请求首页文件(index.html)
- 请求使用的协议 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
- 协议信息
- 响应状态码信息
2).响应头
3).空行
4).响应主体
HTTP请求与响应报文图示:
3.常见状态码:
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版本。