Day36
Ansible
环境准备
Ansible简介
Ansible是一款自动化运维工具,基于Python开发
它具有
批量系统配置,批量修改服务器密码
批量程序部署,批量安装软件包
批量运行命令等功能,批量修改配置
产品特色
基于SSH架构,模块丰富,社区活跃,支持自定义模块,支持异构IT架构,部署简单,容易上手。
Ansible原理
控制端主机自带很多模块(模块就是脚本);
ansible通过ssh远程被管理主机,将控制端的模块(脚本)或命令传输到被管理主机;
在被管理端主机执行模块(脚本)或命令,执行不同的模块或命令可以实现不同的功能;
最后ansible退出ssh远程。
绝大多数模块(脚本)都需要参数才能执行成功!!!类似于shell脚本的位置变量!
部署Ansible
准备基础环境
控制节点要求:
域名解析(为了方便后期操作,可以不做)
配置SSH密钥(ansible是基于ssh实现远程控制)
安装Ansible软件
1)Control控制节点
修改/etc/hosts,在文件中手动添加如下内容,修改该文件的目的是做域名解析。
[root@control ~]# vim /etc/hosts #修改文件,手动添加如下内容(不要删除文件原来的内容)
192.168.4.253 control
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
192.168.4.14 node4
192.168.4.15 node5
验证:**[**root@control ~]# ping node1 #可以使用ping命令依次ping所有域名
配置SSH密钥实现免密码登录(非常重要)
Ansible是基于SSH远程的原理实现远程控制,如果控制端主机无法免密登录被管理端主机,后续的所有试验都会失败!!
[root@control ~]# ssh-keygen #生成ssh密钥
[root@control ~]# for i in node1 node2 node3 node4 node5
do
ssh-copy-id $i
done
#拷贝密钥到远程主机
#提示:拷贝密钥到远程主机时需要输入对方电脑的账户密码才可以!!
#拷贝密钥到node1就需要输入node1对应账户的密码,拷贝密钥到node2就需要输入node2对应的密码
警告:如果有任何一台主机远程还需要密码,就不要往下继续操作,后面实验都会失败!!!
验证:
[root@control ~]# ssh node1 #使用ssh命令依次远程所有主机都可以免密码登录[root@node1 ~]# exit #退出ssh远程登录
2)部署Ansible软件(仅Control主机操作)。
[root@control ~]# tar -xf ansible_soft.tar.gz
[root@control ~]# cd ansible_soft
[root@control ansible_soft]# dnf -y install *
被控制节点要求:
-
Ansible默认通过SSH协议管理机器
-
被管理主机要开启SSH服务,并允许控制主机登录
-
被管理主机需要安装有Python
修改配置文件
主配置文件说明:
主配置文件ansible.cfg(主配置文件的内容可以参考/etc/ansible/ansible.cfg)
ansible配置文件查找顺序
首先检测ANSIBLE_CONFIG变量定义的配置文件(默认没有这个变量)
其次检查当前目录下的./ansible.cfg文件
再次检查当前用户家目录下~/ansible.cfg文件
最后检查/etc/ansible/ansible.cfg文件0
1) 修改主配置文件。 [root@control ~]# mkdir ~/ansible [root@control ~]# vim ~/ansible/ansible.cfg [defaults] inventory = ~/ansible/inventory #主机清单配置文件(inventory可以是任意文件名),英语词汇:inventory(清单、财产清单) #forks = 5 #ssh并发数量 #ask_pass = True #使用密钥还是密码远程,True代表使用密码 #host_key_checking = False #是否校验密钥(第一次ssh时是否提示yes/no)
2) 修改主机清单文件(清单文件名必须与主配置文件inventory定义的一致)。 [root@control ~]# vim ~/ansible/inventory [test] #定义主机组(组名称任意) node1 #定义组中的具体主机,组中包括一台主机node1 [proxy] #定义主机组(组名称任意),英语词汇:proxy(代理人,委托人) node2 #proxy组中包括一台主机node2 [webserver] node[3:4] #这里的node[3:4]等同于node3和node4 [database] node5 [cluster:children] #嵌套组(children为关键字),不需要也可