基础知识:
ansible 简介
ansible 是个什么东西呢?基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2 模板语言,更强的远程命令执行操作.这个工具的目标有这么几项:自动化部署 APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理.所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已.通俗的说就是批量的在远程服务器上执行命令 .当然,最主要的是它是基于 paramiko 开发的.这个 paramiko 是什么呢?它是一个纯 Python 实现的 ssh 协议库.因此 fabric 和 ansible 还有一个共同点就是不需要在远程主机上安装 client/agents,因为它们是基于 ssh 来和远程主机通讯的.
ansible 特点
轻量级,无需在客户端安装 agent,更新时,只需在操作机上进行一次更新即可.
批量任务执行可以写成脚本,而且不用分发到远程就可以执行.
使用 python 编写,维护更简单,ruby 语法过于复杂.
支持 sudo.
ansible 提供的框架
连接插件 connection plugins:负责和被监控端实现通信.
host inventory:指定操作的主机,是一个配置文件里面定义监控的主机.
各种模块核心模块,command 模块,自定义模块.
借助于插件完成记录日志邮件等功能.
playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务.
类似的自动化运维工具有很多常用的还有
Puppet:基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱.
SaltStack:基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YMAL,使得配置脚本更简单.
ansible 安装与使用
1,ssh 的安装与配置
1)安装
相关命令:
sudo apt-get install openssh-server
2)配置
相关命令:
su -
ssh localhost
cd .ssh
ssh-keygen // 生成密钥
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名 @主机名
注意:可能会遇到如下问题
解决:
编辑 sshd_config 文件,我们输入:vim /etc/ssh/sshd_config
默认不允许 root 登录 SSH,所以我们要进行相应设置,替换为如下:
# Authentication:
LoginGraceTime 120
#PermitRootLogin without-password
PermitRootLogin yes
StrictModes yes
重启 ssh 服务,我们输入: /etc/init.d/ssh restart
2,Ansible 的安装
centos6.8 的相关命令:
#yum install http: //mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
#yum install ansible
ubuntu 的相关命令:
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
注意:只要在一个节点安装即可.
3,编辑 hosts 文件
相关命令与内容:
vim /etc/ansible/hosts
------------------------------ 内 容 ------------------------------
[web] // 组名自定义
slave1 // 用相应主机名代替 IP
slave2
------------------------------ 内 容 ------------------------------
4,连通测试
1)查看 web 组中的主机
相关命令:
ansible web --list-hosts
2)测试是否连通
相关命令:
ansible web -m ping
5,常用操作
1)创建文件夹
参数说明:
-u 指定运行的用户 (默认为 root)
-s 使用 sudo 权限
相关命令:
用户和权限
ansible spark_cluster -a "mkdir /usr/xx/xx" -s -u userName
2)复制
将本地文件 / 文件夹发送到远程主机, ansible 的 copy 模块是围绕 rsync 的包装,所以它是增量而不是全量的拷贝.
参数说明:
src 本地文件 / 文件夹位置
dest 发送到远程主机的位置
owner(可选) 所属用户
group(可选) 所属用户组
mode(可选) 权限
将本地文件 / etc/ansible/ansible.cfg 复制到远程服务器
相关命令:
ansible web -m copy -a "src="http://www.h3399.cn/uploads/body/pic3.zhimg.com/50/v2-4fb9a5f36ed6685bc827ce14d5df8c6b_hd.jpg">
3)批量执行脚本
在远程批量执行本地脚本
在装有 ansible 的节点执行内容:
vim hello.sh
------------------------------ 内 容 ------------------------------
echo "hello world!!!"
------------------------------ 内 容 ------------------------------
ansible spark_cluster -m script -a "hello.sh"
来源: http://www.bubuko.com/infodetail-2466301.html