Linux运维之Ansible自动化运维管理工具
Ansible简介:Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用、安装软件、执行命令、配置和编排任务。后面会提到批量安装zabbix_agenet客户端
一、Ansible工作机制,原理说明

从图中可以看出ansible分为以下几个部分:
1)Control Node:控制机器
2)Inventory:主机清单
3)Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行
4)Modules(Core|Custom):模块,用于执行某个具体的任务
5)connection plugin (连接插件):ansible 通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机
二、Ansible执行流程

简单的说,运行ansible时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。
三、安装Ansible准备工作
一台控制主机:192.168.0.202
三台管理主机:(作为测试)
192.168.0.200
192.168.0.201
192.168.0.203
备注:如果被管理主机有外网IP地址,控制主机可以是自己的虚拟机
安装要求:
centos6版本以上以及能使用python命令和pip命令
备注:centos6系统自动python2.6 。centos7系统自动python2.7。pip命令是基于python安装python模块的命令
四、安装ansiable
1、安装方法一,yum安装(推荐)
yum install epel-release -y
yum install ansible -y
2、安装方法二,安装python下的ansible模块
pip install ansible
五、配置控制主机管理服务器
1)vim /etc/ansible/hosts 添加被管理的机器
192.168.0.200
192.168.40.70:88 ansible_ssh_user=root ansible_ssh_pass=1234567899
server ansible_ssh_host=192.168.40.20 ansible_ssh_pass="1234567899" ansible_ssh_port=8822
备注。这几种写法都行。默认端口为22。默认用户为root。server为主机名。推荐后面2种,将公钥拷贝到管理主机中时,可以免密码
2)在控制主机中生成ssh密钥对
ssh-keygen -t rsa
一直回车,即在$HOME/.ssh目录下生成id_rsa和id_rsa.put私钥和公钥两个文件
备注:为了安全也可在生成密钥的时候设置密码,ansible每次执行命令的时候,都会提示输入密钥密码,可通过下面的命令记住密码。
ssh-agent bsh
ssh-add ~/.ssh/id_rsa
3) 将公钥拷贝到管理主机中.ssh/authorized_keys文件中,实现免密码登录远程管理主机
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.200 # 默认端口22
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 502 root@119.75.216.201" # 修改了特殊端口
如果在/etc/ansible/hosts中的主机有用户名,端口,密码。这里后面不需要再次输入密码
注:ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中
4)调整ansible.cfg参数,优化
vim /etc/ansible/ansible.cfg
1、禁用每次执行ansible命令检查 ssh key host.
host_key_checking = False
2、开启日志记录
log_path = /var/log/ansible.log
3、ansible连接加速配置
|
1
2
3
4
5
6
7
8
9
10
11
|
[accelerate]#accelerate_port = 5099accelerate_port = 10000#accelerate_timeout = 30#accelerate_connect_timeout = 5.0# If set to yes, accelerate_multi_key will allow multiple# private keys to be uploaded to it, though each user must# have access to the system via SSH to add a new key. The default# is "no".accelerate_multi_key = yes |
六、测试。
6.1)测试在管理机器批量执行一个ping 命令

说明,每台机器都成功执行了ping 命令
6.2)批量安装zabbix_agent客户端
vim /root/tools/zabbix.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/sh# yum 安装,# 号为注释# 注意需要关闭selinux# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config# setenforce 0 # 仅适用于centos6版本,并且zabbix为第一次安装rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpmyum install zabbix-sender zabbix-agent zabbix -ycp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf_ori.bak# 192.168.40.21 位zabbix服务端的监控地址sed -i "s/Server=127.0.0.1/Server=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf#sed -i "s/ServerActive=127.0.0.1/ServerActive=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf#sed -i "s/Hostname=Zabbix server/Hostname=192.168.40.21/" /etc/zabbix/zabbix_agentd.confcp /etc/sysconfig/iptables /etc/sysconfig/iptables_ori.baksed -i '/^COMMIT/i\-A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT' /etc/sysconfig/iptablesservice iptables restartservice zabbix-agent startchkconfig zabbix-agent on |
ansible all -m copy -a "src=/root/tools/zabbix.sh dest=/root" # 推送文件至管理主机
ansible all -a "/bin/sh /root/zabbix.sh" # 远程执行脚本文件
执行完毕后,连接一下管理主机,查看zabbix_agent是否启动成功
七、分组测试结果
1)hosts文件,分组
[web01]
myredis ansible_ssh_host=192.168.10.25 ansible_ssh_pass="" ansible_ssh_port=
myweb ansible_ssh_host=192.168.10.242 ansible_ssh_pass="" ansible_ssh_port= [db01]
server ansible_ssh_host=192.168.10.5 ansible_ssh_pass="" ansible_ssh_port=
如果可以使用ssh 免密登录服务器的话
[web]
k1 ansible_ssh_host=192.168.10.41 ansible_ssh_user=root ansible_ssh_pass=
k3 ansible_ssh_host=192.168.10.20
k3 ansible_ssh_host=192.168.10.20
ansible_ssh_host=192.168.10.20
只要有IP在,就可以
2)执行web01组内容
[root@web01 ansible]# ansible web01 -a "df -h"
myweb | SUCCESS | rc= >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 15G .0G 13G % /
tmpfs 931M 931M % /dev/shm
/dev/sda1 190M 32M 149M % /boot myredis | SUCCESS | rc= >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G .8G 17G % /
tmpfs 491M 491M % /dev/shm
/dev/sda1 190M 27M 153M % /boot
3)执行单台机器内容
[root@web01 ansible]# ansible myweb -a "df -h"
myweb | SUCCESS | rc= >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 15G .0G 13G % /
tmpfs 931M 931M % /dev/shm
/dev/sda1 190M 32M 149M % /boot
4)特别注意前面定义的主机名,最好不要重名,建议使用IP地址
5)ls显示文件
[root@k8s6 .ansible]# ansible web -a 'ls /root/.ssh/'
k5 | CHANGED | rc= >>
authorized_keys
id_rsa
id_rsa.pub k4 | CHANGED | rc= >>
authorized_keys
id_rsa.pub k3 | CHANGED | rc= >>
authorized_keys
id_rsa
id_rsa.pub
八、ansible命令的总结
hosts文件写法===》可考虑加密该文件
192.168.40.70:88 ansible_ssh_user=root ansible_ssh_pass=1234567899
server ansible_ssh_host=192.168.40.20 ansible_ssh_pass="1234567899" ansible_ssh_port=8822
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 8822 root@192.168.1.167" # 拷贝公钥
ansible + 主机组名称 + -m + 模块名称 + -a + 参数
主机组名称,即hosts中定义的主机组名称
all 指所有主机
-m 指使用模块,后加指定的模块名称
-a 指传给模块的参数
ansible all -a "mkdir -p /python/python" # 执行管理主机中的命令
ansible all -m copy -a "src=/root/tools/zabbix.sh dest=/root" # 拷贝文件至管理主机
ansible all -a "/bin/sh /root/zabbix.sh" # 远程执行脚本文件
ansible zabbix -m shell -a "free -g" # 调用shell命令
ansible命令的并发
-f 参数。默认为 5。执行很多机器的时候,可以选择加该参数
ansible命令自主选择执行的文件host
-i 参数。默认为 /etc/ansible/hosts
实例:ansible zk -m shell -a "sudo yum install wget -y" -f 1 -i /etc/ansible/hosts 循环执行,线程数为1
原文链接:http://blog.csdn.net/xyang81/article/details/51568227
Linux运维之Ansible自动化运维管理工具的更多相关文章
- 百度云曲显平:AIOps时代下如何用运维数据系统性地解决运维问题?
百度云智能运维负责人 曲显平 本文是根据百度云智能运维负责人曲显平10月20日在msup携手魅族.Flyme.百度云主办的第十三期魅族技术开放日<百度云智能运维实践>演讲中的分享内容整理而 ...
- Ansible_自动化运维《Ansible之初识-1》
1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...
- Ansible自动化运维工具-上
[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...
- 自动化运维之ansible
第三十九课 自动化运维之ansible 目录 十五. ansible介绍 十六. ansible安装 十七. ansible远程执行命令 十八. ansible拷贝文件或目录 十九. ansible远 ...
- Ansible自动化运维工具使用
概述本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装主机配置Ad-Hoc command(命令行执行)Playbook (任务剧本)Ansible 和 Sa ...
- 简单聊一聊Ansible自动化运维
一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...
- Ansible 自动化运维管理工具
Ansible 自动化运维管理工具 1.Ansible概述 2.Ansible部署 3.Ansible模块 1.Ansible概述: Ansible是一个基于Python开发的配置管理和应用部署工具, ...
- Ansible自动化运维工具及其常用模块
Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...
- 一文详解 Ansible 自动化运维
开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...
随机推荐
- display:none和visibility:hidden
display:none和visibility:hidden的区别在哪儿? “这个问题简单?”我心里头暗自得意,按耐住自己得意又紧张的小心脏,自信满满地说,“这两个声明都可以让元素隐藏,不同之处在于d ...
- 简单的jQ代码
简单的jQ代码 /* * Lazy Load - jQuery plugin for lazy loading images * * Copyright (c) 2007-2012 Mika Tuup ...
- 矩形覆盖(python)
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? # -*- coding:utf-8 -*- class S ...
- Linux下查看编辑二进制文件:hexedit神器
1.如果没有hexedit安装hexedit:2.打开终端输入hexedit filename;3.打开即可用键盘输入字符,用方向键移动,ctrl+w保存,ctrl+x退出:4.详细用法 man he ...
- 贪吃蛇snake Java实现(二)
package cn.tcc.snake.antition; import java.awt.Color;import java.awt.Graphics;import java.awt.Point; ...
- linux下的C++项目创建
CMake项目的完整构建 Linux下的CMake项目通常由几个文件夹组成.小伙伴们可以先在自己的电脑上新建一个文件夹,作为你代码的根目录,然后往里面建几个子文件夹,这里并不涉及具体的代码,只是可以作 ...
- 打印信息,通过.jasper工具将集合输出到PDF文件 然后利用打印机打印文件
我们上一次成功的利用iReport工具制作了一张报表,并且预览了报表最后的效果,也生成了格式为“jrpxml”.“jrxml”与“jasper”的文件.这次,我们使用jasper提供的java的api ...
- 不包含数据和字母的Webshell
在做php20中的challenge5时学习到了php中可代替数字和字母的符号,悲剧的是这道题没做出来,目前先整理知识点吧555555555555 情况是:很多时候在敏感地方WAF会阻 ...
- TZOJ 3244 Happy YuYu's Birthday(数学几何)
描述 9月10日教师节,也是YuYu的生日,妈妈给YuYu准备了一个很大的圆形蛋糕,YuYu看中了蛋糕中间那诱人的樱桃(都挤到一块啦),小家伙很高兴,心里开始盘算着如何将樱桃全部分给自己.YuYu是个 ...
- Python: 调用youtube_dl实现视频下载
研究PySide与youtube_dl结合实现视频下载,抽丝剥蚕,步步维艰,却也颇有意思. 记录初始心得.界面以PySide之Qt编写,调用youtube_dl下载,回调出下载进度,代码如下: # e ...