【小白日记36】----Ansible自动化运维

一、Ansible简介

Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

二、Ansible准备工作

准备3台机器,一台做主服务器,两台做客户机(其中一台免密登录,另一台正常登录)

1.域名解析

在这里插入图片描述

2.安装软件

在这里插入图片描述
在这里插入图片描述

  • 列出所有软件
    在这里插入图片描述
  • 列出配置文件
    在这里插入图片描述
  • 查看帮助
ansible --help

3.客户机1免密登录

  • 生成秘钥
    在这里插入图片描述
  • 传递秘钥
    在这里插入图片描述
  • 测试
    在这里插入图片描述

4.客户机密码登录

  • 定义主机清单
vim /etc/ansible/hosts

在这里插入图片描述

  • 使用 “ping”模块 测试host1 host2 这个ping模块 与 ping命令是不一样的 Ansible ping模块 利用的是 sshd的服务 而ping命令是测试两台主机是否连通
    在这里插入图片描述

host1测试连接成功
在这里插入图片描述

  • 发现hosts2失败 ,这是因为还没有让Ansible 知道密码 不能进行登录
    在这里插入图片描述
  • 使用-k 属性 来输入密码
    在这里插入图片描述
  • 去掉yes/no的询问
vim /etc/ssh/ssh_config

在这里插入图片描述

三、inventory(主机库)

1.增加主机组

将host1 host2 放入一个组中
在这里插入图片描述
在这里插入图片描述

2.增加用户,密码

在这里插入图片描述
在客户机上查看用户
在这里插入图片描述
在这里插入图片描述

3.增加端口

vim /etc/ssh/sshd_config 

systemctl restart sshd

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.增加组变量

在这里插入图片描述
在这里插入图片描述

5.增加子分组

[apache]
host[1]
[nginx]
host[2]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'

四、Ad-Hoc(点对点模式)

  • 临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。

1.复制模块

帮助文档
ansible-doc copy

ansible webserver -m copy -a 'src=/etc/hosts   dest=/tmp/ '

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.用户模块

  • 创建用户
ansible webserver  -m user -a'name="lisi" state="present" '

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 删除用户
ansible webserver -m user  -a 'name="lisi" state="absent" '

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 修改密码
echo '777777' |  openssl  passwd -1 -stdin

在这里插入图片描述

ansible webserver  -m  user -a 'name="wangwu" password="$1$C4sfsWbW$WZ8afyvONqzk3NzGU7tNb0" '

在这里插入图片描述
使用密码“777777”登录
在这里插入图片描述

  • 修改shell
ansible webserver  -m user -a 'name="wangwu" shell=/sbin/nologin append=yes  '

无法登陆
在这里插入图片描述
在这里插入图片描述

3.软件包模块

ansible webserver -m yum -a 'name="httpd" state="latest"  '

在这里插入图片描述

4.服务模块

  • 批量开启服务
ansible webserver -m service -a 'name="httpd" state="started"'

在这里插入图片描述

  • 批量设置开机自启
ansible webserver -m service -a 'name=httpd state=started enabled=yes'

在这里插入图片描述

  • 批量关闭服务
ansible host2 -m service -a 'name=httpd state=stopped'
  • 批量重新启动服务
ansible host2 -m service -a 'name=httpd state=restarted'
  • 批量设置开机不自启
ansible host2 -m service -a 'name=httpd state=started enabled=no'

5.文件模块

  • 创建文件
ansible webserver -m file -a 'path=/tmp/888.txt  mode=777 state=touch'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 批量创建目录
ansible webserver -m file -a 'path=/tmp/dir1  mode=777 state=directory'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.收集模块

  • 查询host1所有信息
ansible host1 -m setup

在这里插入图片描述

7.Shell模块(非常简便)

但最好还是用本身归属的模块

  • 显示所有用户名
ansible webserver -m shell -a 'hostname' -o

在这里插入图片描述

  • 批量安装软
ansible webserver -m shell -a 'yum -y install elinks' -o

在这里插入图片描述

五、YAML(非标记语言)

1.简介

YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲
注意

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

2.实例

目的:通过YAML来实现部署,配置,启动一个web网站的需求

2.1清理环境

  • 清理环境并在服务器上安装httpd服务
ansible webserver -m yum -a 'name=httpd state=absent

2.2编写及测试剧本

- hosts: webserver
  tasks:
  - name: install httpd
    yum: name=httpd state=present
  - name: copy    copy: src=/root/apache/httpd.conf   dest=/etc/httpd/conf/httpd.conf
  - name: start service
    service: name=httpd state=started enable=yes

在这里插入图片描述
在这里插入图片描述

  • 测试剧本是否可用
 ansible-playbook  apache.yaml --syntax-check

在这里插入图片描述

  • 测试剧本任务清单
ansible-playbook  apache.yaml  --list-tasks

在这里插入图片描述

  • 测试剧本主机
ansible-playbook  apache.yaml  --list-hosts

在这里插入图片描述

  • 运行剧本
ansible-playbook  apache.yaml 

成功
在这里插入图片描述

  • 访问网站 这里端口号 我设置的为8080 所以访问的时候需要在ip地址后加端口号
    在这里插入图片描述

2.4完善

再次修改端口号的时候 会发现客户机的端口号 并未改变 ,页面没有生效,这是因为客户机没有重新启动服务,所以我们添加一个触发任务:一旦配置文件被修改后,就会触发notify 就会执行handler任务

这里要注意的是 notify后面的内容一定要和handler 的 name 的内容一致
在这里插入图片描述
在这里插入图片描述

  • 运行剧本
    在这里插入图片描述
  • 查看网页,发现之前的等不上去了
    在这里插入图片描述
  • 切换端口号
    在这里插入图片描述
    成功!

六、role (角色)

1.简介

roles则是在ansible中,playbooks的目录组织结构。将代码或文件进行模块化,成为roles的文件目录组织结构,易读,代码可重用,层次清晰。

2.实例

需求:部署,测试Nginx

2.1目录结构

  • 准备目录结构
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo 20200914 welcome > roles/nginx/files/index.html
yum install -y nginx
cp/etc/nginx/nginx.confroles/nginx/templates/nginx.conf.j2

在这里插入图片描述

2.2编写任务

---
- name: install epel-release package
  yum: name=epel-release  state=latest
- name: install nginx package
  yum: name=nginx state=latest
- name: copy index.html
  cpoy: src=index.html  dest=/usr/share/nginx/html/index.html
- name: copy nginx.conf template
  template: src=nginx.conf.j2 dest= /etc/nginx/nginx.conf
- name: service running
  service: name=nginx state=started enabled=yes

在这里插入图片描述

2.3编写配置文件

在这里插入图片描述

2.4编写变量

在这里插入图片描述

2.5编写触发点

# vim roles/nginx/handlers/main.yaml 
# 在触发点文件中写
---
- name: restart nginx
  service: name=nginx state=restarted

在这里插入图片描述

vim roles/nginx/tasks/main.yaml 

---

- name: copy nginx.conf template
  template: src=nginx.conf.j2 dest= /etc/nginx/nginx.conf
  notify: restart nginx

在这里插入图片描述

2.6编写剧本

vim roles/site.yaml 

- hosts: webserver
  roles:
  - nginx

在这里插入图片描述

2.7测试实施

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有报错
在这里插入图片描述
成功!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了减轻多服务器配置和操作工作量以及安全性,特研究此课题,理论上可以同步所有想同步的文件,并且做到一键操作,不需要切换用户,不需要多次操作脚本,中途不需要输入任何字。 1, hosts文件 2, play.yml文件 剧本文件,按标准放到tasks文件夹内,因后面脚本写了路径,如果不愿意放tasks文件夹,需要改后面sh脚本路径参数 3, rsync_notice.py文件 钉钉机器人发送消息文件,此文件放在tools文件夹内,会调用备份日志进行分析,过滤后,发送到钉钉群内。各位同事可修改文件里的Webhoo为自己的机器人key 4, deploy.sh 文件 调用py钉钉文件发消息,并且处理备份日志,删除近期日志等后续事宜,请放在tools文件夹内 1.3.3. 功能基本介绍 1, 在对应脚本里基本都有注释,这里简单介绍下 2, 剧本文件需要在主控机器(备份机器),root用户下运行,运行一次即可,后续sh及py脚本会自动处理。一键搞定所有事情,中途无需手动干预; 3, 自行修改host文件为自己项目地址,bak为备份文件服务器,为安全起见,hosts文件进行了vault加密,密码123456,运行剧本文件,请加—ask-vault-pass 4, 再次提醒,在脚本运行完成后,为保险起见,可将hosts文件中的root密码删除,或修改复杂密码,不会影响后续同步功能。 5, 剧本流程介绍: 1) 主控被控端安装rsync及相关依赖软件; 2) 主控与被控端添加备份用户,rsync; 3) 主控端即备份服务器建立备份文件夹,设置归属用户; 4) 主控及被控端自动切换rsync用户,使用rsync用户配置免密访问所有被控端,即便服务器被黑,rsync用户访问也做不了什么; 5) 主控端即备份服务器使用rsync用户增加同步、日志记录、钉钉发送消息等定时任务; 6) 定时任务里各个需要同步的源地址及项目名称,请自行修改; 7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据不关心,所以读取后,进行数据处理,取出服务器地址、成功标识,或未成功标识; 2) 调用钉钉机器人接口,采取markdown形式,此形式可以定义一个固定的标题,比如:rsync同步情况汇总,这样在钉钉机器人安全设置里,只需要将标题设为关键字即可,具体发送内容千奇百怪也没关系。另外两种方式各有弊端,未研究。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值