ansible批量部署服务

一.ansible

1.概念
ansible是一个基于Python开发的自动化运维工具!
其功能实现基于SSH远程连接服务!
ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
2.网址:
http://docs.ansible.com/ 官网
3.特点
不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端。
不需要服务端(no servers)。
需要依靠大量的模块实现批量管理。
4.优点:
(1) ansible软件特点:
· 可以实现批量管理/部署
ansible oldboy -m command -a "hostname" 批量执行命令
· 编写剧本-脚本(playbook)---针对重复性的操作
(2) ansible核心功能:
· pyYAML-----用于ansible编写剧本所使用的语言格式(saltstack---python)
· paramiko---远程连接与数据传输
· Jinja2-----用于编写ansible的模板信息(扩展部分)
5.安装:
yum -y install ansible 管理端安装软件
yum -y install libselinux-python 被管理端关闭selinux服务

二.ansible部署

【命令部署】
部署好基于ssh密钥认证管理方式认证环境
(1)创建密钥对
ssh-keygen -t rsa
(2)分发密钥对
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.41
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.31
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7
(3)登陆验证
ssh 172.16.1.41
ssh 172.16.1.31
ssh 172.16.1.7
【脚本部署】
1.批量部署
#!/bin/bash
#create key pair
\rm -f /root/.ssh/id_dsa*
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q
#fenfa key file
for ip in 7 31 41
do
echo "==== fenfa key to host 172.16.1.$ip======================"
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no [email protected]$ip"
echo "=================== fenfa end ==========================="
echo ""
done
2.批量检查
#!/bin/bash
cmd=$1
for ip in 7 31 41
do
echo "====host 172.16.1.$ip info===="
ssh [email protected]$ip "$cmd"
echo "=============================="
echo ""
done

三.配置ansible hosts文件

ansible主配置文件/etc/ansible/ansible.cfg
配置hosts主机文件 vim /etc/ansible/hosts
[root]
172.16.1.7
172.16.1.31
172.16.1.41

四.ansible 命令语法

(1)指定管理单台主机方法
例:ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes"
(2)指定管理主机组
例:ansible KS -m user -a "name=plp group=root"
(3)指定管理所有主机
例:ansible all -m user -a "name=plp group=root"

五.ansible重要的模块项

1.command模块参数
(1) -k ansible基于密码口令管理主机
-m 指定模块
-a 指定动作
例:[[email protected] ~]#ansible 172.16.1.31 -m ping -k
(2)chdir 执行命令前切换到指定目录
例:ansible root -m command -a "chdir=/tmp touch 123.txt"
(3)creates 执行命令前进行判断,有就不执行,没有执行
例:ansible root -m command -a "creates=/tmp/123.txt touch 123.txt"
(4)removes 如果这个参数对应的文件不存在,就不运行command
例:ansible root -m command -a "remove=/tmp/123.txt touch 123.txt"
(5)free_from 可以输入任何命令,除了特殊变量和符号
2. copy模块参数(将数据推送远程主机)
(1)src 源(本地)路径
(2)dest 目标路径
例:ansible KS -m copy -a "src=/tmp/888.txt dest=/tmp"
(3)owner 属主
(4)group 属组
(5)mode 定义文件/目录权限
例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup owner=oldboy group=oldboy mode=600”
(6)backup 以时间戳名做备份
例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup backup=yes”
(7)force 传输内容不同时做覆盖
例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup force=no”
(8)content 替代sec传输时,将文件内容设置为指定值(短点)
remote_src 如果为 False,将搜索源信息在本地/管理及机器上
如果为True,将到远程/目标主机的机器上搜索
默认为false,目前remote_src不支持递归拷贝
例:ansible root -m cpoy -a “content=’my world’ dest=/backup/123.txt”
3.shell 模块参数(执行命令在节点上,万能模块)
例:ansible oldboy -m shell -a "uptime;df -h"
ansible oldboy -m shell -a "/server/scripts/test01.sh"
注意:shell模块运行脚本,需要将脚本推送到远程主机中,需要授权脚本文件为执行权限
4.script模块参数(将本地运行脚本信息在远程主机中进行)
例:ansible root -m script -a "/server/scripts/yum-ipstate.sh"
5.yum模块(yum源安装软件)
(1)name 软件名
(2)state 状态
(3)installed 安装
例:ansible root -m yum -a "name=tree state=installed"
6.service 模块(服务管理)
(1)name 服务名
(2)state 状态
(3)enabled 关闭开启自启
例:ansible root -m service -a "name=iptables state=stopped enabled=yes"
7.file 模块(修改创建文件/目录)
(1)mode 定义文件/目录权限
例:ansible root -m file -a "dest=/backup/123.txt mode=0600"
(2)src 要连接的文件路径
(3)path 指定文件路径信息(别名dest,name)
(4)state 状态
=directory 所有不存在的子目录将会被创建,并且从1.7开始支持设置目录权限
=file 如果文件不存在将不能被创建
=link 符号链接将被创建或更改。
=hard 便会创建出硬链接
=absent 录将被递归删除以及文件,而链接将被取消链接。
=touch 如果路径不存在将创建一个空文件
创建文件:
例:ansible root -m file -a "dest=/backup/123.txt state=touch"
创建目录:
例:ansible root -m file -a "dest=/backup/123 state=directory"
删除文件:
例:ansible root -m file -a "dest=/backup/123.txt state=absent"
创建连接文件:
例:ansible root -m file -a "dest=/backup/123 state=link"
8.cron模块(定时任务模块)
(1)minute----------------分
例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ "
(2)hour-------------------时
(3)day---------------------天
(4)month-----------------月
(5)weekday--------------周
(6)job----------------------做什么事
(7)name-------------------对定时任务信息做备注
(8)state--------------------present表创建(默认),absent表示删除
例:ansible root -m cron -a "name=’rsync system time’ state=absent "
(9)disable-----------------yes表注释/no不注释
例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ disable=yes"
9.mount模块
(1)fstype 指定挂载文件系统类型
(2)opts 挂载时指定挂载参数
(3)path 制定挂载路径
(4)src 指定那个目录进行挂载
(5)state
=mounted 在fstab文件中的设备将被激活挂载和适当配置
=unmounted 设备将被卸载并不会改变fstab文件信息
例:ansible root -m mount -a "state=mounted fstype=nfs src=’172.168.1.31:/data/’ path=/mnt"
例:ansible mount -m setup -vvvv 输出详细信息方法
10.user模块
name 用户名
group 用户组
state=absent 删除用户
remove=yes 是否删除
例:ansible KS -m user -a "name=plp group=root" 创建用户
ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes" 删除用户

六.ansible软件颜色信息

绿色:??表示查看信息,对远程主机未做改动的命令
红色:??批量管理产生错误信息
×××:??对远程主机做了相应改动
粉色:??对操作提出建议或忠告

七.ansible基于密钥管理

[root]
172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456

八.编写ansible-playbook剧本

1.编写格式说明
ansible剧本格式:yaml语法格式(python脚本编写格式类似)
rsync配置文件格式:ini语法格式
sersync配置文件格式:xml语法格式
2.YAML语法规则
规则一:缩进(一个缩进两空格,注意一定不用tab)
规则二:冒号(每个冒号后一定要有空格)
规则三:短横线 - (短横线后面要空格)
3.编写案例
ansible-playbook --syntax-check cron.yml 剧本检查语法方法
ansible-playbook -C cron.yml -C模拟执行剧本
ansible-playbook cron.yml 执行剧本

(1)案例一

(2)案例二

4.剧本编写方式
多主机单任务编写方式
多主机多任务编写方式
不同主机多任务编写方式

原文地址:http://blog.51cto.com/13520779/2091782

时间: 2024-12-12 15:00:47

ansible批量部署服务的相关文章

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

免密码交互方式+ansible批量管理服务介绍

介绍了ssh服务 1) 远程连接加密传输数据协议,实现远程连接登录,默认端口222)ssh远程连接原理依赖于锁头(公钥)和钥匙(私钥),实现远程加密连接3)ssh基于秘钥远程登录原理a 管理服务器创建秘钥対,将公钥传输发送给给管理端b 管理端请求与被管理端建立连接c 被管理向管理端发送公钥质询d 管理端处理质询信息,实现管理与被管理端免密码交互4)基于ssh协议相关命令ssh scp sftp netstat -lntup |egrep sshd 查看ssh端口 1.1 部署ssh+key (免

Ansible 批量部署平台

Ansible 介绍以及基本命令 Ansible 简介:Ansible 和目前市面上一些其他的项目管理工具有很大的不同,它的设计初衷就是为了更方便.快捷的进行配置管理.它易于安装和实用,语法也非常简单易学.可以使用 Ansible 将平常复杂的配置工作变得简单.更加标准化和更容易控制.Ansible 只需要在一台普通的服务器上运行即可,不需要在被管控的服务器上安装客户端,因为它是基于 SSH 的.Linux 服务器离不开 SSH,所以 Ansible 不需要为配置工作添加额外的支持,可通过命令行

SSH批量部署服务

SSH批量部署服务 在NFS上作为中心分发服务器将私钥分发到其他服务器上 NFS部署 1 [[email protected] ~]# useradd luoahong 2 [[email protected] ~]# echo 123456|passwd --stdin luoahong 3 Changing password for user luoahong. 4 passwd: all authentication tokens updated successfully. 5 创建密码对

Centos6.5利用RubyGems的fpm制作zabbix_agent的rpm包,并使用ansible批量部署

一. 搭建rpm包制作环境 安装gcc [[email protected] ~]# yum install gcc 安装make [[email protected] ~]# yum install make 安装ruby源(ruby版本必须要在1.9.3以上,centos自带的是1.8的版本,需要自己编译安装) [[email protected] ~]# yum install ruby rubygems ruby-devel 查看ruby源 [[email protected] ~]# 

ansible批量管理服务详解

在开始之前我们先试想一个场景,你的公司有成百上千台的服务器,这时候领导要求在所有服务器上都添加一个定时任务,或者是执行某个命令,你可能会说用xshell一个一个去连或者是编写一个shell脚本,但是如果过你经历过类似的事情,你一定可以体会到其中的痛苦,因为这么多服务器你用xshell去连的话工作量将变得特别大,但如果你是选择写一个脚本的话也会特别的麻烦,因为每执行一个不同的东西你就要去修改脚本的类容,而且批量脚本一般采用循环的方式去执行一些任务,如果节点太多的话,执行的效率会变得比较低,而批量管

ansible批量部署(一)

自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion) 回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署->启动服务->测试->加入集群 1.Ansible基本概述ansible是一个配置管理系统configuration management system你只需要可以使用ssh访问你的服务器或设备就行 Ansible能做什么可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作. Ansibl

ansible批量部署mysql

1.1 将mysql软件包同步到客户端服务器,做安装前期准备 Ps:mysql安装包线拖到ansible服务端的/ansible/roles/mysql/files目录下 vim /ansible/roles/mysql/tasks/main.yml - name: copy mysql_tar_gz to client copy: src=mysql-5.6.35.tar.gz dest=/tmp/mysql-5.6.35.tar.gz - name: copy install_script

Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务

SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Working Group)制定: 在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输.确保了传递的数据安全. SSH是专为远程登录会话和其他网络服务提供的安全性协议. 利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中, 绝大多数企业普遍