ansible笔记(1)在centos中安装ansible
ansible笔记():ansible的基本概念
一些基础概念
ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任何配置管理工具,不要害怕,看完这篇文章,你自然会对ansible有所了解。 ansible能做什么? 正如其他配置管理工具一样,ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。 比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。 比如:将某个文件一次性拷贝到100台服务器上。 比如:每当有新服务器加入工作环境时,你都要为新服务器部署redis服务,也就是说你需要经常重复的完成相同的工作。 这些场景中我们都可以使用到ansible。 看到这里,你可能会说,我编写一些脚本,也能够满足上面的工作场景,为什么还要使用ansible呢?没错,使用脚本也可以完成这些工作,不过我还是推荐你使用ansible,因为ansible支持一些优秀的特性,比如"幂等性","幂等性"是什么意思呢?举个例子,你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录中是否已经存在此文件,当你使用ansible完成这项任务时,就非常简单了,因为如果目标主机的对应目录中已经存在此文件,那么ansible则不会进行任何操作,如果目标主机的对应目录中并不存在此文件,ansible就会将文件拷贝到对应目录中,说白了,ansible是"以结果为导向的",我们指定了一个"目标状态",ansible会自动判断,"当前状态"是否与"目标状态"一致,如果一致,则不进行任何操作,如果不一致,那么就将"当前状态"变成"目标状态",这就是"幂等性","幂等性"可以保证我们重复的执行同一项操作时,得到的结果是一样的,这种特性在很多场景中相对于脚本来说都有一定优势,单单这样说,可能并不容易理解,当你在后面真正使用到时,自然会有自己的体会,所以此处不用纠结,继续向下看。 如果你了解过其他的配置管理工具,比如puppet或者saltstack,那么你一定知道,如果我们想要使用puppet管理100台主机,就要在这100台主机上安装puppet对应的agent(客户端代理程序),而ansible则不同,ansible只需要依赖ssh即可正常工作,不用在受管主机上安装agent,也就是说,只要你能通过ssh连接到对应主机,你就可以通过ansible管理对应的主机。 经过上述描述,我想你应该对ansible已经有了一个初步的、大概的印象: ansible是一个配置管理工具,可以帮助我们完成一些批量工作或者重复性工作,ansible通过ssh管理其他受管主机,并且具有一些特性,比如幂等性、剧本、模板,角色等,我们会慢慢的介绍这些特性以及怎样使用ansible。 怎样使用ansible呢?我们通过一条简单的命令开始认识它吧,命令如下 注:执行如下命令前,需要进行一些配置,如下命令才能正常执行,后文中会对这些操作进行描述,此处先行略过 ansible 10.11.0.212 -m ping 上述命令表示,使用ansible去ping 10.11..212这台主机,很容易理解吧。 "ping"是ansible中的一个模块,这个模块的作用就是ping对应的主机,ansible调用ping模块,就相当于我们手动执行ping命令一样,上述命令中的"-m ping"表示调用ping模块,当然,ansible肯定不止这一个模块,它有很多模块,不同的模块可以帮助我们完成不同的工作,你应该已经猜到了,我们在实际使用时,会使用到各种模块,ansible是基于这些模块完成实际任务的。 刚才,我们使用了一个简单的ansible命令作为示例,但是如果想要让上述命令正常执行,则必须同时满足两个最基本的条件,如下 条件一、ansible所在的主机可以通过ssh连接到受管主机。 条件二、受管主机的IP地址等信息已经添加到ansible的"管理清单"中。 之前说过,ansible不用在受管主机上安装agent,但是它需要依赖ssh,所以,条件一并不难理解,但是,在满足条件一的情况下,还要同时满足条件二,也就是说,即使ansible所在的主机能够通过ssh连接到受管主机,仍然需要将受管主机的IP地址、ssh端口号等信息添加到一个被称作为"清单(Inventory)"的配置文件中,如果对应的主机信息在ansible的"清单"中不存在,那么ansible则无法操作对应主机,后文会详细的介绍怎样配置ansible的"清单"。 一些基础配置
我们首先要做的就是安装ansible。 但是在安装之前,先介绍一下我的演示环境。 我有三台主机,IP地址分别如下
10.11.0.210
10.11.0.212
10.11.0.215 我将主机10.11.0.(后文中简称210)作为配置管理主机,所以我们需要在210上安装ansible,剩下的主机作为受管主机,主机的操作系统版本为centos7. 我使用yum源的方式安装ansible,因为安装ansible需要epel源,所以我配置了阿里的epel源和centos7系统镜像源,yum源配置如下 # pwd
/etc/yum.repos.d # cat aliBase.repo
[aliBase]
name=aliBase
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever # cat aliEpel.repo
[aliEpel]
name=aliEpel
baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/
enabled=
gpgcheck= yum源配置完成后,安装ansible yum install ansible -y 此时yum源中对应的版本为ansible 2.5. 安装完毕,不过别急,我们还需要做一些其他的基本配置,在介绍ansible的概念时,我们说过,如果想要通过ansible管理某主机,还需要将对应主机的信息添加到ansible的"配置清单"中,清单中没有的主机无法通过ansible进行配置管理,现在,我们就来介绍一下ansible的"清单",当安装完ansible以后,ansible会提供一个默认的"清单",这个清单就是/etc/ansible/hosts,打开此文件,你会看到一些配置示例,没错,还是熟悉的配方,还是熟悉的味道,此文件使用的就是INI的配置风格,那么,我们一起来看看怎样进行配置吧。 以我们的演示环境为例,我们想要通过ansible主机管理60主机,所以,最直接的方式就是将它的IP地址写入到/etc/ansible/hosts文件中,配置如下,在/etc/ansible/hosts文件底部写入如下IP 10.11.0.212 就是这么简单,那么,完成上述配置,就能够通过ansible主机管理10.11.0.212这台主机了吗?我们来动手试试,看看会发生什么情况。 执行之前的示例命令:ansible 10.11.0.212 -m ping 使用ansible去ping主机10.11.0.,返回结果如下
[root@node1 ~]# ansible 10.11.0.212 -m ping
The authenticity of host '10.11.0.212 (10.11.0.212)' can't be established.
ECDSA key fingerprint is SHA256:Q2YUBNf0DmqBgD9wso2dXiVhKZmJjwBnW08ul4o05ag.
ECDSA key fingerprint is MD5:e8:::0d:0a:2e:::d9:9f:dc:a1:a3:9c:6e:.
Are you sure you want to continue connecting (yes/no)? yes
10.11.0.212 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '10.11.0.212' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
} 从命令的返回信息中可以看到,10.11..212不可达,也就是说,ansible无法通过ssh连接到主机212 返回上述信息是正常的,因为ansible主机并不知道10.11.0.212这台主机的用户名和密码,所以ansible无法通过ssh连接到它。 所以,我们还需要在清单中,配置10.11.0.212主机的ssh信息,才能够进行正确的进行连接,修改清单文件,在之前的主机IP后加入ssh的相关配置信息,配置示例如下: 10.11.0.212 ansible_port= ansible_user=root ansible_ssh_pass=pass ansible_port 用于配置对应主机上的sshd服务端口号,在实际的生产环境中,各个主机的端口号通常不会使用默认的22号端口,所以用此参数指定对应端口。 ansible_user 用于配置连接到对应主机时所使用的用户名称。 ansible_ssh_pass 用于配置对应用户的连接密码。 所以,上图中的配置表示,10.11..212这台主机的sshd服务监听在22号端口,当ansible通过ssh连接到主机212时,会使用主机212的root用户进行连接,主机212的root用户的密码为pass 好了,主机212的ssh信息已经配置完毕,我们再来尝试一下,看看之前的命令能不能正常执行,如下 [root@node1 ~]# ansible 10.11.0.212 -m ping
10.11.0.212 | SUCCESS => {
"changed": false,
"ping": "pong"
} 可以看到,上述命令已经正常执行了,ansible主机成功的ping通了10.11.0.,从此以后,我们就可以通过ansible主机,管理10.11.0.212这台主机了。 其实,为了更加方便的使用,ansible还支持对主机添加别名,当主机存在别名时,我们可以通过主机的"别名"管理对应主机。 比如,我们想要将10.11.0.212这台主机的别名命名为node212,那么,我们在配置清单时,可以进行如下配置: node212 ansible_host=10.11.0.212 ansible_port= ansible_user=root ansible_ssh_pass=pass 如上图所示,当为主机配置别名时,主机的IP地址必须使用anible_host关键字进行指明,否则ansible将无法正确的识别对应的主机。 主机的别名配置完成后,则可以使用主机的别名管理对应主机,示例如下。 [root@node1 ~]# ansible node212 -m ping
node212 | SUCCESS => {
"changed": false,
"ping": "pong"
} 不过,如果你只使用了上述方式配置了主机,则无法通过主机的IP进行管理了,除非你同时使用了别名的方式与IP的方式配置两个主机条目。 注意:上述配置参数都是ansible2.0版本以后的写法,.0版本之前,应遵从如下写法 ansible_port应该写成ansible_ssh_port ansible_user应该写成ansible_ssh_user ansible_host应该写成ansible_ssh_host 因为当前演示环境的ansible版本为2.,所以,我们使用新的写法进行演示,.5版本同时也兼容之前的语法。 上述参数,其实都是为了创建ssh连接所使用的,而说到ssh,我们都知道,创建ssh连接时,可以基于密码进行认证,也可以基于密钥进行认证,而在生产环境中,为了提高安全性,我们通常会基于密钥进行ssh认证,甚至会禁用密码认证,那么,当ansible主机需要与受管主机建立ssh连接时,能够基于密钥进行认证码?必须能的。 其实,在实际的使用环境中,我们通常会在"配置管理机(ansible主机)"中生成密钥,然后通过公钥认证的方式连接到对应的受管主机中. 那么,我们就在ansible主机中生成密钥,并进行相应的配置吧。 首先,生成默认格式的密钥对,私钥与公钥。 # ssh-keygen 然后将生成的公钥加入到10.11.0.212的认证列表
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.11.0.212 好了,公钥认证的相关操作配置完成,此刻,我们已经可以通过ansible主机免密码连接到主机60中了。 因为配置了密钥认证,所以可以实现免密码创建ssh连接,既然已经能够免密码创建ssh连接,那么在配置"主机清单"时,就没有必要再提供对应主机的用户名与密码了,所以,在完成了密钥认证的相关配置后,我们可以将清单中的配置精简为如下格式。
10.11.0.212 ansible_port= 或者使用别名的格式 node212 ansible_host=10.11.0.212 ansible_port= 当然,如果你的受管服务器中的sshd服务使用了默认的22号端口,上述配置中的ansible_port也是可以省略的,为了方便演示,演示环境中的所有受管主机均使用默认的sshd端口号。 如果你的ansible主机上同时存在多对密钥,有可能需要通过不同的密钥连接不同的受管主机,这个时候,你可以通过ssh-agent帮助我们管理密钥,如果你还不了解ssh-agent,那么可以参考如下文章: 如果你不想使用ssh-agent管理密钥,也可以通过ansible_ssh_private_key_file参数,指定连接对应主机时所使用的私钥。 在今后的演示中,默认使用密钥认证的方式连接到对应主机,我会提前配置好各个受管主机的密钥认证,后文中将不再对密钥认证的配置过程进行描述。
# vim /etc/ansible/ansible.cfg
host_key_checking = False
ansible笔记(1)在centos中安装ansible的更多相关文章
- Docker学习笔记之-在CentOS中安装Docker
上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...
- CentOS 7安装Ansible
在CentOS下安装Ansible非常的简单,但需要注意一下几点: 1.为了简单建议使用yum的epel源安装,毕竟没什么模块需要自己定制的,如果非要指定版本,可以指定不同的版本,下面会讲. 2.母机 ...
- 在centos中安装jenkins master测试环境
在centos中安装jenkins 1)安装目录 pwd (/home/AAA) 2)检查java是否安装 [AAA@Centos_AAA jenkins]$ java -version j ...
- centos中安装chromium和flash
安装环境:centos 6.5 64位 在centos中安装chromium 安装Google源 cd /etc/yum.repos.d/ sudo wget http://people.CentOS ...
- Centos中安装Sublime编辑器
Centos中安装Sublime编辑器 1.从官网下载相应操作系统的下的安装包(http://www.sublimetext.com/2),这里下的是linux下的安装包 2.解压安装包,并将其放在/ ...
- centos中安装tomcat6
在centos中安装tomcat6 1)通过yum自动安装tomcat和dependences root@Centos_AAA ~]# yum install tomcat6 [root@Cent ...
- 在Centos中安装HustOJ实验记录
hustoj是目前使用最广泛的刷题平台,自建平台是编程教学中重要一环,教,学,测,反思形成闭合回路.目前利用现有的服务器资源,建成了开高开源code中心,一个刷题系统,六月再建一个私有云,私有云不仅是 ...
- centos中安装tomcat
1.先保证centos中安装了jre的环境. 2.上传tomcat的压缩包到root根目录. 3.切换到根目录 输入命令cd ~ , 然后 ll , 查看上传情况: 4.选中复制压缩文件,输入解压命令 ...
- centos下安装ansible自动化工具(超详细,包含基本使用)
ansible官网:https://www.ansible.com 众所周知,ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef ...
随机推荐
- CodeForces - 867E Buy Low Sell High (贪心 +小顶堆)
https://vjudge.net/problem/CodeForces-867E 题意 一个物品在n天内有n种价格,每天仅能进行买入或卖出或不作为一种操作,可以同时拥有多种物品,问交易后的最大利益 ...
- SQL Server进阶(十二)函数
概述 函数有且只有一个输入参数和一个返回值,而存储过程没有这个限制: 返回表变量的函数可以当做VIEW或者临时表用在WHERE/HAVING/SELECT/JOIN语句中而存储过程不可以: 存储过程中 ...
- Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架
JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...
- python中的PEP是什么?怎么理解?(转)
PEP是什么? PEP的全称是Python Enhancement Proposals,其中Enhancement是增强改进的意思,Proposals则可译为提案或建议书,所以合起来,比较常见的翻译是 ...
- UE4源码笔记
找编辑器LOG,找相应代码.(改相应LOG 重编译后有反应)GenerateProjectFiles 寻找配置,生成VS文件. 有一些小工具项目默认是没打开的.API宏是较旧的代码,新的代码会设计 ...
- luogu P3721 [AH2017/HNOI2017]单旋
传送门 \(Spaly:\)??? 考虑在暴力模拟的基础上优化 如果要插入一个数,那么根据二叉查找树的性质,这个点一定插在他的前驱的右子树或者是后继的左子树,可以利用set维护当前树里面的数,方便查找 ...
- Tomcat7基于redis的session共享
一,项目需求 因开发人员在登录后台时需要反复认证,tomcat反复切换,所以给运维组提出需求,解决session共享问题. 二,解决方法 环境:基于Centos6.8 Jdk 版本 java ve ...
- Python常用模块之json模块
常用模块: 一个Python文件就是一个模块 import xxx 1. 标准模块,Python自带的,如time/random 2. 第三方模块,如连接mysql,需要安装 3. 自己写的Pytho ...
- Got error 28 from storage engine 解决方法
早上一来,jira点击任何页面都会报错,首先查看服务器的日志 然后服务器首先看了磁盘,果不其然,是根目录的磁盘满了, 然后就一层一层找占用最大的文件 命令: cd /usr du -sh * 找到了文 ...
- mvc中异常页面的设置
参考原文: http://blog.csdn.net/zjlovety/article/details/48734791 这种异常处理就是说,在mvc发生未处理异常时,对用户展示的页面. 第一种能被m ...