目录
Puppet 自动运维工具特点:
Puppet 是早期的 Linux 自动化运维工具,是一种 Linux、Unix、Windows 平台的集中 配置管理系统,发展至今目前已经非常成熟,可以批量管理远程服务器,模块丰富,配 置复杂,基于 Ruby 语言编写。最典型的 C/S 模式,需要安装服务端与客户端。 puppet 采用 C/S 星状的结构,所有的客户端和一个或几个服务器交互,每个客户端 周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信 息同步。 每个 puppet 客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet 客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一个消息。 Puppet 适用于服务器管理的整个过程,比如初始安装、配置、更新以及系统下线。
Saltstack 自动运维工具特点:
Saltstack 与 Puppet 均是 C/S 模式,需安装服务端与客户端,基于 Python 编写,加入 MQ 消息同步,可以使执行命令和执行结果高效返回,但其执行过程需等待客户端全部返回,如果客户端未及时返回或未响应的话,可能会导致部分机器没有执行结果。
Ansible 自动运维工具特点:
Ansible 与 Saltstack 均是基于 Python 语言开发,Ansible 只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为 Ansible 是基于 SSH 远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。 Ansible 安装使用非常简单,而且基于上千个插件和模块实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。很多读者在使用 Ansible 工具时,认为 Ansible比 Saltstatck 执行效率慢,其实不是软件本身慢,是由于 SSH 服务慢,可以优化 SSH 连接速度及使用 Ansible 加速模块,满足企业上万台服务器的维护和管理。
Ansible 运维工具原理
Ansible分为控制端和被控端,主要是基于SSH协议去管理客户端,被控端是无需安装Agent插件的,Ansible会读取控制端hosts文件,根据文件中定义IP列表信息,调取本地的各个模块对被控端机器实现批量、并发的配置管理和维护,如果任务比较复杂可以写成PlayBook剧本进行分发管理; Ansible 自动运维管理工具优点: ❑ 轻量级,更新时,只需要在操作机上进行一次更新即可; ❑ 采用 SSH 协议; ❑ 不需要去客户端安装 agent; ❑ 批量任务执行可以写成脚本,而且不用分发到远程就可以执行; ❑ 使用 python 编写的,维护更简单; ❑ 支持 sudo 普通用户命令; ❑ 去中心化管理。 Ansible 自动运维管理工具工作原理拓扑,如图 21-1 所示:
Ansible 管理工具安装配置
Ansible 可以工作在 Linux、BSD、Mac OS X 等平台,对 Python 环境的版本最低要求为 Python2.6 以上,如果操作系统 Python 软件版本为 2.4,需要升级方可使用 Ansible工具。 Red Hat、CentOS 操作系统可以直接基于 YUM 工具自动安装 Ansible,CentOS6.x 或者 CentOS7.x 安装前,需先安装 epel 扩展源,代码如下:
rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install epel-release -y yum install ansible -y 123
Ansible 工具默认主目录为:/etc/ansible/,其中 hosts 文件为被管理机 IP 或者主机名列表,ansible.cfg 为 ansible 主配置文件,roles 为角色或者插件路径,默认该目录为空,如图所示: Ansible 远程批量管理,其中执行命令是通过 Ad-Hoc 来完成,也即点对点单条执行命令,能够快速执行,而且不需要保存执行的命令。默认 hosts 文件配置主机列表,可以配置分组,可以定义各种 ip 及规则,hosts 列表默认配置如图 21-3 所示:
Ansible 基于多模块管理,常用的 Ansible 工具管理模块包括:command、shell、script、yum、copy、File、async、docker、cron、mysql_user、ping、sysctl、user、acl、add_host、easy_install、haproxy 等。 可以使用 ansible-doc –l|more 查看 ansible 支持的模块,也可以查看每个模块的帮助文档,ansible-doc module_name,如图 21-4 所示:
Ansible 工具参数详解
基于 Ansible 批量管理之前,需将被管理的服务器 IP 列表添加至/etc/ansible/hosts 文件中,如图 21-5 添加 4 台被管理端 IP 地址,分成 web 和 db 两组,本机也可以是被管理机。 基于 Ansible 自动运维工具管理客户端案例操作,由于 Ansible 管理远程服务器基于 SSH,在登录远程服务器执行命令时需要远程服务器的用户名和密码,也可以加入-k参数手动输入密码或者基于 ssh-keygen 生成免秘钥。 Ansible 自动化批量管理工具主要参数如下:
参数 | 注释 |
---|---|
-v,–verbose | 打印详细模式; |
-i PATH,–inventory=PATH | 指定 host 文件路径; |
-f NUM,–forks=NUM | 指定 fork 开启同步进程的个数,默认 5; |
-m NAME,–module-name=NAME | 指定 module 名称,默认模块 command; |
-a MODULE_ARGS | module 模块的参数或者命令; |
-k,–ask-pass | 输入远程被管理端密码; |
–sudo | 基于 sudo 用户执行; |
-K,–ask-sudo-pass | 提示输入 sudo 密码与 sudo 一起使用; |
-u USERNAME,–user=USERNAME | 指定移动端的执行用户; |
-C,–check | 测试执行过程,不改变真实内容,相当于预演; |
-T TIMEOUT, | 执行命令超时时间,默认为 10 秒; |
–version | 查看 Ansible 软件版本信息。 |
Ansible ping 模块实战
Ansible 最基础的模块为 ping 模块,主要用于判断远程客户端是否在线,用于 ping本身服务器,返回值为 changed、ping。 (1) Ansible ping 服务器状态,如图所示:
ansible -k all -m ping 1
Ansible command 模块实战
Ansible command 模块为 ansible 默认模块,主要用于执行 Linux 基础命令,可以执行远程服务器命令执行、任务执行等操作。 Command 模块使用详解:
Chdir | 执行命令前,切换到目录; |
Creates | 当该文件存在时,则不执行该步骤; |
Executable | 换用 shell 环境执行命令; |
Free_form | 需要执行的脚本; |
Removes | 当该文件不存在时,则不执行该步骤; |
Warn | 如果在 ansible.cfg 中存在告警,如果设定了 False,不会警告此行。 |
Ansible command 模块企业常用案例如下: (1) Ansible command 模块远程执行 date 命令,执行结果如图所示:
#Ansible command date 命令执行结果 ansible -k -i /etc/ansible/hosts all -m command -a "date" 12
(2) Ansible command 模块远程执行 ping 命令,执行结果如图所示:
# Ansible command ping 命令执行结果 ansible -k all -m command -a "ping -c 1 www.baidu.com" 12
(3) Ansible Hosts 正则模式远程执行 df -h,执行结果如图所示:
# Ansible command df -h 命令执行结果 ansible -k 192.168.149.13* -m command -a "df -h" 12
Ansible copy 模块实战
Ansible copy 模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能,copy 模块使用详解:
src | Ansible 端源文件或者目录,空文件夹不拷贝; |
content | 用来替代 src,用于将指定文件的内容,拷贝到远程文件内; |
dest | 客户端目标目录或者文件,需要绝对路径; |
backup | 拷贝之前,先备份远程节点上的原始文件; |
directory_mode | 用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝; |
follow | 支持 link 文件拷贝; |
force | 覆盖远程主机不一致的内容; |
group | 设定远程主机文件夹的组名; |
mode | 指定远程主机文件及文件及的权限; |
owner | 设定远程主机文件夹的用户名。 |
Ansible copy 模块企业常用案例如下: (1) Ansible copy 模块操作,src 表示源文件,dest 表示目标目录或者文件,owner 指定拥有者,执行结果如图所示:
#Ansible copy 拷贝文件 ansible -k all -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root' 12