第13周作业

第十三周作业

1、ansible-playbook实现MySQL的二进制部署
2、Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html
3、http的报文结构和状态码总结

ansible-playbook实现mysql二进制安装。

实验步骤

  1. 配置epel源,安装ansible
  2. 配置基于key的ssh免密登录
  3. 配置配置host文件,修改ansible.cfg的host路径
  4. 下载mysql二进制包,准备my.cnf配置文件
  5. 编写yaml文件
##配置基于key的ssh免密登录
[root@ansible-ser ~]#cat ssh_keylogin.sh
#!/bin/bash
#var
END=254
PASSWD=123456
#取IP和网段
IP=`ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.
#扫描本机所在网段的ip,并记录在SCANIP.log内
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=3;i<="$END";i++));do
ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
done
wait

#生成本机id_rsa,并生成本机key
rm -f /root/.ssh/id_rsa
ssh-keygen -P '' -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no $IP

IPLIST=`cat SCANIP.log`
for ip in $IPLIST;do
sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no $ip
done
wait

IPLIST=`cat SCANIP.log`
for ip in $IPLIST;do
sshpass -p 123456 scp -o StrictHostKeyChecking=no -r /root/.ssh root@$ip:
done
wait
#项目文件夹所有文件
[root@ansible-ser /data/ins_mysql]#tree -L 2
.
├── ansible.cfg
├── hosts
├── ins_mysql.yaml
├── my.cnf
├── mysql
│   ├── bin
│   ├── docs
│   ├── include
│   ├── lib
│   ├── LICENSE
│   ├── man
│   ├── README
│   ├── share
│   └── support-files
└── mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

[root@ansible-ser /data/ins_mysql]#vim ins_mysql.yaml

- hosts: mysql
  gather_facts: no

  tasks:
  - name: transmission package
    copy: src=/data/ins_mysql/mysql dest=/usr/local/ mode=0731

  - name: mkidr /data
    file: path=/data state=directory

  - name: group
    group: name=mysql system=yes
  - name: user
    user: name=mysql system=yes group=mysql home=/data/mysql shell=/sbin/nologin

  - name: path
    copy: content='export PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh mode=711
  - name: export path
    shell: source /etc/profile.d/mysql.sh; echo $PATH > /tmp/path.log

  - name: cp my.cnf
    copy: src=/data/ins_mysql/my.cnf dest=/etc/my.cnf

  - name: init
    shell: mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
  - name: denied
    shell: chmod -R 731 /usr/local/mysql


  - name: server
    shell: cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld;chkconfig --add mysqld;chkconfig mysqld on
  - name: server start
    service: name=mysqld state=started enabled=yes

注意:

  • cp后的文件权限问题
  • shell模块不具有幂等性,执行时需注意

Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html

[root@ansible-ser /data/ins_apache]#tree
.
├── ansible.cfg
├── hosts
└── ins_httpd.yaml

0 directories, 3 files
---
- hosts: httpd
  gather_facts: no

  tasks:

  - name: yum_install
    yum: name=httpd state=present

  - name: fork ip
    shell: ip a show eth0| awk  NR==3 | awk -F[" "/]+ '{print $3}'
    register: ip

  - name: index
    shell: echo "{{ip.stdout}}" > /var/www/html/index.html

  - name: server start
    service: name=httpd state=started enabled=yes

http的报文结构和状态码总结

请求报文

请求报文的开始行包含内容:方法(get post等) URL 和http版本

首部行一般包含:主机名,主机地址、接受资源类型、客户端类型、接受语言、连接状态等。

image-20220608151441954

GET / HTTP/1.1
Host: 10.0.0.173
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

image-20220611040818636

相应报文

开始行一般包含http版本、状态码;

首部行一般包含内容:时间、服务端类型、超时时间等

image-20220608151452666

HTTP/1.1 200 OK
Date: Fri, 10 Jun 2022 20:06:39 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Fri, 10 Jun 2022 20:02:20 GMT
ETag: "b-5e11d6a784604"
Accept-Ranges: bytes
Content-Length: 11
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

image-20220611040807314

状态码

100+ 信息提示

200+ 成功

300+ 重定向

400+ 客户端错误

500+ 服务端错误

  • 200: 成功,请求数据通过响应报文的entity-body部分发送;OK
  • 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
  • 302: 响应报文Location指明资源临时新位置 Moved Temporarily
  • 304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
  • 307: 浏览器内部重定向
  • 401: 需要输入账号和密码认证方能访问资源;Unauthorized
  • 403: 请求被禁止;Forbidden
  • 404: 服务器无法找到客户端请求的资源;Not Found
  • 500: 服务器内部错误;Internal Server Error
  • 502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
  • 503: 服务不可用,临时服务器维护或过载,服务器无法处理请求
  • 504: 网关超时
posted @   小布甲  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示