一、三大自动化运维工具特点:
1、Puppet是早期的Linux自动化运维工具,是一种linux、unix、windows平台的集中配置管理系统,发展至今目前已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于Ruby语言编写。最典型的C/S模式,需要安装服务端与客户端。
Puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互,每个客户端周期地(默认半小时)向服务器发送请求,获得最新的配置信息,保证和该配置信息同步。
每个Puppet客户端每半小时(可以设置)连接一次服务器端,下载最新的配置文件,并且严格按照配置文件来配置客户端。配置完成后,Puppet客户端可以反馈给服务端一个消息,如果出错也会给服务器端反馈一个消息。
Puppet适用于服务器管理的整个过程,比如初始安装、配置、更新以及系统下线。
2、SaltStack :
SaltStack 与Puppet均是C/S模式,需安装服务端与客户端,基于Python编写,加入MQ消息同步,可以使执行命令和执行结果高效返回,但其执行过程需等待客户端全部返回,如果客户端未及时返回或未响应的话,可能会导致部分机器没有执行结果。
3、Ansible :
Ansible与SaltStack均是基于Python语言开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端上安装客户端。因为Ansible是基于SSH远程管理,而Linux 服务器大都离不开SSH,所以Ansible 不需要为配置工作添加额外的支持。
Ansible安装使用非常简单,而且基于上千个插件和模块,实现各种软件、平台、版本的管理,支持虚拟窗口多层级的部署。相对于SaltStack来说执行效率要慢一些,不是软件本身慢。是由于SSH服务慢,可以优化SSH连接速度及使用Ansible加速模块以满足成千上万台服务器的维护和管理。
二、Ansible 运维工具原理
Ansible是一款极为灵活的开源工具套件,能够大大简化UNIX管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样所有的工作都可在主服务器端完成。其命令行机制同样非常强大,允许大家利用商业许可WebUI实现授权管理与配置,可以通过命令行或者GUI来使用Ansible 。运行Ansible 的服务器俗称”管理节点“,通过Ansible进行管理的服务器俗称”受控节点“。
Ansible 自动化运维管理工具优点:
•轻量级,更新时只需要在操作机上进行一次更新即可;
• 采用SSH协议;
• 不需要客户端安装agent;
•批量任务执行可以写成脚本,而且不用分发到远程客户端;
• 使用Python编写,维护更简单;
• 支持sudo普通用户命令;
• 去中心化管理。
三、Ansible 管理工具安装配置
Ansible可以工作在Linux、BSD、Mac OS X等平台,对Python环境版本最低要求为Python 2.6以上。
1、安装
# yum inistall ansible-y
2、配置
Ansible工具默认主目录为/etc/ansible/,其中:
• hosts文件为管理机IP或者主机名列表;
•ansible.cfg为ansible主配置文件;
•roles为角色或者插件路径,默认该目录为空。
Ansible远程批量管理,其中执行命令是通过Ad-Hoc来完成,也即点对点执行命令,能够快速执行,而且不需要保存执行的命令。
默认hosts文件配置主机列表,可以配置分组,可以定义各种IP及规则。
Ansible基于多模块管理,常用的Ansible工具管理模块包括:command、shell、script、yum、copy、file、async、docker、cron、msyql_user、ping、sysctl、user、acl、add_host、easy_install、haproxy等。
各种模块使用方法可以使用:#ansible-docmodules_name
3、Ansible 工具参数详解:
Ansible自动化运维工具管理客户端案例操作,由于Ansible 管理远程服务器基于SSH,在登录远程服务器执行命令时需要远程服务器的用户名和密码,也可以加入-k参数手动输入密码或者基于ssh-keygen生成密钥。
Ansible 自动化批量管理工具主要参数:
•-v,-verbose 打印详细模式
• -iPATH,-inventory=PATH 指定host文件路径
• -fNUM,-forks=NUM 指定fork开户同步进行的个数,默认为5
• -mNAME,-module-anme=NAME 指定module名称,默认模块为command
• -aMODULE_ARGS module模块的参数或者命令
•-k,-ask-pass 输入远程被管理端密码
•-sudo 基于sudo用户执行
•-K,-ask-sudo-pass 提示输入sudo密码与sudo一起使用
• -uUSERNAME,-user=USERNAME 指定执行用户
•-C,--check 测试执行过程,不改变真实内容,相当于预演
• -TTIMEOUT 执行命令超时时间,默认为10s
•--version 查看Ansible软件版本信息
四、Ansible 模块实战
1、Ansible ping 模块实战
Ansible 最基础的模块为ping模块,主要用于判断远程客户端是否在线,用于ping 本身服务器,返回值为changed、ping。
# ansible -k all -mping
135.tang.com | SUCCESS=> {
"changed": false,
"ping": "pong"
}
2、Ansible command 模块实战
Ansible command模块为Ansible 默认模块,主要用于执行Linux基础命令,可以执行远程服务器命令执行、任务执行等操作。
command 模块使用详解:
•Chdir 执行命令前,切换到目录
•Creates 当该文件存在时,则不执行该步骤
•Executable 换用shell环境执行命令
•Free_form 需要执行的脚本
•Removes 当该文件不存在时,则执行该步骤
•Warn 若在ansible.cfg中存在告警,如果设定了false,不会警告此行
••••••Ansible command模块远程执行date 命令:
# ansible -i/etc/ansible/hosts all -m command -a "date"
135.tang.com | CHANGED| rc=0 >>
Mon Dec 3 16:43:19 CST 2018
••••••Ansible command模块远程执行ping命令:
# ansible all -a"ping -c 1 www.baidu.com"
135.tang.com | CHANGED| rc=0 >>
PING www.a.shifen.com (112.80.248.75) 56(84)bytes of data.
64 bytes from112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=128 time=20.5 ms
••••••Ansible hosts正则模式远程执行 df -h:
# ansible *.tang.com -a"df -h"
135.tang.com | CHANGED| rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_tang-root 17G 2.6G 15G 15% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 12M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 1014M 159M 856M 16% /boot
tmpfs 395M 0 395M 0% /run/user/0
3、Ansible copy 模块实战
Ansible copy模块主要用于文件或者目录复制,支持文件、目录、权限、用户组功能。
copy 模块使用详解:
•src Ansible端源文件或者目录,空文件夹不复制
•content 用来替代src,用于将指定文件的内容复制到远程文件内
•dest 客户端目标目录或者文件,需要绝对路径
•backup 复制之前,先备份远程节点上的原始文件
•directory_mode 用于复制文件,新建的文件会被复制,而老旧的不会被复制
•follow 支持link文件复制
•force 覆盖远程主机不一致的内容
•group 设定远程主机文件夹的组名
•mode 指定远程主机文件及文件夹的权限
•owner 设定远程主机文件夹的用户名
Ansible copy 模块企业常用案例:
• • • • • • Ansiblecopy模块操作,src表示源文件,dest表示目标目录或者文件。owner指定拥有者:
# ansible all -m copy-a 'src=/etc/passwd dest=/tmp mode=755 owner=root'
• • • • • • Ansiblecopy模块操作,content表示文件内容,dest表示目标文件,owner指定拥有者:
# ansible all -m copy-a 'content="Hello World" dest=/tmp/test.txt mode=755 owner=root'
• • • • • • Ansiblecopy模块操作,content表示文件内容,dest表示目标文件,owner指定拥有者,bakcup=yes开记备份:
# ansible all -m copy-a 'content="Hello World" dest=/tmp/test.txt mode=755 owner=rootbackup=yes'
4、Ansible yum 模块实战
AnsibleYUM模块主要用于软件的安装、升级、卸载,支持红帽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模块常用案例:
• • • • • • AnsibleYUM模块操作,name 表示需要安装的软件名称,state表示状态,state=installed 表示安装软件:
# ansible all -m yum -a'name=sysstat,screen state=installed'
• • • • • • AnsibleYUM模块操作name 表示需要安装的软件名称,state表示状态,state=absent 表示安装软件:
# ansible all -m yum -a'name=sysstat,screen state=absent'
• • • • • • AnsibleYUM模块操作,name 安装的软件名称,state状态,state=installed 安装软件,disable_gpg_check=no不检查key:
# ansible all -m yum -a'name=sysstat,screen state=installed disable_gpg_check=no'
5、Ansible file 模块实战
Ansible file模块主要用于对文件创建、删除、修改、权限、属性的维护和管理。
file 模块使用详解:
•src Ansible端源文件或者目录
•follow 支持link文件复制
•force 覆盖远程主机不一致的内容
•group 设定远程主机文件夹的组名
•mode 指定远程主机文件及文件夹的权限
•owner 设定远程主机文件及文件夹的用户名
•path 目标路径,也可以用dest,name代替
•state 状态包括file、link、directory、hard、touch、absent
•attributes 文件或者目录特殊属性
Ansible file模块企业常用案例:
• • • • • • Ansiblefile模块操作,path表示目录的名称和路径,state=directory表示创建目录:
# ansible *.tang.com -mfile -a "path=/tmp/`date +%F` state=directory mode=755"
• • • • • • Ansiblefile模块操作,path表示目录的名称和路径,state=touch 表示创建文件:
# ansible *.tang.com -mfile -a "path=/tmp/tang.txt state=touch mode=755"
6、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 模块常用案例:
• • • • • • Ansibleuser 模块操作,name 表示用户名称,home表示其家目录:
# ansible *.tang.com -muser -a "name=tang home=/tmp/"
• • • • • • Ansibleuser 模块操作,name 表示用户名称,home表示其家目录并且指定其shell:
# ansible *.tang.com -muser -a "name=tang home=/tmp/ shell=/sbin/nologin"
• • • • • • Ansibleuser 模块操作,name 表示用户名称,state=absent表示删除用户:
# ansible *.tang.com -muser -a "name=tang state=absent force=yes"
7、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 模块常用案例:
• • • • • • Ansiblecron 模块操作,基于cron模块,创建crontab任务计划:
# ansible all -m cron-a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for synctime' job='/usr/sbin/ntpdate 139.224.227.121'"
• • • • • • Ansiblecron 模块操作,基于cron模块,备份crontab任务计划,backup=yes 表示开启备份,备份文件存放于客户端/tmp/:
# ansible all -m cron-a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for synctime' backup=yes job='/usr/sbin/ntpdate pool.ntp.org'"
• • • • • • Ansiblecron 模块操作,基于cron模块,删除crontab任务计划:
# ansible all -m cron-a "name='Ntpdate server for sync time' state=sbsent"
8、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模块常用案例:
• • • • • • Ansiblesynchronize 模块操作,src为源目录,dest为目标目录:
# ansible all -msynchronize -a 'src=/tmp/ dest=/tmp/'
• • • • • • Ansiblesynchronize模块操作,src为源目录,dest为目标目录、compress=yes表示开户压缩,delete=yes表示数据一致,rsync_opts为同步参数,--exclude表示排除文件:
# ansible all -msynchronize -a 'src=/tmp/ dest=/tmp/ compress=yes delete=yesrsync_opts=--no-motd,--exclude=.txt'
9、Ansible shell 模块实战
Ansibleshell模块主要用于远程客户端上执行各种shell命令或者运行脚本,远程执行命令通过/bin/sh 环境来执行,支持比command更多的指令。
shell模块使用详解:
•Chdir 执行命令前,切换到目录
•Creates 当该文件存在时,则不执行该步骤
•Executable 换用shell环境执行命令
•Free_form 需要执行的脚本
•Removes 当该文件不存时,则不执行该步骤
•Warn 如果在ansible.cfg中存在告警,如果设定了False,不会警告此行
Ansible shell 模块常用案例:
• • • • • • Ansibleshell 模块操作,-m shell 指定模块为shell,远程执行shell脚本,远程执行脚本也可采用script模块。并把执行结果追加至客户端服务器/tmp/var.log文件:
# ansible all -m shell-a "/bin/sh /tmp/variables.sh >> /tmp/var.log"
• • • • • • Ansibleshell 模块操作,远程执行创建目录命令,执行之前切换在/tmp目录,屏蔽警告信息:
# ansible all -m shell-a "mkdir -p `date +%F chdir=/tmp/ warn=no`"
• • • • • • Ansibleshell 模块操作,-m shell 指定模块为shell,远程客户端查看http进程是否启动:
# ansible all -m shell-a "ps -ef |grep http"
• • • • • • Ansibleshell 模块操作,-m shell 指定模块为shell,远程客户端查看crontab任务计划:
# ansible all -m shell-a "crontab -l"
10、Ansible service 模块实战
Ansible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等。
service 模块使用详解:
•enabled 是否开机启动服务
•name 服务名称
•runlevel 服务启动级别
•arguments 服务命令行参数传递
•state 服务操作状态,状态包括satarted、stopped、restarted、reloaded
•
Ansible service 模块常用案例:
• • • • • • Ansibleservice 模块操作,远程重启httpd服务:
# ansible all -mservice -a "name=httpd state=restarted"
• • • • • • Ansibleservice 模块操作,远程重启网卡服务,指定参数eth0:
# ansible all -mservice -a "name=network args=eth0 state=restarted"
• • • • • • Ansibleservice 模块操作,远程开机启动nfs服务,设置3,5级别自动启动:
# ansible all -mservice -a "name=nfs enabled=yes runlevel=3,5"
五、Ansible PlayBook
playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
1、YAML语言特性:
• 可读性强;
• 和脚本语言的交互性好;
• 使用实现语言的数据类型;
• 一致的信息模型;
• 易于实现;
• 可以基于流来处理;
• 可扩展性强。
2、PlayBook组件包括内容:
•target 定义PlayBook的远程主机组
•variable 定义PlayBook使用的变量
•task 定义远程主机上执行的任务列表
•handler 定义task执行完成以后需要调用的任务,例如配置文件被改动,刚启动handler任务重启相关联的服务
3、target 常用参数详解:
•hosts 定义远程主机组
•user 执行该任务的用户
•sudo 设置为yes的时候,执行任务的时候使用root权限
•sudo_user 指定sudo普通用户
•connection 默认基于SSH连接客户端
•gather_facks 获取远程主机facks基础信息
4、variable 常用参数详解:
vars 定义格式,变量名:变量值
vars_files 指定变量文件
vars_prompt 用户交互模式自定义变量
setup 模块取远程主机的值
5、task 常用参数详解:
name 任务显示名称也即屏幕显示信息
action 定义执行的动作
copy 复制本地文件到远程主机
template 复制要地文件到远程主机,可以引用本地变量
service 定义服务的状态
Ansible PlayBook 案例演示:
• • • • • • 远程主机安装Nginx Web 服务,PlayBook yaml文件代码如下:
# vimnginx_install.yaml
- hosts: all
remote_user: root
tasks:
- name: install pcre zlib
yum: name=pcre-devel,pcre,zlib-develstate=installed
- name: install nginx
shell: cd /tmp;rm -rfnginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure--prefix=/usr/local/nginx;make;make install
# ansible-playbooknginx_install.yaml
• • • • • • 检测远程主机Nginx目录是否存在,不存在则安装Nginx Web服务,安装完并启动Nginx,PlayBook yaml文件代码如下:
# vim nginx.yaml
- hosts: all
remote_user: root
tasks:
- name: Nginx server install 2018
file: path=/usr/local/nginx/state=directory
notify:
- nginx install
- nginx start
handlers:
- name: nginx install
shell: cd /tmp;rm -rfnginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure--prefix=/usr/local/nginx;make;make install
- name: nginx start
shell: /usr/local/nginx/sbin/nginx
# ansible-playbooknginx.yaml
• • • • • •检测远程主机内核参数配置文件是否更新,如果更新则执行命令sysctl -p 使内核参数生效:
# vim sysctl.yaml
- hosts: all
remote_user: root
tasks:
- name: linux kernel concfig
copy: src=/data/sh/sysctl.conf dest=/etc/
notify:
- source sysctl
handlers:
-name: source sysctl
shell: sysctl -p
# ansible-playbooksysctl.yaml
• • • • • •基于列表items多个值创建用户,通过{{ }}定义列表变量,with_items选项传入变量的值:
# vim user.yaml
- hosts: all
remote_user: root
tasks:
- name: linux system add user list
user: name={{item}} state=present
with_items:
- tang1
- tang2
- tang3
- tang4
# ansible-playbookuser.yaml
• • • • • • AnsiblePlayBook可以定义template模板文件,模板文件主要用于服务器需求不一致、需要独立定义的情况。例如两台服务器安装了nginx,安装完毕之后将服务器A的HTTP端口改成80,服务器B的HTTP端口改成81,基于tempalte模块可以轻松实现,方法步骤如下:
• Ansible hosts文件指定不同服务器不同httpd_port端口:
[web]
192.168.10.9httpd_port=80
192.168.10.10httpd_port=81
• Ansible 创建nginx.confjinja2模板文件,cp nginx.conf nginx.conf.j2,并修改listen 80为listen{{httpd_port}},Nginx基本配置项不变:
cp nginx.confnginx.conf.j2
listen {{httpd_port}};
• AnsiblePlayBook剧本yaml文件创建:
# vimnginx_template.yaml
- hosts: all
remote_user: root
tasks:
- name: Nginx server install 2018
file: path=/usr/local/nginx/state=directory
notify:
- nginx install
- nginx config
handlers:
- name: nginx install
shell: cd /tmp;rm -rfnginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure--prefix=/usr/local/nginx;make;make install
- name: nginx config
template: src=/data/sh/nginx.conf.j2dest=/usr/local/nginx/conf/nginx.conf
# ansible-playbooknginx_template.yaml
六、Ansible 配置文件详解
Ansible默认配置文件为/etc/ansible/ansible.cfg,配置文件中可以对Ansible进行各项参数的调整,包括并发线程、用户、模块路径、配置优化等。
ansible.cfg常用参数详解:
[defaults] ##通用默认配置
inventory =/etc/ansible/hosts ##被控制端IP或者DNS列表
library = /usr/share/my_modules/ ##默认搜寻模块的位置
remote_tmp =~/.ansible/tmp ##远程执行临时文件
local_tmp =~/.ansible/tmp
plugin_filters_cfg =/etc/ansible/plugin_filters.yml
forks = 5 ##并行线程数
poll_interval = 15 ##回频率或轮询间隔时间
sudo_user = root ##sudo远程执行用户名
ask_sudo_pass =True ##使用sudo,是否需要输入密码
ask_pass = True ##是否需要输入密码
transport = smart ##通信机制
remote_port = 22 ##远程SSH端口
module_lang = C ##模块和系统之间通信的语言
module_set_locale =False
gathering =implicit ##控制默认facts收集(远程系统变量)
gather_subset = all
gather_timeout = 10
roles_path = /etc/ansible/roles ##使用playbook搜索Ansibleroles
host_key_checking =False ##是否检查远程主机密钥
sudo_exe = sudo ##sudo远程执行命令
sudo_flags = -H -S-n ##传递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.ext.do,jinja2.ext.i18 ##允许开启jinja2扩展模块
private_key_file =/path/to/file ##私钥文件存储位置
display_skipped_hosts =True ##显示跳过任何任务的状态
system_warnings =True ##禁用系统运行Ansible潜在问题警告
deprecation_warnings =True ##PlayBook输出禁用“不建议使用”警告
command_warnings =False ##command模块Ansible默认发出警告
nocolor = 1 ##输出带上颜色区别,0表示开启,1表示关闭
pipelining = False ##开启pipeSSH通道优化
[accelerate] ##accelerate缓存加速
accelerate_port =5099 ##加速连接端口5099
accelerate_timeout =30 ##命令执行超过时间,单位为s
accelerate_connect_timeout= 5.0 ##上一个活动连接的时间,单位为min
accelerate_daemon_timeout= 30 ##允许多个私钥被加载到daemon
accelerate_multi_key =yes ##任何客户端想要连接daemon都要开启这个选项
七、Ansible 命令参数详解
ansible 命令参数详解:
Options:
-a MODULE_ARGS, --args=MODULE_ARGS 模块的参数,如果执行默认COMMAND的模块,即是命令参数,如:“date”,"pwd"等等
module arguments 模块参数
-k, --ask-pass ask for SSH password 登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass ask for su password su切换密码
-K, --ask-sudo-pass ask for sudo password 提示密码使用sudo,sudo表示提权操作
--ask-vault-pass ask for vault password
-B SECONDS, --background=SECONDS 后台运行超时时间
run asynchronously,failing after X seconds
(default=N/A)
-C, --check don't make any changes; instead, tryto predict some 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
of the changes that mayoccur
-c CONNECTION, --connection=CONNECTION 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
connection type to use(default=smart)
-f FORKS, --forks=FORKS 并行任务数。NUM被指定为一个整数,默认是5
specify number ofparallel processes to use
(default=5)
-h, --help show this help message andexit 打开帮助文档API
-i INVENTORY, --inventory-file=INVENTORY 指定库存主机文件的路径,默认为/etc/ansible/hosts
specify inventory hostfile
(default=/etc/ansible/hosts)
-l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.91.135 只对这个ip执行
further limit selectedhosts to an additional pattern
--list-hosts outputs a list of matching hosts;does not execute
anything else
-m MODULE_NAME,--module-name=MODULE_NAME 执行模块的名字,默认使用command 模块,所以如果是只执行单一命令可以不用 -m参数
module name to execute(default=command)
-M MODULE_PATH,--module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
specify path(s) tomodule library
(default=/usr/share/ansible/)
-o, --one-line condense output 压缩输出,摘要输出.尝试一切都在一行上输出。
-P POLL_INTERVAL, --poll=POLL_INTERVAL 调查背景工作每隔数秒。需要- b
set the poll intervalif using -B (default=15)
--private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
use this file toauthenticate the connection
-S, --su run operations with su 用 su 命令
-R SU_USER, --su-user=SU_USER 指定SU的用户,默认是root用户
run operations with suas this user (default=root)
-s, --sudo run operations with sudo(nopasswd)
-U SUDO_USER, --sudo-user=SUDO_USER sudo到哪个用户,默认为 root
desired sudo user(default=root)
-T TIMEOUT, --timeout=TIMEOUT 指定SSH默认超时时间, 默认是10S
override the SSHtimeout in seconds (default=10)
-t TREE, --tree=TREE log output to this directory 将日志内容保存在该输出目录,结果保存在一个文件中在每台主机上。
-u REMOTE_USER, --user=REMOTE_USER 远程用户, 默认是root用户
connect as this user(default=root)
--vault-password-file=VAULT_PASSWORD_FILE
vault password file
-v, --verbose verbose mode (-vvv for more, -vvvv toenable 详细信息
connection debugging)
--version show program's version number andexit 输出ansible的版本
ansible-doc 命令参数详解:
Options:
--version show program's version number andexit 显示ansible-doc的版本号
-h, --help show this help message andexit 显示命令参数API文档
-M MODULE_PATH,--module-path=MODULE_PATH 查询模块,--module-path=MODULE_PATH 指定模块的路径
Ansible modules/directory
-l, --list List available modules 显示已存在的所有模块列表
-s, --snippet Show playbook snippet for specifiedmodule(s) 显示playbook制定模块的用法
-v Show version number andexit 显示ansible-doc的版本号
八、Ansible 性能调优
Ansible企业实战环境中,如果管理的服务器越来越多,Ansibe执行效率会变得比较慢,可以通过优化Ansible提供工作效率,由于Ansible基于SSH协议通信,SSH连接慢会导致整个基于Ansible执行变得缓慢,也需要对Openssh进行优化,具体优化的方法如下:
1、关闭Ansible的SSH密钥检测
ansible默认是以ssh来实现远程推送执行的,是基于ssh秘钥检测,会检测远程主机的公钥,并记录在本地中known_host文件中,下次访问主机时,会核对公钥,如果公钥不同,openssh会发出警告,如果相同,会提示输入密码
SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来设定的,StrictHostKeyChecking检查级别包括:no(不检查)、ask(询问)、yes(每次都检查)、False(关闭检查)。
# vim /etc/ansible/ansible.cfg
host_key_checking =False #关闭StrictHostKeyChecking检查
2、Openssh链接优化
使用OpenSSH服务时,默认服务器端配置文件UseDNS=YES状态,该选项会导致服务器根据客户端的IP地址进行DNSPTR反向解析,得到客户端的主机名,然后根据获取到的主机名进行DNS正向A记录查询,并验证该IP是否与原始IP一致。关闭DNS解析代码如下:
# sed -i '/^GSSAPI/s/yes/no/g;/UseDNS/d;/Protocol/aUseDNS no'/etc/ssh/sshd_config
3、SSHpipelining加速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.cf
4、Ansible Facts缓存优化
Ansible-playbook在执行过程中,默认会执行Gatherfacts,如果不需要获取客户端的fact数据的话,可以关闭获取fact数据功能,关闭之后可以加快ansible-playbook的执行效率。如需关闭fact功能,在playbookyaml文件中加入如下代码即可:
gather_facts:nogather_facts: no
5、Ansiblefacts组件主要用于收集客户端设备的基础静态信息,这些信息可以在做配置管理的时候方便引用。Facts信息直接当做AnsiblePlaybook变量信息进行引用,通过定制facts以便收集我们想要的信息,同时可以通过Facter和Ohai来拓展facts信息,也可以将facts信息存入Redis缓存中,如下为Facts使用Redis缓存的步骤:
• • 部署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/
# exportPATH=/usr/local/redis/bin:$PATH #将/usr/local/redis/bin/目录加入至环境变量配置文件/etc/profile末尾,然后Shell终端执行source/etc/profile让环境变量生效。
# nohup/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
• • 安装Python Redis模块
easy_install pip
pip install redis
• • 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
• • 测试
Ansible-playbook执行nginx_wget.yaml剧本文件,测试Redis缓存
# ansible-playbook nginx_wget.yaml
检查Redis服务器,factskey已存入Redisk中:
#redis-cli >KEYS* 查看存入缓存的KEYS信息
6、ControlPersist SSH 优化
ControlPersist特性需要高版本的SSH支持,CentOS 6默认是不支持的,如果需要使用,需要自行升级OpenSSH。
ControlPersist即持久化的socket,一次验证多次通信。并且只需要修改SSH客户端配置,也即Asible被管理的主机。可使用YUM或者源码编译升级OpenSSH服务,升级完毕ControlPersist的设置办法如下,在其用户的家目录创建config文件,如果Ansible以root用户登录客户端,只需要在客户端的/root/.shh/config目录在添加如下代码即可:
Host *
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 5
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 4h
开启ControlPersist特性后,SSH在建立sockets后,节省了每次验证和创建的时间,对Ansible 执行速度提升是非常明显的。