zoukankan      html  css  js  c++  java
  • ansible 学习与实践


    title: ansible 学习与实践
    date: 2016-05-06 16:17:28
    tags:

    ansible 学习与实践

    一 介绍

    ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。

    ansible是基于模块工作的,ansible本身没有批量部署能力,真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架,框架包括

    • 连接插件connection plugins负责和被监控端实现通信。
    • Host Inventory:指定操作的主机,是一个配置文件里面定义监控的主机
    • 各种模块核心模块command模块自定义模块
    • 借助于插件完成记录日志邮件等功能
    • PlayBooks:剧本执行多个任务时。并非必需可以让节点一次性运行多个任务

    架构如下

    二 部署

    ansible 部署很简单

    无论是linux还是mac都建议使用pip安装,这样可以做到心里有数,方便后期维护

    pip install ansible
    

    三 基本配置

    ansible使用的是openssh进行数据命令的传递,为了方便管理最好和agent端建立信任

    建立信任方法

    ssh-keygen
    ssh-copy-id -i xx@10.x.x.x
    

    另外还有一个agent的列表文件,centos默认在 /etc/ansible/hosts

    生产环境建议自己指定,方便管理

    指定方式 这里就引出了另外一个文件 ./ansible.cfg

    ansible.cfg中可以设定一些默认值,这样就不需要对同样的内容输入好多遍,ansible.cfg建议放在主目录下隐藏起来,如.ansible.cfg
    ansible会默认加载这个文件

    简单写法

    [defaults]
    hostfile = ~/Nconf/ansible/hosts
    remote_user = nick
    private_key_file = ~/.ssh/id_rsa
    host_key_checking = False
    

    指定好了hosts文件的目录 然后开始写hosts文件,很简单如下

    [me]
    127.0.0.1
    
    [home-child]
    10.211.55.4
    10.211.55.5
    10.211.55.6
    10.211.55.7
    
    [work-local]
    192.168.1.1
    192.168.1.2
    

    如果之前没有做key认证的话,做一下信任key认证,不想做认证也可以这样写hosts文件

    [test]
    10.211.5.9 ansible_ssh_user=root ansible_ssh_pass=123456
    

    这样做的确定是密码是明文的,比较危险

    简单使用

    eg:

    进阶 Ad-Hoc

    Ad-Hoc是相对于playbook来说的,一般来说学习了playbook你才能体会到ansible的强大,Ad-Hoc类似于在终端中使用命令行工具,可以处理一些简单的工作

    接下来我就学习如何使用Ad-Hoc

    先演示几个例子

    重启web组的服务器,每次重启十台

    $ ansible atlanta -a "/sbin/reboot" -f 10
    

    执行这个命令默认是以当前用户的身份执行,如果想以特定用户的身份执行可以这样写

    $ ansible atlanta -a "/usr/bin/reboot" -f 10 percent-u username
    

    如果想通过sudo去执行命令,如下:

    $ ansible atlanta -a "/usr/bin/foo" -u username --sudo [--ask-sudo-pass]
    

    ansible有许多模块,默认是 ‘command’,也就是命令模块,我们可以通过 -m 选项来指定不同的模块.在前面所示的例子中, 因为我们是要在 Atlanta 组下的服务器中执行 reboot 命令,所以就不需要显示的用这个选项指定 ‘command’ 模块,使用 默认设定就OK了.一会在其他例子中,我们会使用 -m 运行其他的模块

    ansible 对she'll的支持

    使用shell模块的方法如下

    $ ansible raleigh -m shell -a 'echo $TERM'
    

    文件传输

    $ ansible test  -m  copy -a "src=/Users/nick/Downloads/main_identity_card.sql dest=/tmp/" -u root
    

    修改文件属性

    $ ansible test  -m  file  -a "dest=/tmp/main_identity_card.sql mode=600"
    

    修改所属用户

    $ ansible test  -m  file  -a "dest=/tmp/main_identity_card.sql mode=600 owner=sunhong group=sunhong"
    

    创建目录

    $ ansible test  -m  file  -a "dest=/tmp/hehe state=directory"
    

    删除目录,默认就是递归的,比较危险,所以一定要确定好路径没有问题再执行

    $ ansible test  -m  file  -a "dest=/tmp/work state=absent"
    

    Ansible 提供对 yum的支持.

    $ ansible test -m yum -a "name=tree state=installed"  #安装
    $ ansible test -m yum -a "name=tree state=removed"    #卸载
    $ ansible test -m yum -a "name=tree state=latest"     #更新
    

    用户和组

    $ ansible test -m user -a "name=wanzi password=wanzi"   #创建用户
    $ ansible test -m user -a "name=wanzi  state=absent remove=yes"   #删除用户
    

    git

    $ ansible test -m git -a "repo=https://github.com/colder219/bulldog.git dest=/tmp/work version=HEAD"
    

    服务管理

    $ ansible test -m service -a "name=httpd state=restarted"   #重启服务
    $ ansible test -m service -a "name=httpd state=started"     #启动服务
    $ ansible test -m service -a "name=httpd state=stoped"      #停止服务
    

    如果服务依靠supervisor管理

    $ ansible test -m supervisorctl -a "name=mysql-3306 state=restarted config=/home/waimaiw/supervisor/conf/supervisord.conf" 
    

    重启什么的基本一样,就不用写了,生产环境一般都是要指定配置文件路径的。

    ansible基本的就这么多了,不过ansible真正的精华还是在playbook上面,这个下次和大家分享。

  • 相关阅读:
    AIX root用户密码丢失怎么办?
    Oracle 11g Grid Infrastructure 卸载
    Failed to create a peer profile for Oracle Cluster GPnP. gpnptool rc=32512
    管理 IBM AIX 中的用户
    vbox克隆文件的路径如何修改?默认它生成在C盘,怎么修改?
    Oracle_dataguard__11G_配置与维护手册
    AIX管理员常用命令
    如何让你的SQL运行得更快
    ORA00604: 递归 SQL 级别 1 出现错误,ORA01000: 超出打开游标的最大数
    Adobe Acrobat 9.0“ PDFMaker无法找到Adobe PDF Printer 的打印驱动程序”解决办法
  • 原文地址:https://www.cnblogs.com/colder219/p/5492520.html
Copyright © 2011-2022 走看看