• CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机


    使用自动化运维工具Ansible集中化管理服务器

    Ansible概述

    Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作


    官方网站:https://www.ansible.com/


    Ansible小故事:

    2015年10月,红帽(Red Hat)宣布收购软件开发公司 Ansible,消息称此次收购耗资逾 1亿美元,也有消息称接近 1.5亿美元。Ansible 成立于 2013年,总部设在北卡罗来纳州达勒姆,联合创始人 aïd Ziouani 和高级副总裁 Todd Barr 都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分流行。这家公司还提供 Tower 软件和咨询服务,这款软件能使开发者轻松地建立和管理规模化应用程序的 IT 基础架构。


    Ansible特点:
      1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

      2、默认使用SSH协议对设备进行管理;

      3、主从集中化管理;

      4、配置简单、功能强大、扩展性强;

      5、支持API及自定义模块,可通过Python轻松扩展;

      6、通过Playbooks来定制强大的配置、状态管理

      7、对云计算平台、大数据都有很好的支持;


    Ansible 工作机制

      Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排

     


    由上面的图可以看到 Ansible 的组成由 5 个部分组成:

      Ansible : ansible核心

      Modules : 包括 Ansible 自带的核心模块及自定义模块

      Plugins : 完成模块功能的补充,包括连接插件、邮件插件等

      Playbooks : 剧本;定义 Ansible 多任务配置文件,由Ansible 自动执行

      Inventory : 定义 Ansible 管理主机的清单 [ˈɪnvəntri] 清单


    接下来分享一下实际使用Ansible管理多台节点吧,Let's do it

      先介绍下环境:3台主机都是CentOS7系统的,一台机器做主节点,也就是服务端,其他做从节点,也就是客户端

      ansible 服务端 192.168.1.63

      ansible节点1: 192.168.1.63

      ansible节点2: 192.168.1.64

      ansible节点2: 192.168.1.65


    在主节点上安装ansible,安装ansible之前,先安装红帽中的EPEL软件仓库
      yum install epel-release -y

     

    然后使用yum安装ansible

      yum install ansible -y


    安装完成后,检查ansible版本:

      ansible --version

    安装完成后我们了解一下ansible的语法使用:
      anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]


    ansible详细参数:

      -v,–verbose # 详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)

      -i PATH, -inventory=PATH # 指定 host 文件的路径,默认是在 /etc/ansible/hosts

      inventory [ˈɪnvəntri] 库存

      -f NUM,-forks=NUM # NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。

      -m NAME,-module-name=NAME # 指定使用的 module 名称,默认使用 command模块

      -a,MODULE_ARGS #指定 module 模块的参数

      -k,-ask-pass #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证

      -sudo # 指定使用 sudo 获得 root 权限

      -K,-ask-sudo-pass #提示输入 sudo 密码,与 -sudo 一起使用

      -u USERNAME,-user=USERNAME # 指定移动端的执行用户

      -C,–check #测试此命令执行会改变什么内容,不会真正的去执行

    ansible-doc详细参数:

      ansible-doc -l #列出所有的模块列表

      ansible-doc -s 模块名 #查看指定模块的参数 -s, --snippet # [ˈsnɪpɪt] 片断


    安装完毕及介绍完语法后我们来测试下ansible是否可以正常使用:

    定义主机清单

    1、基于端口,用户,密码定义主机清单

    ansible基于ssh连接-i (inventory)参数后指定的远程主机时,也可以写端口,用户,密码。

    格式:

    ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定 ssh 用户 ansible_ssh_pass:指定 ssh 用户登录是认证密码(明文密码不安全) ansible_sudo_pass:指明 sudo 时候的密码
    例:


    [root@localhost63 ~]# vim /etc/ansible/hosts #文件 /etc/ansible/hosts 维护着Ansible中服务器的清单。在文件最后追加以下内容
    [web-servers]  # 主机组名

    192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
    wq保存退出


    简单测试下主机的连通性

    [root@localhost63 ~]# ansible -i /etc/ansible/hosts web-servers -m ping

    -i # 指定 host 文件的路径,默认是在 /etc/ansible/hosts

    -m # 指定使用的ping模块

     

    出现上图代表通信成功

    但是这样明文密码不太安全,我们来让各节点之间通过密钥进行通信传输

    在Ansible服务端生成密钥,并且复制公钥到节点中。

    root@localhost63 ~]#ssh-keygen #一路回车

    # ls /root/.ssh/ 生成公钥和私钥

     

    使用ssh-copy-id命令来复制Ansible公钥到节点:63和64

      [root@localhost63 ~]# ssh-copy-id root@主节点ip

      [root@63 ~]# ssh-copy-id root@从节点ip

      [root@63 ~]# ssh 192.168.1.64

      [root@64 ~]# exit


    [root@63 ~]# vim /etc/ansible/hosts #在文件的最后添加以下内容

      删除之前在最后添加的两行主机清单:


      [web-servers]

      192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456


    替换为:

      192.168.1.63 主节点ip

      192.168.1.64 从节点ip

      # 可以使用192.168.1.64..99的方式批量执行

      保存退出

    在Ansible服务端运行命令

    ping模块检查网络连通性

      command模块执行shell命令,command:作为ansible的默认模块,可以运行远程权限范围内的所有shell命令

    例1:使用ping检查‘web-servers’(模块名)或者ansible节点的连通性。

      [root@63 ~]# ansible -i /etc/ansible/hosts 'web-servers' -m ping

    例3:检查节点的内核版本

      [root@63 ~]# ansible -m command -a "uname -r" 'web-servers'

    到这里即可实现对多个主机节点的操作了

  • 相关阅读:
    Spring框架中的单例Beans是线程安全的么?
    四种类型的数据节点 Znode?
    什么是 Swagger?你用 Spring Boot 实现了它吗?
    服务注册和发现是什么意思?Spring Cloud 如何实现?
    如何使用 Spring Boot 实现异常处理?
    什么是 CSRF 攻击?
    什么是 WebSockets?
    springboot整合Hbase
    java8的Supplier
    @Scope注解的作用详解
  • 原文地址:https://www.cnblogs.com/fusheng11711/p/10755315.html
Copyright © 2020-2023  润新知