第13周作业
利用ansible的playbook实现MySQL5.7的二进制部署
利用角色部署
主配置文件:
vim mysql-role.yml
---
- hosts: 10.0.0.12
remote_user: root
gather_facts: no
roles:
- mysql
roles结构
[root@centos7 mysql]# tree
.
├── tasks
│ ├── 10cpfile.yml
│ ├── 11service.yml
│ ├── 12passwd.yml
│ ├── 1install.yml
│ ├── 2unarchive.yml
│ ├── 3linkfile.yml
│ ├── 4Changeper.yml
│ ├── 5groupadd.yml
│ ├── 6useradd.yml
│ ├── 7Path.yml
│ ├── 8prefile.yml
│ ├── 9chushihua.yml
│ └── main.yml
├── templates
│ └── my.cnf.j2
└── vars
└── main.yml
3 directories, 15 files
tasks文件
[root@centos7 tasks]# cat 1install.yml
- name: install op
yum: name={{ item }}
with_items:
- libaio
- numactl-libs
[root@centos7 tasks]# cat 2unarchive.yml
- name: tar xf mysql
unarchive: src=/data/ansible/bao/{{ MYSQL }} dest=/usr/local owner=root group=root
[root@centos7 tasks]# cat 3linkfile.yml
- name: create link
file: src=/usr/local/mysql-{{ MYSQL_version }}-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
[root@centos7 tasks]# cat 4Changeper.yml
- name: chown
file:
path: /usr/local/mysql/
owner: root
group: root
[root@centos7 tasks]# cat 5groupadd.yml
- name: group mysql
group: name=mysql gid=306
[root@centos7 tasks]# cat 6useradd.yml
- name: useradd mysql
user: name=mysql group=mysql uid=306 shell=/sbin/nologin system=yes create_home=no home=/data/mysql
[root@centos7 tasks]# cat 7Path.yml
- name: PATH file
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
[root@centos7 tasks]# cat 8prefile.yml
- name: peizhiwenjian
template: src=my.cnf.j2 dest=/etc/my.cnf
[root@centos7 tasks]# cat 9chushihua.yml
- name: chushihua
shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
[root@centos7 tasks]# cat 10cpfile.yml
- name: cpfile
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos7 tasks]# cat 11service.yml
- name: service start
shell: chkconfig --add mysqld;chkconfig mysqld on;service mysqld start
[root@centos7 tasks]# cat 12passwd.yml
- name: passwd
shell: /usr/local/mysql/bin/mysqladmin -uroot password {{ MYSQL_ROOT_PASSWORD }}
[root@centos7 tasks]# cat main.yml
- include: 1install.yml
- include: 2unarchive.yml
- include: 3linkfile.yml
- include: 4Changeper.yml
- include: 5groupadd.yml
- include: 6useradd.yml
- include: 7Path.yml
- include: 8prefile.yml
- include: 9chushihua.yml
- include: 10cpfile.yml
- include: 11service.yml
- include: 12passwd.yml
变量文件
[root@centos7 mysql]# cd vars/
[root@centos7 vars]# tree
.
└── main.yml
0 directories, 1 file
[root@centos7 vars]# cat main.yml
SRC_DIR: /data/ansible/bao
MYSQL_version: 8.0.28
houzhui: xz
MYSQL: mysql-{{MYSQL_version}}-linux-glibc2.12-x86_64.tar.{{houzhui}}
MYSQL_ROOT_PASSWORD: 123456
模板文件
[root@centos7 mysql]# cd templates/
[root@centos7 templates]# tree
.
└── my.cnf.j2
0 directories, 1 file
[root@centos7 templates]# cat my.cnf.j2
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
用ansible运行主配置文件即可
ansible-playbook mysql-role.yml
Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html
主配置文件
[root@centos7 ansible]# cat httpd-role.yml
---
- hosts: 10.0.0.20
remote_user: root
roles:
- httpd
roles结构
[root@centos7 roles]# tree httpd/
httpd/
├── httpd-2.4.53.tar.bz2
├── tasks
│ ├── build.yml
│ ├── downaprutil.yml
│ ├── downapr.yml
│ ├── downhttpd.yml
│ ├── group.yml
│ ├── install.yml
│ ├── main.yml
│ ├── preaprutil.yml
│ ├── preapr.yml
│ ├── prefile.yml
│ ├── sethttpdgroup.yml
│ ├── sethttpduser.yml
│ ├── setvar.yml
│ ├── start.yml
│ └── user.yml
├── templates
│ └── httpd.service.j2
└── vars
└── main.yml
3 directories, 18 files
tasks
[root@centos7 tasks]# cat main.yml
- include: install.yml
- include: downhttpd.yml
- include: downapr.yml
- include: downaprutil.yml
- include: preapr.yml
- include: preaprutil.yml
- include: build.yml
- include: group.yml
- include: user.yml
- include: sethttpduser.yml
- include: sethttpdgroup.yml
- include: setvar.yml
- include: prefile.yml
- include: start.yml
[root@centos7 tasks]# cat install.yml
- name: install packages
yum: name=gcc,make,pcre-devel,openssl-devel,expat-devel,bzip2 state=installed
[root@centos7 tasks]# cat downhttpd.yml
- name: download httpd file
unarchive: src="{{ httpd_url }}//{{ httpd_version }}.tar.bz2" dest={{ download_dir }} remote_src=yes
[root@centos7 tasks]# cat downapr.yml
- name: download apr
unarchive: src="{{ apr_url }}/{{ apr_version }}.tar.bz2" dest={{ download_dir }} owner=root remote_src=yes
[root@centos7 tasks]# cat downaprutil.yml
- name: download aprutil
unarchive: src="{{ apr_url }}/{{ apr_util_version }}.tar.bz2" dest={{ download_dir }} owner=root remote_src=yes
[root@centos7 tasks]# cat preapr.yml
- name: prepare aprdir
shell: chdir={{ download_dir }} mv {{ apr_version }} {{ download_dir }}/{{ httpd_version }}/srclib/apr
[root@centos7 tasks]# cat preaprutil.yml
- name: prepare aprutil
shell: chdir={{ download_dir }} mv {{ apr_util_version }} {{ download_dir }}/{{ httpd_version }}/srclib/apr-util
[root@centos7 tasks]# cat build.yml
- name: build httpd
shell: chdir={{ download_dir }}/{{ httpd_version }} ./configure --prefix={{ install_dir }} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork && make -j {{ ansible_processor_vcpus }} && make install
[root@centos7 tasks]# cat group.yml
- name: create group
group: name=apache gid=80 system=yes
[root@centos7 tasks]# cat user.yml
- name: useradd
user: name=apache group=apache uid=80 shell=/sbin/nologin system=yes create_home=no home={{ install_dir }}/conf/httpd
[root@centos7 tasks]# cat sethttpdgroup.yml
- name: set httpd group
lineinfile: path={{ install_dir }}/conf/httpd.conf regexp='^Group' line='Group apache'
[root@centos7 tasks]# cat setvar.yml
- name: set var path
shell: echo PATH=={{ install_dir }}/bin:$PATH >> /etc/profile.d/httpd.sh
[root@centos7 tasks]# cat prefile.yml
- name: prepare service file
template: src=httpd.service.j2 dest=/usr/lib/systemd/system/httpd.service
[root@centos7 tasks]# cat start.yml
- name: start httpd
service: name=httpd state=started enabled=yes
vars
[root@centos7 httpd]# cat vars/main.yml
download_dir: /usr/local/src
install_dir: /apps/httpd
httpd_version: httpd-2.4.53
apr_version: apr-1.7.0
apr_util_version: apr-util-1.6.1
httpd_url: https://mirrors.bit.edu.cn/apache/httpd/
apr_url: https://mirrors.bit.edu.cn/apache/apr/
templates
[root@centos7 httpd]# cat templates/httpd.service.j2
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart={{ install_dir }}/bin/apachectl start
#ExecStart={{ install_dir }}/bin/httpd $OPTIONS -k start
ExecReload={{ install_dir }}/bin/apachectl graceful
#ExecReload={{ install_dir }}/bin/httpd $OPTIONS -k graceful
ExecStop={{ install_dir }}/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
http的报文结构和状态码总结
HTTP的报文分为请求报文和响应报文
HTTP请求报文:由三个部分组成,即开始行、首部行和实体主体
在请求报文中,开始行就是请求行。
request报文格式:
<method> <request-URL> <version>
<headers>
<entity-body>
HTTP响应报文:开始行是状态行
状态行包括三项内容,即HTTP的版本,状态码以及解释状态码的简单短语
<version> <status> <reason-phrase>
<headers>
<entity-body>
Method方法:
请求方法,标明客户端希望服务器对资源执行的动作,包括以下:
GET: 从服务器获取一个资源
HEAD: 只从服务器获取文档的响应首部
POST: 向服务器输入数据,通常会再由网关程序继续处理
PUT: 将请求的主体部分存储在服务器中,如上传文件
DELETE: 请求删除服务器上指定的文档
TRACE: 追踪请求到达服务器中间经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持使用的请求方法
CONNECT:建立一个到由目标资源标识的服务器的隧道
PATCH:用于对资源应用部分修改
首部的分类:
1、通用首部:请求报文和响应报文两方都会使用的首部
2、请求首部:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息
3、响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息
4、实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息
5、协商首部:某资源有多种表示方法时使用
常见的HTTP状态码
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
400 (错误请求) 服务器不理解请求的语法。
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。