基础知识介绍
1 什么是ansible
ansible 是一种自动化运维工具 , 基于Python研发 。 糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量部署、批量运行命令等功能。 仅需在管理工作站上安装 ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。 ansible 应用程序存在于 epel( 第三方社区 ) 源,依赖于很多 python 组件。
2、优点和特性
(1)、agentless:不需要在被管控主机上安装任何客户端;
(2)、ssh by default:基于SSH工作;
(3)、no server:无服务器端,使用时直接运行命令即可;
(4)、modules in any languages:模块化涉及,基于模块工作,可使用任意语言开发自定义模块;
(5)、yaml,not code:使用yaml语言定制剧本playbook,只需要告诉被监控端的期望状态,不需要关注过程;
(6) 具有幂等性,不会重复执行相同的指令。例如不会重复安装软件 。
3. 配置 文件:
(1)ansible 应用程序的 主配置文件:/etc/ansible/ansible.cfg
(2) Host定义管控主机 :/etc/ansible/hosts
4.为何使用。
1> 层级管理iplists.批量执行命令时,不用再花时间准备ip列表,以及进行ip处理。
2> 比起手动编写脚本,不需要手动打印输出,及判断返回值。
3 > 按分组做支付系统初始化,配置管理。
5.安装方式
配置fedora epel 源后yum install -y ansible
6.ansible 命令基本格式
ansible <host-pattern> [-m module_name] [-a args]
<host-pattern> |
指明需要操作的主机,以模式形式表示或者直接给定 IP ,必须事先定义在/etc/ansible/hosts文件中; all 设置所有 |
[-m module_name] |
使用何种模块进行操作,所有的操作都需要通过模块来指定 |
[-a args] |
指明模块专用参数; args 一般为 key=value 格式 |
如 ansible all -m shell -a "uptime"
获取所有主机已运行时间。
详细配置过程
一 > 整合zodiac ansible
安装ansible
编写shell脚本从 借贷宝 zodiac 运维管理系统 api接口获取当前 appid 与ip对应关系。
并转化为ansible inventory 主机组配置文件格式。
脚本会从api获取到所有appid中 状态为"online"的 iplist。
配置cron自动执行,使ansible inventory与 zodiac中appid信息一致。
脚本执行后会生成 分组策略inventory文件(文件路径/etc/ansible/hosts)
从 zodiac自动同步a.b.c.d 层级结构。额外再加一级idc为五级结构。调用父主机组可以把下属子主机组IP调出来。
结构类似 jdb.paycenter.payapi.tomcat.xy 代表 支付中心- 支付网关-tomcat-晓月 所有机器
备注:
使用[]声明一个组名
使用:children 关键字 声明下属的子组
第一层 公司名称
[jdb]
jdb.paycenter
jdb.paycenter-beta (支付beta环境)
.......
第二层 公司名称-部门小组
[jdb.paycenter:children]
jdb.paycenter.acmcore
jdb.paycenter.actcore
........
第三层 公司名称-部门小组-业务系统
[jdb.paycenter.precard:children]
jdb.paycenter.precard.nginx
jdb.paycenter.precard.tomcat
第四层 公司名称-部门小组-业务系统-应用种类
jdb.paycenter.precard.nginx:children]
jdb.paycenter.precard.nginx.xy
jdb.paycenter.precard.nginx.yz
第五层 公司名称-部门小组-业务系统-应用种类-idc信息
[jdb.paycenter.precard.nginx.xy]
100.95.0.55
100.95.0.58
.......
[jdb.paycenter.precard.nginx.yz]
100.95.0.55
100.95.0.58
可以结合常用模块,批量执行系统操作
模块名:ping 不解释
如 ansible all -m ping (ping模块不需要加-a 指定参数)
解释:探测已配置在/etc/ansible/hosts里所有主机是否存活
模块名:setup 采集主机信息
如 ansible jdb.paycenter -m setup -a ‘filter=ansible_processor‘
解释:获取支付中心所有主机CPU核数。
模块名 shell/cmd/raw 三个模块都可执行shell命令 (区别:cmd模块为基本命令执行模块,不支持变量,shell模块 为/bin/sh环境下执行。raw模块可使用管道"|")
如 ansible jdb.paycenter.payorder.nginx -m shell -a ‘hostname‘
解释:获取所有支付中心-订单系统 nginx主机名。
模块名 script 在每个远程主机执行本地脚本
ansible jdb.paycenter.*.tomcat -m script -a ‘/opt/test.sh‘
解释:在支付中心-所有tomcat机器 执行本地/opt/test.sh 的脚本。
模块名 copy 文件拷贝到远程主机
ansible jdb.paycenter.payorder.nginx[1-5].xy -m copy -a ‘src=/etc/resolv.conf dest=/etc/resolv.conf‘
解释:把本地/etc/resolv.conf 拷贝到 支付订单中心-nginx【1-5】晓月所有机器对应位置。
ps ;主机组名支持正则匹配。
ansible jdb.paycenter.*.*.xy "free -g"
在支付中心-所有idc为晓月机器 统计内存使用。
ansible 100.93.1.8* -a "ntpdate xxip"
批量同步100.93.1.80~89 的系统时间。
按机器分组,编写playbook, 做状态统一。
支付运维 部分play-book 解析
1> 初始密码,公钥,目录权限 配置统一 执行效果
2> falcon监控客户端配置管理
完成以下功能:
1 未安装falcon-agent 主机自动安装falcon-agent,并启动。
2 已安装falcon-agent,但未启动进程的主机,自动启动进程。
3 rsync falcon插件目录到所有机器。
4 发现主机存在多falcon-agent进程的异常状态,杀掉所有falcon-agent 进程并重启服务。
二> 配置jenkins,整合jenkins ansible。
部署jenkins。以管理员登入后,进入插件管理,安装ansible_plugin插件。
把每个运维日常周期性工作(如 falcon,elk客户端部署,密码,公钥,文件权限,配置统一,日志备份,切割,系统校时相关任务的执行与检测等)
配置成单独jenkins project。指定已写好的ansible-playbook路径。
并在“构建触发器“栏选择 Build periodically 配置计划任务。让每个ansible 剧本 自动运行
3> 配置邮件通知
配置
Editable Email Notification
|
日常运维任务 构建后,将结果邮件通知给运维支付组每个成员。
日常运维 ansible-playbook 任务构建后效果
如此便实现了一个 轻量级的支付系统配置管理平台。