批量管理服务
1. 批量管理服务概述:
ansible批量管理服务概述
01. 是基于python语言开发的自动化软件工具
02. 是基于SSH 远程管理服务实现远程主机批量管理
ansible批量管理服务意义
01. 提高工作的效率
02. 提高工作准确度
03. 减少维护的成本
04. 减少重复性工作
ansible批量管理服务功能
01. 可以实现批量系统操作配置
02. 可以实现批量软件服务部署
03. 可以实现批量文件数据分发
04. 可以实现批量系统信息收集 -- 资产管理
ansible批量管理服务特点
01. 管理端不需要启动服务程序(no server)
02. 管理端不需要编写配置文件(/ etc/ ansible/ ansible. cfg)
03. 受控端不需要安装软件程序(libselinux- python)
04. 受控端不需要启动服务程序(no agent)
05. 服务程序管理操作模块众多(module)
06. 利用剧本编写来实现自动化(playbook)
2. 批量管理软件服务安装部署:
yum install - y ansible
=== === === === === === === === === === === === === === === === === === === === ===
ansible软件学习说明:
1 )掌握ansible主机清单配置:指定ansible程序可以批量管理哪些主机
https: / / docs. ansible. com/ ansible/ latest/ user_guide/ intro_inventory. html
2 )掌握ansible常用功能模块:实现批量管理功能模块
https: / / docs. ansible. com/ ansible/ latest/ modules/ modules_by_category. html
3 )掌握ansible剧本编写方法:实现自动化批量管理功能
https: / / docs. ansible. com/ ansible/ latest/ user_guide/ playbooks. html
=== === === === === === === === === === === === === === === === === === === === ===
3. 批量管理网站主机清单配置:
vim / etc/ ansible/ hosts
方法一: 直接写入主机地址信息
172.16 .1 .31
172.16 .1 .41
172.16 .1 .7
ansible all - m ping
方法二:基于密码方式进行配置
172.16 .1 .31 ansible_user= root ansible_passwd= 123456 ansible_port= 22
方法三:基于主机组方式进行配置
[ mysql]
172.16 .1 .31 ansible_user= root ansible_password= 654321 ansible_port= 52113
[ data]
172.16 .1 .41
172.16 .1 .7
扩展:子组方式配置
[ oldboy: children]
server
client
[ server]
172.16 .1 .31 ansible_user= root ansible_password= 654321 ansible_port= 52113
[ client]
172.16 .1 .41
172.16 .1 .7
方法四:匹配方式进行配置
172.16 .1 . [ 10 : 20 ]
4. 批量管理服务应用方法:
批量管理命令语法结构:
ansible 管理主机信息/ 主机组信息 - m 模块名称 - a "模块参数"
第一个模块:command模块(默认)
作用说明: 命令模块
使用方法:
ansible oldboy - a "free -h"
模块参数:
chdir: 在执行批量管理命令时, 先进行目录切换
ansible oldboy - m command - a "chdir=/tmp pwd"
creates: 判断指定文件是否存在, 如果不存在, 就执行后面命令: 如果存在, 后面命令不再执行
ansible oldboy - m command - a "creates=/tmp/oldboy.txt touch /tmp/oldboy.txt"
第二个模块:shell模块(万能模块)
作用说明: 批量执行命令 ( 和command模块区别 可以识别特殊符号)
使用方法:
ansible oldboy - a "cd /tmp ; touch oldboy.txt"
模块参数:
chdir: 在执行批量管理命令时, 先进行目录切换
ansible oldboy - m shell - a "chdir=/tmp pwd"
creates: 判断指定文件是否存在, 如果不存在, 就执行后面命令如果存在, 后面命令不再执行
ansible oldboy - m shell - a "creates=/tmp/oldboy.txt touch /tmp/oldboy.txt"
需求: 实现批量执行脚本: shell
第一个步骤: 编写脚本
第二个步骤: 将脚本推送到被管理主机上
第三个步骤: 将脚本文件权限进行设置
第四个步骤: 批量执行脚本
第三个模块:script模块
作用说明: 批量执行脚本模块
使用方法:
第一个步骤: 编写脚本
第二个步骤: 批量执行脚本
ansible oldboy - m script - a "/server/scripts/ansible_test2.sh"
第四个模块:copy模块
作用说明:
1 ) 将管理主机数据批量分发到被管理主机上
2 ) 将被管理主机数据进行备份
使用方法:
1 )将数据进行批量分发:
ansible oldboy - m copy - a "src=/etc/selinux/config dest=/tmp"
2 )被管理主机数据做备份
ansible oldboy - m copy - a "src=/tmp/oldboy.txt dest=/tmp/oldboy.txt.bak remote_src=yes"
模块参数:
backup: 在批量传输文件, 进行覆盖之前, 对源文件进行备份
ansible oldboy - m copy - a "src=/tmp/oldboy.txt dest=/tmp/ backup=yes"
mode: 批量分发文件时, 修改文件权限信息
owner: 批量分发文件时, 修改文件属主信息
group: 批量分发文件时, 修改文件属组信息
ansible oldboy - m copy - a "src=/tmp/olddog.txt dest=/tmp mode=400 owner=oldboy group=oldboy"
content 在批量管理主机上, 创建新的文件, 并填写内容
ansible oldboy - m copy - a "content='oldboy75' dest=/tmp/oldbaby.txt"
第五个模块:file模块
1 )修改已有的文件属性信息(权限,属主,属组)
ansible oldboy - m file - a "path=/oldboy/awk.txt mode=600 owner=oldboy group=oldboy"
ansible oldboy - m file - a "path=/oldboy/ mode=600 owner=oldboy group=oldboy"
=== === === === === === === === === === === === === === === === === === === === === === === === ==
问题: 如何实现批量递归修改目录属性信息 chmod - R / chown - R
=== === === === === === === === === === === === === === === === === === === === === === === === ==
2 )用于创建新的数据信息/ 删除数据信息
创建普通文件:
ansible oldboy - m file - a "path= / oldboy/ alex100. txt state= touch
创建目录文件:
ansible oldboy - m file - a "path=/oldboy/alex_dir state=directory"
创建链接文件: ( 软连接)
ansible oldboy - m file - a "src= / oldboy/ alex100. txt path= / oldboy/ alex_soft. tx
创建链接文件: ( 硬链接)
ansible oldboy - m file - a "src= / oldboy/ alex100. txt path= / oldboy/ alex_hard. tx
删除文件数据:
ansible oldboy - m file - a "path=/oldboy/alex100.txt state=absent"
ansible oldboy - m file - a "path=/oldboy/alex_dir state=absent"
第六个模块:fetch模块
模块说明:将被管理主机数据进行拉取
ansible oldboy - m fetch - a "src=/oldboy/awk.txt dest=/tmp/"
第七个模块:yum模块
模块说明:批量安装软件包(并行)
ansible oldboy - m yum - a "name=htop state=installed"
ansible oldboy - m yum - a "name=htop state=removed"
第八个模块:service模块
模块说明:管理服务运行状态
ansible oldboy - m service - a "name=crond state=stopped"
ansible oldboy - m service - a "name=crond state=started"
ansible oldboy - m service - a "name=crond state=restarted"
ansible oldboy - m service - a "name=crond state=restarted enabled=yes"
PS : 确认服务已经被systemctl命令管理
第九个模块:cron模块
模块说明:实现批量设置定时任务
模块参数:
name : 设置定时任务名称-- -- -- -- ( 用于判断定时任务是否相同)
minute : 设置时间分钟信息-- -- -- -- ( 0 - 59 * / - )
hour : 设置时间小时信息-- -- -- -- ( 0 - 23 * / - )
day : 设置时间日期信息-- -- -- -- ( 1 - 31 * / - )
month : 设置时间月份信息-- -- -- -- ( 1 - 12 * / - )
weekday: 设置时间星期信息-- -- -- -- ( 0 - 6 * / - )
job : 设置定时任务内容
模块实践:
创建定时任务:
ansible oldboy - m cron - a "name='exec shell scripts03' minute=0 hour=2 job='/bin/sh /server/scripts/oldboy.sh'"
删除定时任务:
ansible oldboy - m cron - a "name='exec shell scripts02' state=absent"
注释定时任务:
ansible oldboy - m cron - a "name='exec shell scripts' minute=0 hour=2 day=15 month=12 weekday=5 job='/bin/sh /server/scripts/oldboy.sh' disabled=yes"
解除注释定时任务:
ansible oldboy - m cron - a "name='exec shell scripts' minute=0 hour=2 day=15 month=12 weekday=5 job='/bin/sh /server/scripts/oldboy.sh' disabled=no"
=== === === === === === === === === === === === === === === === === === === === === === === === ==
扩展: 以普通用户身份设置定时任务
ansible oldboy - m cron - a "name='exec shell scripts' job='/bin/sh /server/scripts/oldboy.sh' user=alex100"
当注释定时任务和解除注释定时任务时一定要加上分,时,日,月,周这些时间信息,
否则会默认把时间调成“ * * * * * 任务信息”
15 02 15 12 5 定时任务信息 -- > * * * * * 定时任务信息
=== === === === === === === === === === === === === === === === === === === === === === === === ==
第十个模块:user(useradd usermod userdel)/group模块
模块说明:批量创建用户信息
模块参数:
comment -- 给添加用户设置注释信息 useradd - c
create_home -- 指定是否创建家目录 useradd - M
group -- 指定用户所属主要组信息 useradd - g
groups -- 指定用户所属附加组信息 useradd - G
home -- 指定用户家目录存放路径 useradd - b
name -- 指定创建用户名称
password -- 设置用户密码信息 ( 密码必须是密文)
shell -- 指定用户登录系统方式 useradd - s
state -- 可以删除用户信息 ( absent) userdel - r
uid -- 指定用户uid数值信息
创建新的用户:
ansible oldboy - m user - a "name=oldbaby10 uid=6666 group=oldboy groups=alex200 create_home=no shell=/sbin/nologin"
修改用户信息:
ansible oldboy - m user - a "name=oldbaby10 uid=7777"
删除用户信息:
ansible oldboy - m user - a "name=oldbaby20 state=absent"
如何设置密码:
ansible oldboy - m user - a 'name=oldbaby11 password=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1'
=== === === === === === === === === === === === === === === === === === === === === === === === ==
扩展说明: 如何给密码明文信息加密
方法一:
ansible all - i localhost, - m debug - a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}"
$6 $oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1
方法二:
yum install - y python- pip
优化pip源 -- > https: / / developer. aliyun. com/ mirror/ pypi? spm= a2c6h. 13651102.0 .0 .53322 f70kU73Ag
pip install passlib
python - c "from passlib.hash import sha512_crypt; import getpass;print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
=== === === === === === === === === === === === === === === === === === === === === === === === ==
第十一个模块:unarchive模块
模块信息:解压压缩包
模块参数:
ansible oldboy - m unarchive - a "src=/oldboy/foo.tgz dest=/oldboy/" 将本地压缩数据解压被管理主机上
ansible oldboy - m unarchive - a "src=/oldboy/foo.tgz dest=/oldboy/ remote_src=yes"
ansible oldboy - m unarchive - a "src=/oldboy/sersync-master.zip dest=/oldboy/"
5. 批量管理服务剧本编写:
利用剧本可以实现自动化部署服务功能
备份服务部署过程:
服务端: 下载软件程序-- 编写配置文件-- 创建虚拟用户-- 创建密码文件 ( 600 ) -- 创建备份目录 ( 属主属组) -- 开启服务
客户端: 下载软件程序-- 创建密码文件
剧本编写规范:
两部分信息: 角色信息-- 角色任务
具体编写规范: pyyaml语法结构
满足三个要求:
1 ) 满足信息缩进规范: 以两个空格作为一个缩进关系
2 ) 满足信息字典规范: 在使用冒号时后要跟上空格 冒号结尾不需要有空格 -- -- key value ( 缓存)
3 ) 满足信息列表规范: 短横线+ 空格构成列表信息
- 一级信息: 开发课程体系
- 一级信息: 运维课程体系
- 一级信息: 网络课程体系
利用剧本批量安装软件:
编写第一个剧本:
- hosts: oldboy
remote_user: root
tasks:
yum: name= htop state= installed
剧本执行操作:
ansible- playbook / etc/ ansible/ ansible_playbook/ test01. yaml
剧本语法检查:
ansible- playbook -- syntax- check / etc/ ansible/ ansible_playbook/ rsync_auto. yaml
ansible- playbook - C / etc/ ansible/ ansible_playbook/ rsync_auto. yaml 模拟执行剧本 类似彩排过程
补充: ansible颜色信息说明
绿色信息: 没有对远程主机做任何修改 查看操作
黄色信息: 对远程主机做数据修改调整
红色信息: 远程管理出现错误
紫色信息: 警告提示信息
蓝色信息: 命令和剧本执行过程信息 sh - x ++ ?
编写备份服务剧本:
第一个历程: 修改hosts文件
[ rsync_server]
172.16 .1 .41
[ rsync_client]
172.16 .1 .31 ansible_user= root ansible_password= 654321 ansible_port= 22
172.16 .1 .7
第二个历程: 编写剧本信息
- hosts: rsync_server
gather_facts: no
tasks:
#- name: install software
# yum: name= rsync state= installed
- name: edit rsync conf file
copy: src= / etc/ ansible/ ansible_playbook/ rsyncd. conf dest= /etc/
- name: create user
user: name= rsync create_home= no shell= / sbin/ nologin
- name: create password file
copy: content= 'rsync_backup:oldboy123' dest= / etc/ rsync. password mode= 600
- name: create backup dir
file: path= / backup state= directory owner= rsync group= rsync
- name: boot rsyncd server
service: name= rsyncd state= started enabled= yes
- hosts: rsync_client
gather_facts: no
tasks:
#- name: install software
# yum: name= rsync state= installed
- name: create password
copy: content= 'oldboy123' dest= / etc/ rsync. password mode= 600