综合架构(批量管理服务)

批量管理服务

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.53322f70kU73Ag

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值