Linux服务器教程之十三Ansible自动化运维入门
【摘要】 Ansible 是一款开源的自动化工具,广泛应用于配置管理、应用部署、任务自动化以及多节点管理等领域。Ansible 的无代理架构意味着不需要在被管理的节点上安装任何专门的代理软件。它通过 SSH与被控节点通信,实现任务的执行和数据的传输。
任务背景
公司的服务器越来越多, 维护一些简单的事情都会变得很繁琐。用shell脚本来管理少量服务器效率还行, 服务器多了之后, shell脚本无法实现高效率运维。这种情况下,我们需要引入自动化运维工具, 对多台服务器实现高效运维。
任务要求
通过管理服务器能够按照需求灵活高效地管理所有应用服务器的运维操作
任务拆解
1, 需要一台服务器做管理端, 来连接管理所有的应用服务器
2, 考虑如果只针对一部分应用服务器进行运维操作如何实现(服务器分组)
3, 学会将平台烂熟于心的linux操作命令转化为自动化运维的方式(常见模块的学习)
4, 如果操作非常的冗长, 学会使用playbook和role的方式来管理
学习目标
- 能够安装ansible服务器和客户端
- 能够定义ansible主机清单进行服务器分组
- 能够使用hostname模块修改主机名
- 能够使用file模块做基本的文件操作
- 能够使用copy模块把文件拷贝到远程机器
- 能够使用fetch模块把文件从远程拷贝到本地
- 能够使用user模块管理用户
- 能够使用group模块管理用户组
- 能够使用cron模块管理时间任务
- 能够使用yum_repository模块配置yum
- 能够使用yum模块安装软件包
- 能够使用service模块控制服务的启动,关闭,开机自启动
- 能够使用script模块在远程机器上执行本地脚本
- 能够使用command与shell模块远程执行命令
- 能够编写playbook实现httpd
- 能够使用roles实现lamp
一、认识自动化运维
问题:
假设我要去1000台服务上做一个操作(如nginx服务器修改配置文件里的某一个参数), 下面两种方法缺点明显:
-
按传统的方法, 一台连着一台服务器的ssh上去手动操作。
缺点:
-
效率太低。
-
-
写个shell脚本来做。
缺点:
-
管理的机器平台不一致,脚本可能不具备通用性。
-
传密码麻烦(在非免密登录的环境下, 需要expect来传密码)
-
效率较低,循环1000次也需要一个一个的完成,如果用
&
符放到后台执行,则会产生1000个进程。
-
{代码} &
自动化运维: 将日常IT运维中大量的重复性工作,小到简单的日常检查、配置变更和软件安装,大到整个变更流程的组织调度,由过去的手工执行转为自动化操作,从而减少乃至消除运维中的延迟,实现“零延时”的IT运维。
自动化运维主要关注的方面
假如管理很多台服务器,主要关注以下几个方面:
-
管理机与被管理机的连接(管理机如何将管理指令发送给被管理机)
-
服务器信息收集 (如果被管理的服务器有centos7.5外还有其它linux发行版,如suse,ubuntu等。当你要做的事情在不同OS上有所不同,你需要收集信息,并将其分开处理)
-
服务器分组(因为有些时候我要做的事情不是针对所有服务器,可能只针对某一个分组)
-
管理内容的主要分类
-
文件目录管理(包括文件的创建,删除,修改,查看状态,远程拷贝等)
-
用户和组管理
-
cron时间任务管理
-
yum源配置与通过yum管理软件包
-
服务管理
-
远程执行脚本
-
远程执行命令
常见的开源自动化运维工具比较
-
puppet(拓展)
基于ruby语言,成熟稳定。适合于大型架构,相对于ansible和saltstack会复杂些。
-
saltstack(拓展)
基于python语言。相对简单,大并发能力比ansible要好, 需要维护被管理端的服务。如果服务断开,连接就会出问题。
-
ansible
基于python语言。简单快捷,被管理端不需要启服务。直接走ssh协议,需要验证所以机器多的话速度会较慢。
二、ansible
ansible是一种由Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
特点:
-
部署简单
-
默认使用ssh进行管理,基于python里的paramiko模块开发
-
管理端和被管理端不需要启动服务
-
配置简单,功能强大,扩展性强
-
能过playbook(剧本)进行多个任务的编排
ansible环境搭建
实验准备: 三台机器,一台管理,两台被管理
-
静态ip
-
主机名及主机名互相绑定
-
关闭防火墙, selinux
-
时间同步
-
确认和配置yum源(需要epel源)
实验过程:
第1步: 管理机上安装ansible,被管理节点必须打开ssh服务.
# yum install epel-release
# yum install ansible
# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
#会有很多python信息.
第2步: 实现m01对其他服务器的免密登录,只在master上做。(如果这一步不做,则在后面操作agent时都要加-k参数传密码;或者在主机清单里传密码)**
#查看之前的免密指令
fenfa.sh
配置文件
#查找所有非空行和非以 # 开头的注释行
egrep -vn '^$|#' /etc/ansible/ansible.cfg
10:[defaults]
327:[inventory]
340:[privilege_escalation]
346:[paramiko_connection]
370:[ssh_connection]
431:[persistent_connection]
445:[accelerate]
460:[selinux]
469:[colors]
485:[diff]
#将下面2行的注释取消
修改配置文件关闭主机Host_key_checking
修改配置文件开启日志功能
**第3步: 在m1上主机清单 什么是主机清单: 让ansible管理的节点的列表. ansible默认读取在/etc/ansible/hosts文件,并非/etc/hosts.
未来实际使用中一般我们会把主机清单文件存放在指定的目录中,运行ansible的时候通过-i选项指定主机清单文件即可
m1# vim /etc/ansible/hosts
[web]
172.16.1.7
[nfs]
172.16.1.31
[backup]
172.16.1.41
m1# ansible -m ping web
172.16.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
m1# ansible all -m ping
服务器分组
ansible通过一个主机清单功能来实现服务器分组。
Ansible的默认主机清单配置文件为/etc/ansible/hosts.
示例:
[nginx] 组名
apache[1:10].aaa.com 表示apache1.aaa.com到apache10.aaa.com这10台机器
nginx[a:z].aaa.com 表示nginxa.aaa.com到nginxz.aaa.com共26台机器
10.1.1.[11:15] 表示10.1.1.11到10.1.1.15这5台机器
示例:
[nginx]
10.1.1.13:2222 表示10.1.1.13这台,但ssh端口为2222
示例: 定义10.1.1.12:2222这台服务器的别名为nginx1
nginx1 ansible_ssh_host=10.1.1.13 ansible_ssh_port=2222
示例: 没有做免密登录的服务器可以指定用户名与密码
不推荐,推荐先配置密钥认证,然后管理
[web02]
web2 ansible_ssh_host=172.16.1.7 ansible_user=root ansible_password=1 ansible_port=22
示例: 利用别名来分组 web01 web02 域名.
nginx1 ansible_ssh_host=10.1.1.13 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass="123456"
nginx2 ansible_ssh_host=10.1.1.12
[nginx]
nginx1
nginx2
#子组
[db]
172.16.1.51
[data:children]
web1
nfs
db
小结:**
主机清单的作用: 服务器分组。
主机清单的常见功能:
-
可以通过IP范围来分, 主机名名字的范围来分
-
如果ssh端口不是22的,可以传入新的端口。
-
没有做免密登录,可以传密码。
总结
Ansible 的无代理架构意味着不需要在被管理的节点上安装任何专门的代理软件。它通过 SSH与被控节点通信,实现任务的执行和数据的传输。
优点:
简化部署:无需在每个被控节点上安装和维护代理程序,减少运维工作量。
提高安全性:减少了潜在的攻击面,因为不需要开放额外的端口或运行额外的服务。
节省资源:避免了代理软件占用系统资源的问题。
基于 SSH
Ansible 通过 SSH 协议与被控节点进行通信,这使得它能够在大多数类 Unix 系统(如 Linux、BSD、macOS)上无缝运行。同时,Ansible 也支持 Windows 主机,通过 PowerShell 或 WinRM 进行管理。
优势:
广泛兼容性:支持多种操作系统,无需额外配置。
安全性高:利用现有的 SSH 安全机制,确保数据传输的机密性和完整性。
如果ping不同,会爆红
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)