设为首页收藏本站
开启辅助访问 切换到窄版

自动化运维——ansible

[复制链接]
作者:maria 
版块:
学习笔记 Linux操作系统 发布时间:2016-5-2 20:55:16
33422
maria 发表于 2016-5-2 16:33:09 | 显示全部楼层 |阅读模式
官方文档  http://docs.ansible.com/ansible/
6 Z  ^; _! z/ j; H- I6 K) T, J
0 X# n8 T6 ]8 Q9 I! z* Y' j' _特性
9 j: i/ d& N8 y& {4 C( m(1)、no agents:不需要在被管控主机上安装任何客户端;7 |: N- w6 P1 q' J# H
(2)、no server:无服务器端,使用时直接运行命令即可;) ?3 t; I5 ~% d9 J4 z" N1 O  U
(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;- p2 ]1 U* M( }4 p# ~* u
(4)、yaml,not code:使用yaml语言定制剧本playbook;( F; l$ J* B5 c/ x9 a1 @# g
(5)、ssh by default:基于SSH工作;
6 y2 ~1 A) M1 S(6)、strong multi-tier solution:可实现多级指挥。
; }$ E. k9 s0 P. y& V8 d0 y' u9 e! S; U7 o- S. G# U0 s' m
优点
% Y+ e0 c) C9 f' s) B- s(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;. V8 H2 ^6 a! d9 m7 v" _
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
  h, E# ?6 U9 {' F(3)、使用python编写,维护更简单,ruby语法过于复杂;
- S3 q6 H( I, h/ c(4)、支持sudo。
, F9 ?. l/ S& w& X& O
/ l0 f3 ~: d. j3 n. J" [. |5 [



上一篇:python练习题
下一篇:I value the forum post. Fantastic.
回复

使用道具 举报

maria  楼主| 发表于 2016-5-2 17:40:23 | 显示全部楼层
第一部分 安装与配置
+ w# c1 \, d  u7 A/ i6 W1. 安装
7 S6 _7 w' V! y* B* e通过yum安装,首先安装epel扩展源,然后安装ansible
$ N, K! N$ ^0 x0 ~- j0 C
  1. yum install -y epel-release
    2 k6 r0 `& L! M9 M% [
  2. yum install -y ansible
复制代码
2.  配置$ [4 ^( {6 `2 x/ `. }* n
(1) ssh密钥配置
0 K( b7 [, c( a3 S& ?: ]( U首先生成密钥对+ S; l% y, r* N9 O4 l2 u- X6 V
  1. ssh-keygen -t rsa  #直接回车即可,不用设置密钥密码
复制代码

& ~9 a7 b: a- w! X/ {这样会在root家目录下生成.ssh目录,这里面也会生成两个文件 id_rsa 和  id_rsa.pub
, H2 ?" y6 w  z$ O$ d+ G0 d然后把公钥(id_rsa.pub)内容放到对方机器的/root/.ssh/authorized_keys里面,包括本机( ?/ j; K" n. b- F7 v9 z
  1. cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
复制代码
对方机器上要配置好 authorized_keys文件的权限5 g* X/ U3 S2 }, d' R
  1. chmod 700 /root/.ssh/4 U+ }( m, u# ]6 Y
  2. chmod 600 /root/.ssh/authorized_keys
复制代码
还需要关闭selinux0 \( ?% F, a% S. ^1 T8 }
  1. sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config;
    1 S% ]' h3 Q0 g9 C6 ~
  2. setenforce 0;
    0 f9 c5 f; [1 I  z: j
  3. iptables -F && service iptables save;
复制代码

# A, X; U8 k, c2 j. h(2) ansible 配置
. }, q% i' Z; K
  1. vi  /etc/ansible/hosts
复制代码
增加/ G3 f$ E) q$ G
  1. [ma2c.cn]
    - @7 _/ n+ j, ?  ?& N6 K
  2. 127.0.0.1& v* h& O) M+ Y
  3. 192.168.199.212
    9 S: Q5 }  \( y- _: F+ n# [: c
  4. 192.168.199.190
复制代码
/ _$ M( _  E, U& g0 S/ L- Y- K0 o* I
说明: ma2c.cn为主机组名字,自定义的。 下面几个ip为组内的机器ip。
回复 支持 反对

使用道具 举报

maria  楼主| 发表于 2016-5-2 20:55:16 | 显示全部楼层
第二部分 远程执行命令和shell脚本
+ y6 z4 K; X! Q7 Q+ z3 N5 U" h1、远程执行命令
7 y' U" b5 q3 E0 y' {$ Q, }7 i
  1. ansible ma2c.cn -m command -a 'date'
复制代码
其中ma2c.cn就是上面定义的hosts,这里也可以单用ip% `8 E$ C$ I7 h0 h5 z
       -m 表示使用模块
+ x, y* j, ~4 A, x" F5 M3 {       command 表示后面使用的是命令8 L# C& ?9 c. J3 J, n: p/ ^
QQ图片20160502191215.png
2 J9 A* i3 ]! S如果提示错误信息2 \' ]2 b: z/ O+ I9 u
  1. 错误: "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
复制代码
QQ图片20160502204828.png
1 Q; p  ^4 Z5 m& O解决方法:
/ [3 i- q! P6 u8 T) k3 M& n
  1. yum install -y libselinux-python
复制代码
注意这是需要客户端安装的。. }5 m# _$ j3 S$ _9 K. n  L2 u

9 E( b% M1 v3 _" f- h1 b1 E2 k另外,在设置完密钥登录之后,最好使用ssh命令登录一下所使用到的主机,使ansible服务器上产生know_hosts文件。1 T1 ]4 ~: S) S0 ?+ W4 i2 w; `6 G
QQ图片20160502193043.png
% ~4 d: U, M" N) c  h这样再次使用ansible命令时就不用确认了。否则每次使用ansible命令时都要确认,影响执行效率, D2 d) C" W  [/ M4 \
QQ图片20160502192344.png - V- ?, Q3 D% W# i+ X
3 M0 M& x$ P0 T, L+ Z! {
2、拷贝文件或者目录
6 W; {# \* V  t5 A
  1. ansible 192.168.199.212 -m copy -a "src=/tmp/123.txt dest=/tmp/123"
    & N0 ?: C# ]+ R& Q
  2. mkdir /tmp/tmp1
      H/ v# z' r' ]* K: M  H' c
  3. cp /tmp/123.txt /tmp/tmp1
    - w* ~4 B! N. k( w/ C: B/ Z
  4. ansible 192.168.199.212 -m copy -a "src=/tmp/tmp1 dest=/tmp/234"
复制代码
QQ图片20160502200440.png
. c+ j: l+ \8 L) N1 h其中 src是服务端源文件或目录! I, U2 y( p6 U  T+ }. Q9 q0 _
       dest是客户端目标文件或目录, j- |0 L% G9 m
注意:源目录会放到目标目录下面去。- F& |# _' j4 L2 A, d* n3 h$ L
QQ图片20160502200558.png : |/ p; P  `& y, E* D% h
3、远程执行一个shell脚本5 I2 v* i1 p% R
首先创建一个shell脚本- \1 F0 O1 d' I" r  z3 {0 {
  1. vim  /tmp/testsh.sh  
复制代码
加入内容
& S: b/ C2 [& W/ @
  1. #!/bin/bash) A, f; s+ C4 y! m6 |: B' N
  2. echo `date` > /tmp/test.txt( C1 U; V- k9 W& K
  3. echo $HOSTNAME >> /tmp/test.txt' R6 y+ Z8 b6 X  \& z0 j
  4. cat /tmp/test.txt
复制代码
QQ图片20160502203138.png ; A: @+ d! U, l% \) Y& u2 t
然后把该脚本分发到各个机器上
8 H+ z7 h3 C% t4 G* H7 R
  1. ansible ma2c.cn -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
复制代码
QQ图片20160502205219.png
* U" P) Z/ c9 J# [8 y' O最后是批量执行该shell脚本2 R* e  {$ P9 V( k" p& `: Q
  1. ansible ma2c.cn -m shell -a "/tmp/testsh.sh"
复制代码
QQ图片20160502205442.png ) M" u9 n" T" ]4 _% N- G

( Y" ?$ Z+ i" R# M* C6 R7 hshell模块,还支持远程执行命令并且带管道# _, E' q* G( b! V# E9 ^* s
  1. ansible ma2c.cn -m shell -a "ps -ef | grep httpd "
复制代码
QQ图片20160502201740.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表