自动化运维工具 Ansible

news2024/11/16 2:57:02

目录

Puppet 自动运维工具特点:

Saltstack 自动运维工具特点:

Ansible 自动运维工具特点:

Ansible 运维工具原理

Ansible 管理工具安装配置

Ansible 工具参数详解

Ansible ping 模块实战

Ansible command 模块实战

Ansible copy 模块实战

Ansible yum 模块实战

Ansible file 模块实战

Ansible user 模块实战

Ansible cron 模块实战

Ansible synchronize 模块实战

Ansible shell 模块实战

Ansible service 模块实战

Ansible Playbook 应用

Ansible 配置文件详解

Ansible 性能调优


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_ARGSmodule 模块的参数或者命令;
-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 模块使用详解:

srcAnsible 端源文件或者目录,空文件夹不拷贝;
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

在这里插入图片描述 (2) Ansible copy 模块操作,content 文件内容,dest 目标文件,owner 指定拥有者,执行结果如图所示:

# Ansible copy 追加内容
ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt mode=755 owner=root'
12

在这里插入图片描述 (3) Ansible copy 模块操作,content 文件内容,dest 目标文件,owner 指定拥有者,backup=yes 开启备份,执行结果如图所示:

# Ansible copy 客户端备份结果
ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt backup=yes mode=755 owner=root'
12

在这里插入图片描述

Ansible yum 模块实战

Ansible yum 模块主要用于软件的安装、升级、卸载,支持红帽.rpm 软件的管理,YUM 模块使用详解:

conf_file设定远程 yum 执行时所依赖的 yum 配置文件
disable_gpg_check安装软件包之前是否坚持 gpg key;
name需要安装的软件名称,支持软件组安装;
update_cache安装软件前更新缓存;
enablerepo指定 repo 源名称;
skip_broken跳过异常软件节点;
state软件包状态,包括:installed、present、latest、absent、removed。

Ansible yum 模块企业常用案例如下: (1) Ansible yum 模块操作,name 表示需安装的软件名称,state 表示状态,常见state= installed 表示安装软件,执行结果如图所示:

#Ansible YUM 安装软件包
ansible all -k -m yum -a "name=sysstat,screen state=installed"
12

在这里插入图片描述 (2) Ansible yum 模块操作,name 表示需安装的软件名称,state 表示状态,常见state= installed 表示安装软件,执行结果如图 21-14 所示:

#Ansible YUM 卸载软件包
ansible all -k -m yum -a "name=sysstat,screen state=absent"
12

Ansible YUM 卸载软件包

(3) Ansible yum 模块操作,name 表示需安装的软件名称,state 表示状态,常见state= installed,表示安装软件,disable_gpg_check=no 不检查 key,执行结果如图所示:

#Ansible YUM 安装软件包,不检查 KEY
ansible 192.168.149.129 -k -m yum -a "name=sysstat,screen state=installed disable_gpg_check=no"
12

Ansible YUM 安装软件包,不检查 KEY

Ansible file 模块实战

Ansible file 模块主要用于对文件的创建、删除、修改、权限、属性的维护和管理,File 模块使用详解:

srcAnsible 端源文件或者目录;
follow支持 link 文件拷贝;
force覆盖远程主机不一致的内容;
group设定远程主机文件夹的组名;
mode指定远程主机文件及文件及的权限;
owner设定远程主机文件夹的用户名;
path目标路径,也可以用 dest,name 代替;
state状态包括:file、link、directory、hard、touch、absent;
attributes文件或者目录特殊属性。

Ansible file 模块企业常用案例如下: (1) Ansible file 模块操作,path 表示目录的名称和路径, state=directory 表示 创建目录,执行结果如图所示:

#Ansible file 创建目录
ansible -k 192.168.* -m file -a "path=/tmp/`date +%F` state=directory
mode=755"
123

在这里插入图片描述 (2) Ansible file 模块操作,path 表示目录的名称和路径, state=touch 表示创建 文件,执行结果如图所示:

#Ansible file 创建文件
ansible -k 192.168.* -m file -a "path=/tmp/jfedu.txt state=touch mode=755"
12

在这里插入图片描述

Ansible user 模块实战

Ansible user 模块主要用于操作系统用户、组、权限、密码等操作,user 模块使用详解:

system默认创建为普通用户,为yes则创建系统用户;
append添加一个新的组;
comment新增描述信息;
createhome给用户创建家目录;
force用于删除强制删除用户;
group创建用户主组;
groups将用户加入组或者附属组添加;
home指定用户的家目录;
name表示状态,是否 create、remove、modify;
password指定用户的密码,此处为加密密码;
remove删除用户;
shell设置用户的 shell 登录环境;
uid设置用户 id;
update_password修改用户密码;
state用户状态,默认为 present 表示新建用户。

Ansible user 模块企业常用案例如下: (1) Ansible user 模块操作,name 表示用户名称,home 表示其家目录,执行结果如图所示:

#Ansible user 创建新用户
ansible -k 192.168.149.* -m user -a "name=jfedu home=/tmp/"
12

在这里插入图片描述 (2) Ansible user 模块操作,name 表示用户名称,home 表示其家目录,执行结果如图所示:

#Ansible user 指定 Shell 环境
ansible -k 192.168.149.* -m user -a "name=jfedu home=/tmp/ shell=/sbin/nologin"
12

在这里插入图片描述 (3) Ansible user 模块操作,name 表示用户名称,state=absent 表示删除用户,执行结果如图所示:

# Ansible user 删除用户
ansible -k 192.168.149.* -m user -a "name=jfedu state=absent force=yes"
12

在这里插入图片描述

Ansible cron 模块实战

Ansible cron 模块主要用于添加、删除、更新操作系统 Crontab 任务计划,Cron 模块使用详解:

name任务计划名称;
cron_file替换客户端该用户的任务计划的文件;
minute分( 0-59 ,* ,*/2 );
hour时( 0-23 ,* ,*/2 );
day日( 1-31 ,* ,*/2 );
month月( 1-12 ,* ,*/2 );
weekday周( 0-6 或 1-7 ,* );
job任何计划执行的命令,state 要等于 present;
backup是否备份之前的任务计划;
user新建任务计划的用户;
state指定任务计划 present、absent。

Ansible cron 模块企业常用案例如下: (1) Ansible cron 模块操作,基于 cron 模块,创建 crontab 任务计划,执行结果如图所示:

#Ansible cron 添加任务计划
ansible -k all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for sync time' job='/usr/sbin/ntpdate 139.224.227.121'"
12

在这里插入图片描述 (2) Ansible cron 模块操作,基于 cron 模块,备份 crontab 任务计划,backup=yes表示开启备份,备份文件存放于客户端/tmp/,执行结果如图所示:

# Ansible cron 删除任务计划
ansible -k all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for sync time' backup=yes job='/usr/sbin/ntpdate pool.ntp.org'"
12

在这里插入图片描述 (3) Ansible cron 模块操作,基于 cron 模块,删除 crontab 任务计划,执行结果如图

#Ansible cron 删除任务计划
ansible -k all -m cron -a "name='Ntpdate server for sync time' state=absent"
12

在这里插入图片描述

Ansible synchronize 模块实战

Ansible synchronize 模块主要用于目录、文件同步,基于 Rsync 命令同步目录,Synchronize 模块使用详解:

compress开启压缩,默认为开启;
archive是否采用归档模式同步,保证源和目标文件属性一致;
checksum是否效验;
dirs以非递归的方式传输目录;
links同步链接文件;
recursive是否递归 yes/no;
rsync_opts使用 rsync 的参数;
copy_links同步的时候是否复制连接;
delete删除源中没有而目标存在的文件;
src源目录及文件;
dest目标目录及文件;
dest_port目标接受的端口;
rsync_path服务的路径,指定 rsync 命令来在远程服务器上运行;
rsync_timeout指定 rsync 操作的 IP 超时时间;
set_remote_user设置远程用户名;–exclude=.log 忽略同步.log 结尾的文件;
mode同步的模式,rsync 同步的方式 PUSH、PULL,默认都是推送 push。

Ansible synchronize 模块企业常用案例如下: (1) Ansible synchronize 模块操作,src 源目录、dest 目标目录,执行结果如图所示:

# Ansible 目录同步
ansible -k all -m synchronize -a 'src=/tmp/ dest=/tmp/'
12

在这里插入图片描述 (2) Ansible synchronize 模块操作,src 源目录、dest 目标目录、compress=yes开启压缩、delete=yes 数据一致、rsync_opts 同步参数、–exclude 排除文件,执行结果如图所示:

 # Ansible 目录同步排除.txt 文件
ansible -k all -m synchronize -a 'src=/tmp/ dest=/tmp/ compress=yes delete=yes rsync_opts=--no-motd,--exclude=.txt'
12

在这里插入图片描述 (3)基于synchronize模块,将源目录同步至目标目录(增量同步):

ansible 192.168.0.2 -m synchronize -a 'src=/tmp/ dest=/tmp/'
1

(4)基于synchronize模块,将源目录同步至目标目录(完全同步):

ansible 192.168.0.2 -m synchronize -a 'src=/tmp/ dest=/tmp/ delete=yes'
1

Ansible shell 模块实战

Ansible shell 模块主要用于远程客户端上执行各种 Shell 命令或者运行脚本,远程执行命令通过/bin/sh 环境来执行,支持比 command 更多的指令,Shell 模块使用详解:

Chdir执行命令前,切换到目录;
Creates当该文件存在时,则不执行该步骤;
Executable换用 shell 环境执行命令;
Free_form需要执行的脚本;
Removes当该文件不存在时,则不执行该步骤;
Warn如果在 ansible.cfg 中存在告警,如果设定了 False,不会警告此行。

Ansible shell 模块企业常用案例如下: (1) Ansible shell 模块操作,-m shell 指定模块为 shell,远程执行 Shell 脚本,远程执行脚本也可采用 script 模块。并把执行结果追加至客户端服务器/tmp/var.log 文件,执行结果如图所示:

#Ansible shell 远程执行脚本
ansible -k all -m shell -a "/bin/sh /tmp/variables.sh >>/tmp/var.log"
12

在这里插入图片描述 (2) Ansible shell 模块操作,远程执行创建目录命令,执行之前切换在/tmp 目录,屏蔽警告信息,执行结果如图所示:

# Ansible shell 远程执行脚本
ansible -k all -m shell -a "mkdir -p `date +%F` chdir=/tmp/ state=directory warn=no"
12

在这里插入图片描述 (3) Ansible shell 模块操作,-m shell 指定模块为 shell,远程客户端查看 http进程是否启动,执行结果如图所示:

#Ansible shell 远程查看进程
ansible -k all -m shell -a "ps -ef |grep http"
12

在这里插入图片描述 (4) Ansible shell 模块操作,-m shell 指定模块为 shell,远程客户端查看 crontab 任务计划,执行结果如图所示:

#Ansible shell 远程查看任务计划
ansible -k all -m shell -a "crontab -l"
12

在这里插入图片描述

Ansible service 模块实战

Ansible service 模块主要用于远程客户端各种服务管理,包括启动、停止、重启、 重新加载等,service 模块使用详解:

enabled是否开启启动服务;
name服务名称;
runlevel服务启动级别;
arguments服务命令行参数传递;
state服务操作状态,状态包括 started, stopped, restarted,reloaded。

Ansible service 模块企业常用案例如下: (1) Ansible service 模块操作,远程重启 httpd 服务,执行结果如图所示:

#Ansible service 重启 httpd 服务
ansible -k all -m service -a "name=httpd state=restarted"
12

在这里插入图片描述 (2) Ansible service 模块操作,远程重启网卡服务,指定参数 eth0,执行结果如图所示:

#  Ansible service 重启 network 服务
ansible -k all -m service -a "name=network args=eth0 state=restarted"
12

在这里插入图片描述 (3) Ansible service 模块操作,远程开机启动 nfs 服务,设置 3,5 级别自动启动,执行结果如图所示:

#Ansible service 开机启动 nfs 服务
ansible -k all -m service -a "name=nfs enabled=yes runlevel=3,5"
12

在这里插入图片描述

Ansible Playbook 应用

如上使用 Ad-hoc 方式点对点命令执行,可以管理远程主机,如果服务器数量很多,配置信息比较多,还可以利用 Ansible Playbook 编写剧本、从而以非常简便的方式实现任务处理的自动化与流程化。 Playbook 由一个或多个"play"组成的列表,play 的主要功能 Ansible 中的 Task 定义好的角色,指定剧本对应的服务器组。 从根本上说,Task 是一个任务,Task 调用 Ansible 各种模块 module,将多个 paly组织在一个 playbook 剧本中,然后组成一个非常完整的流程控制集合。 基于 Ansible Playbook 还可以收集命令、可以创建任务集,这样能够大大降低管理工作的复杂程度,Playbook 采用 YAML 语法结构,易于阅读、方便配置。 YAML(Yet Another Markup Language),是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。它参考了其它多种语言,包括:XML、C 语言、Python、Perl 以及电子邮件格式 RFC2822,是类似于标准通用标记语言的子集 XML 的数据描述语言,语法比 XML简单很多。

YAML 使用空白字符和分行来分隔资料,适合用 grep、Python、Perl、Ruby 操作。 (1) YAML 语言特性如下: ❑ 可读性强; ❑ 和脚本语言的交互性好; ❑ 使用实现语言的数据类型; ❑ 一致的信息模型; ❑ 易于实现; ❑ 可以基于流来处理; ❑ 可扩展性强。 (2) Playbooks 组件包括如下:

Target定义 playbook 的远程主机组;
Variable定义 playbook 使用的变量;
Task定义远程主机上执行的任务列表;
Handler定义 task 执行完成以后需要调用的任务,例如配置文件被改动,则启动 handler 任务重启相关联的服务。

(3) Target 常用参数如下:

hosts定义远程主机组;
user执行该任务的用户;
sudo设置为 yes 的时候,执行任务的时候使用 root 权限;
sudo_user指定 sudo 普通用户;
connection默认基于 SSH 连接客户端;
gather_facks获取远程主机 facts 基础信息。

(4) Variable 常用参数如下:

vars定义格式,变量名:变量值;
vars_files指定变量文件;
vars_prompt用户交互模式自定义变量;
setup模块去远程主机的值;

(5) Task 常用参数如下:

name任务显示名称也即屏幕显示信息;
action定义执行的动作;
copy复制本地文件到远程主机;
template复制本地文件到远程主机,可以引用本地变量;
service定义服务的状态。

Ansible playbook 案例演示如下: (1) 远程主机安装 Nginx WEB 服务,playbook 代码如下,执行结果如图所示:

# Ansible Playbook 远程 Nginx 安装
- hosts:all
remote_user:root
tasks:
- name:Jfedu Pcre-devel and Zlib LIB Install.
yum:name=pcre-devel,pcre,zlib-devel state=installed
- name:Jfedu Nginx WEB Server Install Process.
shell:cd /tmp; rm -rf nginx-1.16.0.tar.gz; wget http://nginx.org/download/nginx-1.16.0.tar.gz;tar xzf nginx-1.16.0.tar.gz;
cd nginx-1.16.0;./configure --prefix=/usr/local/nginx;make;make install
123456789

在这里插入图片描述 (2) 检测远程主机 Nginx 目录是否存在,不存在则安装 Nginx WEB 服务,安装完并启动 Nginx,playbook 代码如下,执行结果如图所示:

 # Ansible Playbook Nginx 触发安装
- hosts:all
remote_user:root
tasks:
- name:Nginx server Install 2020
file:path=/usr/local/nginx/ state=directory
notify:
- nginx install
- nginx start
handlers:
- name:nginx install
shell:cd /tmp; rm -rf nginx-1.16.0.tar.gz; wget http://nginx.org/download/nginx-1.16.0.tar.gz;tar xzf nginx-1.16.0.tar.gz;cd nginx-1.16.0;./configure --prefix=/usr/local/nginx;make;make install
- name:nginx start
shell:/usr/local/nginx/sbin/nginx
1234567891011121314

在这里插入图片描述 (3) 检测远程主机内核参数配置文件是否更新,如果更新则执行命令 sysctl –p 使内核参数生效,playbook 代码如下,执行结果如图所示:

#Ansible Playbook 内核参数优化
- hosts:all
remote_user:root
tasks:
- name:Linux kernel config 2017
copy:src=/data/sh/sysctl.conf dest=/etc/
notify:
- source sysctl
handlers:
- name:source sysctl
shell:sysctl -p
1234567891011

在这里插入图片描述 (4)基于列表 items 多个值创建用户,通过{{}}定义列表变量,with_items 选项传 入变量的值,执行结果如图 21-36(a)、21-36(b)所示:

# Ansible Playbook item 变量创建用户
- hosts: all
remote_user: root
tasks:
- name: Linux system Add User list.
user: name={{ item }} state=present
with_items:
- jfedu1
- jfedu2
- jfedu3
- jfedu4
1234567891011

在这里插入图片描述 (5) Ansible Playbook 可以自定义 template 模板文件,模板文件主要用于服务器需求不一致的情况,需要独立定义的,例如两台服务器安装了 Nginx,安装完毕之后将服务器 A 的 HTTP 端口改成 80,服务器 B 的 HTTP 端口改成 81,基于 tempalte 模块轻松实现,方法步骤如下:

  1. Ansible hosts 文件指定不同服务器不同 httpd_port 端口,代码如下:

[web]
192.168.149.128 httpd_port=80
192.168.149.129 httpd_port=81
123
  1. Ansible 创建 nginx.conf jinja2 模板文件,cp nginx.conf nginx.conf.j2, 并修改 listen 80 为 listen {{httpd_port}},Nginx 其他配置项不变,代码如 下:

cp nginx.conf nginx.conf.j2
listen {{httpd_port}};
12
  1. Ansible playbook 剧本 yaml 文件创建,代码如下:

- hosts:all
remote_user:root
tasks:
- name:Nginx server Install 2017
file:path=/usr/local/nginx/ state=directory
notify:
- nginx install
- nginx config
handlers:
- name:nginx install
shell:cd /tmp ; rm -rf nginx-1.16.0.tar.gz ; wget http://nginx.org/download/nginx-1.16.0.tar.gz;tar xzf nginx-1.16.0.tar.gz;cd nginx-1.16.0;./configure --prefix=/usr/local/nginx;make;make install
- name:nginx config
template:src=/data/sh/nginx.conf.j2
dest=/usr/local/nginx/conf/nginx.conf
1234567891011121314
  1. Ansible playbook 执行剧本文件,如图 21-37(a)、21-37(b)、21-37(c)所 示: Ansible Playbook 执行模板 yaml Ansible Playbook 执行模板 yaml 149.128 服务器 Nginx HTTP Port 80 在这里插入图片描述 149.129 服务器 Nginx HTTP Port 81 在这里插入图片描述

Ansible 配置文件详解

Ansible 默认配置文件为/etc/ansible/ansible.cfg,配置文件中可以对 ansible进行各项参数的调整,包括并发线程、用户、模块路径、配置优化等,如下为 Ansible.cfg 常用参数详解:

[defaults]通用默认配置段;
inventory = /etc/ansible/hosts被控端 IP 或者 DNS 列表;
library = /usr/share/my_modules/Ansible 默认搜寻模块的位置;
remote_tmp = $HOME/.ansible/tmpAnsible 远程执行临时文件;
pattern = *对所有主机通信;
forks = 5并行进程数;
poll_interval = 15回频率或轮训间隔时间;
sudo_user = rootsudo 远程执行用户名;
ask_sudo_pass = True使用 sudo,是否需要输入密码;
ask_pass = True是否需要输入密码;
transport = smart通信机制;
remote_port = 22远程 SSH 端口;
module_lang = C模块和系统之间通信的语言;
gathering = implicit控制默认 facts 收集(远程系统变量);
roles_path= /etc/ansible/roles用于 playbook 搜索 Ansible roles;
host_key_checking = False检查远程主机密钥;
#sudo_exe = sudo sudo远程执行命令;
#sudo_flags = -H传递 sudo 之外的参数;
timeout = 10 SSH超时时间;
remote_user = root远程登陆用户名;
log_path = /var/log/ansible.log日志文件存放路径;
module_name = command Ansible命令执行默认的模块;
#executable = /bin/sh执行的 Shell 环境,用户 Shell 模块;
#hash_behaviour = replace特定的优先级覆盖变量;
#jinja2_extensions允许开启 Jinja2 拓展模块;
#private_key_file = /path/to/file私钥文件存储位置;
#display_skipped_hosts = True显示任何跳过任务的状态;
#system_warnings = True禁用系统运行 ansible 潜在问题警告;
#deprecation_warnings = TruePlaybook 输出禁用“不建议使用”警告;
#command_warnings = Falsecommand 模块 Ansible 默认发出警告;
#nocolor = 1输出带上颜色区别,开启/关闭:0/1;
pipelining = False开启 pipe SSH 通道优化;
[accelerate]accelerate 缓存加速。
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0
accelerate_daemon_timeout = 30
accelerate_multi_key = yes

Ansible 性能调优

Ansible 企业实战环境中,如果管理的服务器越来越多,Ansibe 执行效率会变得比较慢,可以通过优化 Ansible 提供工作效率,由于 Ansible 基于 SSH 协议通信,SSH 连接慢会导致整个基于 Ansible 执行变得缓慢,也需要对 Openssh 进行优化,具体优化的方法如下: (1) Ansible SSH 关闭秘钥检测 默认以 SSH 登录远程客户端服务器,会检查远程主机的公钥(public key),并将该主机的公钥记录在~/.ssh/known_hosts 文件中。下次访问相同主机时,OpenSSH 会核对公钥,如果公钥不同,OpenSSH 会发出警告,如果公钥相同,则提示输入密码。 SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来设定的StrictHostKeyChecking 检查级别包括:no(不检查)、ask(询问)、yes(每次都检查)、False(关闭检查)。 Ansible 配置文件中加入如下代码,即可关闭 StrictHostKeyChecking 检查:

host_key_checking = False
1

2) OpenSSH 连接优化 使用 OpenSSH 服务时,默认服务器端配置文件 UseDNS=YES 状态,该选项会导致服务器根据客户端的 IP 地址进行 DNS PTR 反向解析,得到客户端的主机名,然后根据获取到的主机名进行 DNS 正向 A 记录查询,并验证该 IP 是否与原始 IP 一致。关闭 DNS 解析代码如下:

sed -i '/^GSSAPI/s/yes/no/g; /UseDNS/d; /Protocol/aUseDNS no' /etc/ssh/sshd_config
/etc/init.d/sshd restart
12

(3) SSH pipelining 加速 Ansible SSH pipelining 是一个加速 Ansible 执行速度的简单方法,SSH pipelining 默认是关闭的,关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。 如果不使用 Sudo 建议开启该选项,打开此选项可以减少 Ansible 执行没有文件传输时,SSH 在被控机器上执行任务的连接数。使用 Sudo 操作的时候, 必须在所有被管理的主机上将配置文件/etc/sudoers 中 requiretty 选项禁用。

sed -i '/^pipelining/s/False/True/g' /etc/ansible/ansible.cfg
1

(4) Ansible Facts 缓存优化 Ansible-playbook 在执行过程中,默认会执行 Gather facts,如果不需要获取客户端的 fact 数据的话,可以关闭获取 fact 数据功能,关闭之后可以加快 ansible-playbook的执行效率。如需关闭 fact 功能,在 playbook yaml 文件中加入如下代码即可:

gather_facts: nogather_facts: no
1

Ansible facts 组件主要用于收集客户端设备的基础静态信息,这些信息可以在做配置管理的时候方便引用。Facts 信息直接当做 Ansible Playbook 变量信息进行引用,通过定制 facts 以便收集我们想要的信息,同时可以通过 Facter 和 Ohai 来拓展 facts 信息,也可以将 facts 信息存入 Redis 缓存中,如下为 Facts 使用 Redis 缓存的步骤

  1. 部署 Redis 服务

wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar zxf redis-2.8.13.tar.gz
cd redis-2.8.13
make PREFIX=/usr/local/redis install
cp redis.conf /usr/local/redis/
12345

将/usr/local/redis/bin/目录加入至环境变量配置文件/etc/profile 末尾,然后 Shell 终端执行 source /etc/profile 让环境变量生效。

export PATH=/usr/local/redis/bin:$PATH
1

启动及停止 Redis 服务命令:

nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
1
  1. 安装 Python Redis 模块

easy_install pip
pip install redis
12
  1. Ansible 整合 Redis 配置 在配置文件/etc/ansible/ansible.cfg 中 defaluts 段中加入代码,如果 redis 密码为 admin,则开启 admin 密码行:

gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = localhost:6379
#fact_caching_connection = localhost:6379:0:admin
12345
  1. 测试 Redis 缓存 Ansible-playbook 执行 nginx_wget.yaml 剧本文件,如图 21-38 所示:

ansible-playbook nginx_wget.yaml
1

ansible playbook 执行 yaml 在这里插入图片描述 检查 Redis 服务器,facts key 已存入 Redis 中,如图 21-39 所示: Redis 缓存服务器缓存 facts 主机信息 在这里插入图片描述 (5) ControlPersist SSH 优化 ControlPersist 特性需要高版本的 SSH 支持,CentOS6 默认是不支持的,如果需要 使用,需要自行升级 Openssh。 ControlPersist 即持久化的 Socket,一次验证多次通信。并且只需要修改 SSH 客户端配置,也即 Ansible 被管理主机。 可使用 YUM 或者源码编译升级 OpenSSH 服务,升级完毕 ControlPersist 的设置办法如下,在其用户的家目录创建 config 文件,如果 ansible 以 root 用户登录客户端,至需要在客户端的/root/.ssh/config 目录中添加如下代码即可:

Host *
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 5
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 4h
1234567

开启 ControlPersist 特性后,SSH 在建立 sockets 后,节省了每次验证和创建的时间,对 Ansible 执行速度提升是非常明显的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uboot第二阶段 start_armboot函数代码分析

1.1、start_armboot函数简介 这个函数整个构成了uboot启动的第二阶段。 1.2、uboot第二阶段做的事情 uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗、时钟、串口…),然后初始化DDR并且完成重定位。那么,uboot的第…

数字化转型导师坚鹏:企业数字化营销能力提升

企业数字化营销能力提升 课程背景: 很多企业存在以下问题: 不清楚数字化营销对企业发展有什么影响? 不知道如何提升企业数字化营销能力? 不知道企业如何开展数字化营销工作? 课程特色: 原创企业数…

vcruntime140.dll无法继续执行代码?vcruntime140.dll如何修复?只需要3步即可

vcruntime140.dll是用于Microsoft Visual C Redistributable(可再发行组件)的一部分,它是一个动态链接库文件,包含了该软件包提供的运行库。在许多应用程序和游戏中,vcruntime140.dll文件经常被使用。如果该文件缺失或…

Tkinter正则表达式工具

文章目录 🏳️‍🌈 1. 导入tkinter和re模块🏳️‍🌈 2. 设置窗口居中🏳️‍🌈 3. 设置lable、text、button布局🏳️‍🌈 4. 设置下拉列表框🏳️‍🌈 5. 清空文…

Scrum敏捷开发和项目管理流程及工具

Scrum是全球运用最广泛的敏捷管理框架,Leangoo基于Scrum框架提供了一系列的流程和模板,可以帮助敏捷团队快速启动Scrum敏捷开发。 这里可以介绍一下在scrum中单团队敏捷开发如何管理,单团队敏捷开发主要是针对10-15人以下,只有一…

零基础如何学习挖漏洞?看这篇就够了【网络安全】

前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…

Qt常用快捷键

Qt常用快捷键 1.添加头文件:Alt Enter2.查看槽函数的实现 位置:F2 / F43.快速查看帮助文档:F14.代码快速对齐:Ctrl I5.代码全选:Ctrl A6.保存:Ctrl S7.代码复制:Ctrl C8.代码粘贴&#xff…

Flutter之插件开发plugin

目的:适用于独立业务模块,或者与原生页面交互频繁的地方。 基于flutter3.x , IDE :androidStudio 步骤: 1.新建flutter project 【New flutter project】. 2. 在新建工程面板记得切换 Project Type, 选择【PLugin】. 其他的根据足迹需求选择就行。 3. 在flutter主工…

联想凌拓教育行业解决方案

联想凌拓教育行业解决方案 教育部等六部门《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》,指出:信息网络、平台体系、数字资源、智慧校园、创新应用、可信安全的新型基础设施为六大发展重点,需建立全面覆盖的标准规范体…

文献集锦 | 非因生物空间多组学技术在头颈部肿瘤中的研究策略

头颈部鳞状细胞癌(HNSCC)是全球第七大癌症病因,是一种异质性恶性肿瘤,起源于上呼吸道,尤其是鳞状粘膜线。唇部、口腔和鼻腔、鼻窦、喉、鼻咽、口咽和下咽是HNSCC的受累部位。利用空间组学分析平台深入剖析组织肿瘤微环境,对深入理…

【大数据之Hadoop】从自定义 RPC 到 Hadoop RPC ,理解分布式通信系统的底层工作原理

1. 前言 Hadoop是分布式计算系统,在分布式环境中,网络通信模块是其核心模块之一。要学好Hadoop,需理解其底层通信系统的基本工作原理。Hadoop提供有体系完整的RPC框架,实现了对底层网络通信过程的优雅封装。 本文将从RPC概念说起…

从五一的旅游热潮看,该如何实现数字文旅的转型升级?

文旅产业是文化和旅游行业的融合,属于国家战略性产业,资源消耗低,带动系数大,就业机会多,综合效益好。改革开放以来,随着国内工业化、城镇化的快速发展,日益增长的大众化、多样化消费需求为文旅…

java电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

JUC多并发编程 对象内存布局

对象的内存布局简介 在 Hotspot 虚拟机里,对象在堆内存中存在布局可划分为三个部分: 对象头(Header), 实例数据(Instance Data) 和对齐填充(Padding 保证8字节位数) 对象头 对象标记 MarkWord, 在64位操作系统中, Mark Word 占8个字节, 类型占 8个字节&…

单词搜索I II/前缀树

79单词搜索 思路: 注意: 我自己在写 for i in range(m):for j in range(n):# 对每一个格子都从头开始搜索if self.__search_word(board, word, 0, i, j, marked, m, n):return True这一段的时候,就写成了: 这一段代码是…

Mysql 主从 读写分离

目录 0 课程视频 1 概述 1.1原理 -> 传二进制日志到 从库 -> 执行 1.2 作用 1.2.1 主库崩 从库上 1.2.2 读写分离 1.2.3 从库备份 -> 备份完 再用 二进制日志同步 2 搭建 2.1 防火墙 端口号开启 2.2 主库设置 2.2.1 修改配置文件 -.> /etc/my.cnf 2.2…

高压放大器模块在平面水声压电换能器研究中的应用

实验名称:平面水声压电换能器的制备与性能研究 研究方向:压电换能器 实验原理: 压电换能器是能够发射和接收超声波的电声转换器件,按照不同的标准,换能器可分为不同的种类。按照功能可分为发射型、接收型和收发两用…

亚马逊下单需要什么条件?(养号干货知识)

混迹亚马逊的老手都知道,测评向来都是最有效,最快速的推广方式,给自己商品做点销量,优化一下listing,留一下一些优质评论,甚至于打压一下竞品,帮自己商品解个围。 养号环境四大步: …

定制海报、AI扣人像小程序

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm=1011.2415.3001.5343哔哩哔哩欢迎关注:小淼Develop 小淼Develop的个…

nakamichi车机中控屏密码破解(开发者选项密码、usb主从模式切换密码)

版本 Android11 平台 mtk 打开开发者选项,连续点击系统版本号会弹出密码框确认 这个默认密码这台设备并没有配置,而是动态的 默认密码 SystemProperties.get(“ro.sys.developer”, “”); 动态根据设备当前日前来生成的格式为 yyyy.MM.dd 所以上面的…