Ansible自动化的运用

1、ansible-playbook实现MySQL的二进制部署

编写给予ssh  key认证的脚本han_ssh.sh

#!/bin/bash
#
#*********************************************
#Author:            Cry 3 tears 4 me
#QQ:                2512129751
#Date:              2022-06-17
#FileName:         han_ssh.sh
#Mail:              2512129751@qq.com
#Description:      The best script
#Copyright (C):     2022 All rights reserved
#*********************************************
PASS=123456
#设置网段最后的地址,4-255之间,越小扫描越快
END=254

IP=`ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.

rm -f /root/.ssh/id_rsa
[ -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

ssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IP 

AliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
done

#把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入回车
for n in ${AliveIP[*]};do
scp /root/.ssh/known_hosts ${n}:.ssh/
done

认证完成后被ansible控制的主机是能够互通的:

(1)实验准备:

mkdir roles/mysql/{tasks,vars,files} -pv

(2)配置数据库的my.cnf文件

[root@ansible files]# cat my.cnf 
[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

(3)准备变参数在vars文件夹下准备:

[root@ansible vars]# cat main.yml 
mysql_version: 8.0.19
mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz
mysql_root_password: 123456

(4)准备好mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz安装包放在files文件下:

(5)编写yml模块,用role来实现ansible自动化安装数据库:

[root@ansible tasks]# cat config.yml 
- name: config my.cnf
  copy: src=/data/ansible/roles/mysql/files/my.cnf dest=/etc/my.cnf
[root@ansible tasks]# cat  data.yml 
- name: data dir
  shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
  tags: data
[root@ansible tasks]# cat  group.yml 
- name: create mysql group
  group: name=mysql gid=306
[root@ansible tasks]# cat  install.yml 
- name: install packages
  yum:
    name:
      - libaio
      - numactl-libs
[root@ansible tasks]# cat  linkfile.yml 
- name: create linkfile /usr/local/mysql
  file: src=/usr/local/mysql-{{ mysql_version }}-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
[root@ansible tasks]# cat path.yml 
- name: PATH variable
  copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
[root@ansible tasks]# cat script.yml 
- name: service script
  shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@ansible tasks]# cat secure.yml 
- name: change password
  shell: /usr/local/mysql/bin/mysqladmin -uroot password {{mysql_root_password}}
[root@ansible tasks]# cat service.yml 
- name: enable service
  shell: chkconfig --add mysqld;/etc/init.d/mysqld start
  tags: service
[root@ansible tasks]# cat unarchive.yml 
- name: copy tar to remote host and file mode
  unarchive: src={{mysql_file}} dest=/usr/local/ owner=root group=root
[root@ansible tasks]# cat user.yml 
- name: create mysql user
  user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
[root@ansible tasks]# cat main.yml 
- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: linkfile.yml
- include: data.yml
- include: config.yml
- include: script.yml
- include: path.yml
- include: service.yml
- include: secure.yml

(6)最后编写运行脚本role_mysql.yml

[root@ansible ansible]# cat role_mysql.yml 
---
- hosts: 10.0.0.6
  remote_user: root
  gather_facts: no
  
  roles:
    - mysql

(7)验证实验是否成功 

在10.0.0.6装上mysql的客户端程序进行验证:

yum -y  install  mysql-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
mysql -uroot -p123456

 

 

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

roles:多个角色的集合目录,可以将多个的role,分别放至roles目录下的独立子目录中;

 roles角色:
     简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的-种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。
     运维复杂的场景:建议使用roles,代码复用度高
roles:多个角色的集合目录,可以将多个的role,分别放至roles目录下的独立子目录中roles各录、roles/project/:项目名称,有以下子目录files/:存放由copy或script模块等调用的文件;

templates/: template模块查找所需要模板文件的目录;
tasks/: 定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含

handlers/:至少应该包含一个名为main.yml的文件;此目录下的其它的文件需要在此文件中通include进行包含;
vars/:定义变量,至少应该包含一个名为main.yml的文件;

此目录下的其它的变量文件需要在此文件中通过include进行包含;

metal:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含;
defaultl:设定默认变量时使用此目录中的main.yml文件,比vars的优先级低;

前期准备工作:

准备roles角色的文件夹

mkdir roles/nginx/{tasks,templates,handlers,files} -pv
mkdir roles/httpd/{tasks,templates,handlers,files} -pv

 编写安装nginx的playbook模板:

[root@ansible tasks]# cat yum.yml 
- name: Install nginx
  yum: name=nginx  state=present
[root@ansible tasks]# cat config.yml.yml 
cat: config.yml.yml: No such file or directory
[root@ansible tasks]# cat config.yml 
- name: Modify web page
  copy: content='{{ ansible_eth0.ipv4.address }}\n' dest=/usr/share/nginx/html/index.html
[root@ansible tasks]# cat service.yml 
- name: start service
  service: name=nginx state=started enabled=yes
[root@ansible tasks]# cat main.yml 
- include: yum.yml 
- include: config.yml
- include: service.yml
[root@ansible nginx]# cd ..
[root@ansible nginx]# cd handlers/
[root@ansible handlers]# cat main.yml 
- name: restart
  service: nmae=nginx state=restarted

编写nginx.yml

[root@ansible ansible]# cat nginx.yml 
---
- hosts: websrvs
  remote_user: root
  
  roles:
    - nginx

修改要控制主机的文件

[root@ansible ansible]# cat  /etc/ansible/hosts 

 

检查脚本是否有问题

 运行脚本

检查实验现象:

 httpd的搭建与nginx很类似,但最好被控制的主机都有安装net-tools的软件,才能自动创建文件:

[root@ansible tasks]# cat config.yml 
- name: Modify web page
  copy: content='{{ ansible_eth0.ipv4.address }}\n' dest=/var/www/html/index.html
[root@ansible tasks]# cat yum.yml 
- name: Install httpd
  yum: name=httpd  state=present
[root@ansible tasks]# cat yum1.yml 
- name: Install net-tools 
  yum: name=net-tools state=present
[root@ansible tasks]# cat service.yml 
- name: start service
  service: name=httpd state=started enabled=yes
[root@ansible tasks]# cat main.yml
- include: yum.yml
- include: yum1.yml 
- include: config.yml
- include: service.yml

配置httpd.yml

[root@ansible ansible]# cat httpd.yml 
---
# httpd role
- hosts: websrvs
  remote_user: root

  roles: 
    - httpd

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

HTTP报文分为请求报文和响应报文,这两类报文都是由三个部分组成:

(1)开始行:区分请求报文和响应报文

(2)首部行:说明浏览器、服务器报文主题的一些信息

(3)实体主体

请求报文的开始行包括:方法(请求方法如get、post、put、trace等)、URL、协议版本

响应报文的开始行包括:版本、状态码、短语(用于简单解释状态码)

响应报文中的状态码分为五大类,共33种:

1XX表示通知信息的,如请求收到了或正在进行处理

2XX表示成功,如接受或知道了

3XX表示重定向,如要完成请求还必须采取进一步的行动

4XX表示客户的差错,如请求中有语法错误或不能完成

5XX表示服务器的差错,如服务器失效无法完成请求

常见状态码:

202 Accepted 接受

400 Bad Reque 错误请求

404 Not Found 找不到
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N64-HanYeWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值