理论讲解
step 1
为什么用它?提高效率。ansible可为多台服务器进行管理,自动部署服务,专为Unix系统开发的自由开源的配置和自动化工具。
step 2
温馨提示:优点太多,就不一 一介绍完啦!
1、 部署简单 基于Python开发,进行二次开发相对较易,类似于saltstack和Puppet,但无需安装客户端程序。
2、 管理模式简单、功能强、高扩展性 使用SSH和节点通信。无需客户端,轻量级,更强的远程命令执行操作。
工具集
ansible是基于模块工作,本身没有批量部署的能力。批量部署的是ansible所运行的模块,或第三方程序通过API接口调用,ansible提供一种框架。主要包括:
(1)、plugins:连接插件,模块功能补充,负责和被监控端实现通信;
(2)、host inventory:指定管理的主机;
(3)、modules:执行命令的模块,核心模块、自定义模块;
(4)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务
(5)、API:供第三方程序通过API接口调用(进行二次开发,扩展新功能)
ansible的工作机制
Ansible 在管理端将 Ansible 模块通过 SSH 协议送到被管理端执行。
ansible的命令参数
anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]
参数 功能
-v: 详细模式,如果执行成功,输出详细结果
-i :指定host文件路径,默认在/etc/ansible/hosts
-f:-forks=NUM NUM默认是整数5,指定fork开启同步进程的个数
-m: 指定使用的module名称,默认command模块
-a: 指定模块的参数
-k: 提示输入SSH密码,而不是使用基于ssh密钥认证
-sudo: 指定使用sudo获取root权限
-K: 提示输入sudo密码
-u: 指定移动端的执行用户
-C: 测试命令执行会改变什么内容,不会真正的去执行
Ansible安装
安装
1)通过yum安装Ansible
创建yum仓库文件(可以手动编辑,我习惯脚本的方式编辑)
cat >inventory.repo <<E
[inventory]
name=inventory
baseurl=file:///mnt
gpgcheck=0
E
挂载ansible镜像
执行安装:yum -y install ansible
2)验证安装
3) 创建SSH免交互登录
创建密钥对
ssh-keygen -t rsa
上传公钥到服务端
ssh-copy-id 192.168.8.20
ssh-copy-id 192.168.8.30
验证免密登录:
Ansible案例一:
要求:使用 Ansible对两台节点服务器完成以下任务:
- Ansible本地服务器创建YUM仓库文件,使用Ansible命令复制仓库文件到节点服务器
先在ansible文件创建主机组
vim /etc/ansible/hosts
编辑-行尾添加如下内容:
- 安装Apache并启动服务
安装命令: - 启动:
- 查看Apache的状态
- 更改主机192.168.8.20的主机名为shuai
- 查看所有节点服务器是否能ping通
- 创建zhangsan用户,密码123456(其他选项可根据需要添加)
- 总结,有三种颜色:红、黄、绿,分别代表:异常;执行命令正常,对目标主机状态有改变;执行命令正常,对目标主机状态无改变
因为,目标主机没有/aaa目录,所以返回异常提示信息failed(失败),异常颜色
Ansible案例二:
要求:
(1)使用playbook更改web服务器的默认端口为8080
(2)通过角色为192.168.8.139主机安装mariadb
推荐步骤:
一、使用playbook更改web服务器的默认端口为8080。
1)用yum模块安装httpd服务(被管理主机必须挂载系统镜像,有yum仓库)
如果管理特定主机,参数输入特定主机ip地址。
[root@localhost yum.repos.d]# ansible 192.168.8.136 -m yum -a “name=httpd state=present”
2)编辑ansible的playbook文件,并检查语法,内容如下:
注意:“-”代表项;通过冒号“:”分隔键和值;文件整体以“—”开始“…”结尾;所有“-”和“:”后面均空格,而且缩进必须对齐。
无错误输出,证明语法正确。预测试:以下是测试成功提示
[root@localhost yum.repos.d]# ansible-playbook -C /etc/ansible/httpd.yml
执行:
验证:远程登录web服务器,查看端口已被改为8080
二、通过角色为192.168.8.139主机安装mariadb
(1) 被管理主机配置yum源(方法同上,略)
(2) 配置数据库角色
创建角色目录
进入mariadb角色文件夹的tasks
cd /etc/ansible/roles/mariadb/tasks
vim main.yml
进入mariadb角色文件夹的handlers
cd /etc/ansible/roles/mariadb/handlers
vim main.yml
进入mariadb角色文件夹的files,确保其下有my.cnf配置文件(ansible本地安装完mariadb,复制my.cnf到此目录)
#cp /etc/my.cnf /etc/ansible/roles/mariadb/files
进入/etc/ansible目录创建.yml配置文件
预测试:以下是测试成功提示
(3) 执行配置文件
[root@localhost ansible]# ansible-playbook /etc/ansible/mariadb.yml
(4) 在管理端上验证,使用test数据库用户能否登录mariadb,数据库是否存在
报错解决:
1)Ansible安装httpd提示如下:
不能打开,yum 仓库文件,经查,发现被管理端没有挂载光盘。
解决方案:挂载光盘,清理缓存,重试
2)使用playbook更改web服务器的默认端口为8080。语法检查报错
解决方案:“-”代表项;通过冒号“:”分隔键和值;文件整体以“—”开始“…”结尾;所有“-”和“:”后面均空格,而且缩进必须对齐。发现handlers的左边空格没对齐3)使用playbook更改web服务器的默认端口为8080,报错
翻译:192 . 168 . 8 . 136
“已更改”:否,
“消息”:“无法通过ssh连接到主机:代理承认使用密钥签名失败。\ r \拒绝授权(publickey,gssapi-keyex,gssapi-with-mic,password)。\r\n ",
“不可达”:真的
解决方案:先查看ssh是否可以远程登录被管理端,发现没有问题,也未检查出其他相关问题,重试一次,成功!是不是很奇怪,确实出现了这种问题,重试就解决。