首先我们来谈一下,为什么要引入自动化运维呢?
引入自动化运维的目的是为了提高运维效率、降低人工操作的错误率、减少重复性的工作、提高系统的可靠性和稳定性。传统的手动运维方式存在以下问题:
- 出现了大量的人工干预,运维人员需要不断地手工维护系统,难以应对复杂的变化以及日益增长的需求。
- 可能存在漏洞和疏忽,即使是最有经验的运维人员也难以保证操作的准确性和一致性,最终可能导致系统出现故障。
- 随着业务的不断扩展,服务器、应用程序和网络设备等系统的数量和规模也会不断增加,而手动运维往往需要花费大量的时间和人力成本。
引入自动化运维可以解决上述问题。自动化运维能够自动化地完成重复性的、简单的操作,并且可以快速识别和解决潜在问题,提高系统的可靠性和稳定性。同时,自动化运维可以大大减少人工操作的错误率,更加高效地完成运维任务,节省时间和成本。
人工运维
人工运维时代运维人员早期需要维护数量众多的机器,因此需要执行反复,重复的劳动力,很多机器需要同时部署相同的服务或是执行相同的命令,还得反复的登录不同的机器,执行重复的动作。
自动化运维
早期运维人员会结合ssh免密登录以及shell脚本来完成自动化的部署操作。
系统管理员面临的问题主要是,配置管理系统,远程执行命令,批量安装服务,启停服务等等
后来也就诞生了众多的开源软件,自动化运维软件
- fabric
- puppet
- saltstack
- chef
- Ansible <<<<<<<<<<
其中有两款软件是基于python语言开发的,saltstack,ansible都是基于python编写
自动化运维的好处:
- 提高工作效率
- 减少重复性的劳动力操作
- 大大的减少了人为出错的可能性
- 支持数据化管理,数据化追源,找到问题的来源点
ansible简介
ansible是一个同时管理多个远程主机的软件。通过shh协议实现了,管理节点(老板,安装了ansible服务的机器),被管理节点(员工,被管理的机器节点)的通信。
只要是通过ssh协议登录的主机,就可以完成ansible自动化部署操作
- 批量文件分发
- 批量数据复制
- 批量数据修改,删除
- 批量自动化安装软件服务
- 批量服务启停脚本化
- 自动批量服务部署
模块化
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
connection plugins:连接插件,负责和被监控端实现通信,默认使用SSH连接
host inventory:主机清单,是一个配置文件里面定义监控的主机
modules : 模块,核心模块、command模块、自定义模块等
plugins : modules功能的补充,包括连接插件,邮件插件等
playbook:编排,定义 Ansible 多任务配置文件,非必需。服务部署的流程:上传tar包-解压-改名字-写变量-检测是否成功
ansible安装
安装:控制节点1. 配置EPEL网络yum源[root@ansible-server ~]# yum install -y epel-release2. 安装ansible[root@ansible-server ~]# yum install -y ansible3.查看版本[root@ansiable-server ~]# ansible --version4.看帮助[root@ansible-server ~]# ansible --help
命令 | 作用 |
---|---|
-m module | 指定模块,默认为command模块 |
–version | 显示版本 |
-v | 详细过程 -vv -vvv更详细过程 |
–list | 显示主机列表,也可以用–list-hosts |
-k | 提示输入ssh连接密码,默认key认证 |
-C | 预执行检测 |
-T | 执行命令的超时时间,默认10s |
-u | 指定远程执行的用户 |
-b | 执行sudo切换身份操作 |
-become-user | 指定sudo的用户 |
-K | 提示输入sudo密码 |
基础操作
- 配置文件
ansible经常操作的配置文件有两个
主配置文件:
/etc/ansible/ansible.cfg #主要设置一些ansible初始化的信息,比如日志存放路径、模块、等配置信息
主机清单文件:
默认位置/etc/ansible/hosts #设置被管理主机的相关信息
添加被管理主机
- 添加单个主机
[root@ansible-server ~]# vim /etc/ansible/hosts #在最后追加被管理端的机器
192.168.157.113 #单独指定主机,可以使用主机名称或IP地址
- 添加主机群
[root@ansible-server ~]# vim /etc/ansible/hosts
[webservers] #使用[]标签指定主机组 ----标签自定义
192.168.157.113 #如果未解析添加ip,解析添加主机名
192.168.157.114
- 包含其他组
[webservers1] #组一
ansible-web1
[webservers2] #组二
ansible-web2
[weball:children] #children是关键字 表示 weball中包含 webserver1 和 webserver2
webservers1 #组一
webservers2 #组二
- 为一个组设置内置变量
[weball:vars] #vars关键字,表示为weball组群设置变量
ansible_ssh_port=22 #指定ssh端口
ansible_ssh_user=root #指定用户
- 执行命令
#语法
ansible <pattern> -m <module_name> -a <arguments> ...pattern:主机清单里定义的主机组名,主机名,IP,别名等,all表示所有的主机,支持通配符,正则
-m module_name: 模块名称,默认为command
-a arguments: 传递给模块的参数
[root@localhost ansible]# ansible weball -m command -a "hostname" -k -u root
颜色 | 含义 |
---|---|
绿色 | 执行成功但为对远程主机做任何改变 |
黄色 | 执行成功并对远程主机做改变 |
红色 | 执行失败 |