要让ansible管理业务里的主机
1.得先知道,有哪些主机
用IP地址,用主机名
2.知道了有哪些主机以后,精细、细分管理
主机要用某些办法,分组管理
在ansible里,要用一个东西:清单->inventory
inventory
这个东西的存在形式
ansible是为了人方便使用,为了简单
所以,inventory,就是个文本文件
最简单的写法
每行也一个,写很多行,可以写IP地址,也可以写主机名(需要DNS)
进一步,进行简单的分组
按照人的思路,头上加个"标题",在这个标题下写很多行
例
[组名]
列出主机
分组很灵活,并不强制每个主机必须在某一个组里
任意分组之间,没有冲突,完全看需求
比如:可以同时按照多种条件去同时写很多分组
1)按照服务器的类型分:web服务器、db服务器、storage服务器......
2)同时,有可以按照位置:A机房的一组,B机房的一组
再比如,可以分组套分组
在inventory文件,先按照其他条件分好了组
然后,以"组名"为成员,再分组
如果是套着写,通常写在文件末尾
不论是分组,还是成员,写法也可以灵活
按照上面写的,通常是IP或主机名
能不能写范围?
可以写匹配范围,比如字符串的匹配,比如IP地址的网段和范围
servera,serverb......serverf
192.168.1.1......192.168.1.200
上面这种,就可以用范围表示,比如用 [ ]
假设,写好了inventory文件,怎么查看?
1)直接看文件
但是,如果这个文件内容特别多,写的很长......
2)用ansible的命令去看,给你列出,比如某个组有哪些主机
ansible 组名 --list-hosts
举个例子......
比如,有以下主机:
servera 192.168.1.101
serverb 192.168.1.102
serverc 192.168.1.103
可以分组
[webserver] 下面服务器,运行web,作为web服务器
serverb
[dbserver] 下面这个主机运行了数据库,作为dbserver
servera
[storageserver] 下面这个服务器,是存储服务器
serverc
[servers] 包含所有的服务器,可以写范围
servera
serverb
serverc
或写成
server[a:c]
[discuz:children] 按照业务分组套分组
webserver
dbserver
以上分组,是为了业务和用途
在对不同目标,做不同操作时,调用不同分组
最后,上面咱知道了inventory怎么写,问题来了,这个文件放哪儿?
说直白点
将来你想用哪个目录作为ansible工作目录,那就把inventory放哪......
比如:建立一个目录,专用于ansible,/var/zidonghua
就可以在/var/dizonghua/目录下,vim编辑一个叫做inventory的文件
可以在不同用途的工作目录下,写不同的inventory,然后各自执行
关于ansible的配置文件
1.并不是像其他服务一样用一个统一的守护进程或服务
于是,这个东西配置文件,可以同时出现在不同位置
2.ansible配置文件
ansible.cfg
位置:
1)/etc全局使用的
2)每个Linux用户的主目录下,都可以放一个
3)在每个ansible的工作目录里,都可以放一个
3.用途以及相关原因
1)"越精确,范围越小,越优先"
每个工作目录,优先使用本目录下的配置文件
2)ansible可以根据不同的任务分类,使用完全不同的工作目录
这些工作目录之间也可以相配合补充
3)还可以想更多办法,优化、组织ansible的工作目录
可以目录套目录
这些目录,还可以分别打包
4.配置文件的内容
1)管理机要写明,连接到客户机时,要用客户机的哪个用户进行ssh登录
以及,登录时候,要不要应答密码
通常,在管理机和客户机之间,提前做好ssh免密登录
需要注意
为了保证服务器安全,通常是使用普通账户进行ssh访问
然后,再想办法切换到root账户,做管理性的操作
2)ansible就是为了自动化做管理性配置,于是,通常要切换到root用户
在客户机上,要切换到root,再进行后续工作
要指明,是否要切换root,是否要密码
用什么办法切换(su?sudo?)
通常使用sudo方法,但是,需要在客户机提前配置好sudo
-m 的运用
接下来
已经有了主机的清单,要管理谁
也有了配置文件,连接以及切换root的方法
可以去让ansible执行"操作"
ansible这个东西,本身,并不一定非得写剧本才能操作
有很多一次性操作,可以像执行命令一样,直接做
于是:运行临时命令
对于临时命令,不一定要保证"幂等性"
通常,会有哪些操作
比如:ping测试,收集客户机当前的信息、状态
举个栗子
#ansible servera -m ping
对servera这台主机,发起一个ansible的临时操作
这个操作,调用了一个模块叫做ping
并不是说,用ansible执行ping命令......
servera,SUCCESS成功,这次操作本身成功了
但是,下面,changed是false,不是说操作失败或者写错东西
而是说,这一次操作,没有造成客户机的状态的变更,和之前没变化
于是,有了一个问题:
我哪知道ansible有啥模块?我上哪知道模块咋用?
怎么解决
看内置的官方文档
查看当前内置有哪些模块
ansible-doc -l
找到目标模块,查看这个模块怎么用
ansible-doc 模块名