ansible
ansible是什么?
ansebile是运维自动化管理工具,他可以让你通过这个软件在几百台电脑上同时部署一个软件,配置好,并启动它
有人可能会说我们也可以写脚本进行部署,为什么还要用ansible呢? 因为ansible支持一些优秀的特性,比如“幂等性”,它可以让你重复在多台机器上执行多次,如果机器安装好某个服务,它不会重复在机器上再次安装,例如,如果你要copy一个文件,你在所有机器上已经执行过一次了,如果使用ansible再次执行相同的任务,ansible会自动判断“当前状态”是否与“目标状态”一致,如果一致,则不会进行任何操作,如果不一致,那么就将“当前状态”变成“目标状态”。“幂等性”可以保证我们重复执行的操作,得到的结果是一样的。ansible的第二大特性就是不需要再客户端安装任何的agent,ansible只需要依赖ssh就可以正常工作
基础配置
我们可以通过Yum来安装ansible,ansible在epel源,安装时要先配好epel源
[root@node3 ~]#yum install ansible
因为ansible需要依赖ssh所以我们要对管理的节点做密钥认证,这样管理的时候就不需要重复去输入密码了
[root@node3 ~]#ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:gN9JyEXHQJmnJqnpknaqzhqb5iyMBim1BQa35I7ZqLI root@node3 The key's randomart image is: +---[RSA 2048]----+ |..o o==. | | +o. o oo.o | | .o.. +..o | | *. ..o+o. | |+ooo o.oS | |= . o | |O o | |*O+ o | |EB.+ | +----[SHA256]-----+
将主机的私钥copy到各节点(这里只演示了一个主机的)
然后在去定义主机清单(即你要管理的主机)
[root@node3 ~]#vim /etc/ansible/hosts
定义好以后我们就可以管理了
Usage: ansible <host-pattern> [options]
常用模块
copy
user模块
file模块
command模块
shell模块
yum模块
认识这些模块后,我们就可以在ansible写一些简单的playbook了
hosts:指定要对那些主机做操作
tasks: 指定要用哪个模块做那些操作
name: 就是给这个操作取个名字
handlers用法
handlers 指明那些任务被调用,经常配合notify 使用
例如:我想改一下Nginx的端口号,当我在配置文件中改完后,我用ansible去部署到每台主机,因为ansible的幂等性,它只会去把被控制的主机的文件改掉,而不去重启服务,这样就会造成服务不会去修改端口号,这里我们就要用到触发器
tags
你写了一个很长的playbook,其中有很多任务,你能只是想执行其中的一部分而已,这个时候我们可以借助tags打标签的形式完成
例如:
现在每个tasks上面都有了标签,如果当我们想执行tasks2的时候只需要
vars
在ansible中使用变量,能让我们的工作变得更加灵活。在ansible中,变量的定义有好多种
变量名应该有字母,数字,下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名
在playbook中定义变量,
例:
testvar1为变量名,值是testfile。然后在定义的任务中我们就可以调用变量了
roles
我们知道ansible可以自定义模块,便于自己或他人调用,它也有一个特有的名称叫做角色。每个角色对应的服务可能不太一样,比如mysql,httpd,nginx,memcached。虽然每个角色(模块)的功能不一样,但是他们都以特定的目录结构进行组织,相关说明如下所述:
案例:
1 创建初始化目录
mkdir -pv ./{nginx,tomcat,redis,memcached}/{files,templates,tasks,handlers,vars,meta,default}
2 编写Nginx角色
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/files/index.html
<h1>this is Nginx server</h1>
最后运行
ansible-playbook nginx.yaml