自动化运维常识
运维工作
系统安装 物理机、虚拟机
程序包 安装、配置、服务启动
批量操作
程序发布
监控
运维层次
OS previsioning
物理机 PXE、Cobbler(选择多版本操作系统)
虚拟机 Image Templates
Configuration
puppet (ruby)
saltstack (python)
chef
cfengine
Command and Control
fabric
预发布验证
新代码先发布到测试服务器上(配置和生产环境相同,未接入调度器)
程序发布
不能影响用户体验
系统不能停机
不能导致系统故障或造成系统不可用
灰度发布
/webapp/shopping-1.1 /webapp/app/shopping 链接文件指向shopping* /webapp/shopping-1.2 /webapp/app/shopping 如果1.2版本有问题,修改链接指向1.1,版本回滚 step1: 在调度器上关闭一批服务器,更改主机模式为maintanance模式(用户Session不会第一时间被调度到其它Real Server上) step2: 关闭服务 step3: 部署新版本的应用程序 step4: 启动服务 step5: 在调度器上启用着一批服务器 工具使用 自动化灰度发布的脚本、平台
运维工具分类
agent
puppet
func
agentless
ansible
fabric
Ansible初识
集合众多开源工具功能
Configuration cfengine Chef Puppet Deployment Capistrano Fabirc Ad-Hoc Tasks Func Multi-Tier Orchestration Juju sort of
开发语言python
核心模块
paramiko SSH客户端API
PyYAML 模块编排
Jinja2 模板语言
核心组件
SSH协议认证或密码认证
基于密钥认证
在inventor中明文指定用户名密码
支持主从模式
master
ansible is a ssh client
salve
ssh server
支持自定义模块
Playbook
细致化安装流
Ansible简单使用
安装
yum源安装
1 yum install -y ansible
编译安装
# 解决依赖
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto tar -xvzf ansible-2.4.2.tar.gz cd ansible-2.4.2 python setup.py build python setup.py install mkdir /etc/ansible cp -r examples/* /etc/ansible
简介
Name : ansible Arch : noarch Version : 2.4.2.0 Release : 2.el7 Size : 38 M Repo : installed From repo : extras Summary : SSH-based configuration management, deployment, and task execution system URL : http://ansible.com License : GPLv3+ Description : : Ansible is a radically simple model-driven configuration management, : multi-node deployment, and remote task execution system. Ansible works : over SSH and does not require any software or daemons to be installed : on remote nodes. Extension modules can be written in any language and : are transferred to managed machines automatically.
文件解析
主配置文件 /etc/ansible/ansible.cfg 主机清单 /etc/ansible/hosts 角色配置 /etc/ansible/roles 剧本文件 /usr/bin/ansible-playbook 卫星主机 /usr/bin/ansible-galaxy /usr/bin/ansible-galaxy-2 /usr/bin/ansible-galaxy-2.7 使用文档 /usr/bin/ansible-doc /usr/bin/ansible-doc-2 /usr/bin/ansible-doc-2.7
查看模块及功能参数
ansible-doc -l (非常多,就不列出了)
ansible-doc -s <MODULE_NAME>
简单语法分析
# 语法 ansible <host-pattern> [options] -f FORKS, --forks FORKS # 并发执行的线程数,一个线程对应一个HOST -m MODULE_NAME, --module-name MODULE_NAME # 指定以哪个模块运行 -a MODULE_ARGS, --args MODULE_ARGS # 指定模块特有的参数
常用模块
command 远程执行一条命令 cron 添加一条计划任务 name 每条任务最好指定以个名字 day hour minute month weekday job 指定运行的命令 state 指定命令是生效还是移除 present absent user 指定以哪个用户身份执行任务 ... -a 'name=root ... ' user 用户管理 group 组管理 copy 文件复制 ansible-doc -s copy content 指定的内容将被输出到目标文件中,与src不能同时使用 src 指定原文件or目录 desc 远程主机的绝对路径 ... file 文件管理 链接文件 ansible all -m file -a 'path=/tmp/fatab.link src=/etc/fstab state=link' ping 测试连通性 ansible all -m ping service 服务管理 enabled 开机启动 name 服务名 state started stopped restarted ansible webserver -m service -a 'enabled=true name=httpd state=started' shell 执行命令 # ansible all -m command -a 'echo redhat | passwd --stdin admin' 执行成功但未生效,-a 参数不识别管道符,变量 ansible all -m shell -a 'echo redhat | passwd --stdin admin' script 执行脚本 # 将本地的脚本发送到远程主机执行,脚本文件以相对路径指定 ansible all -m script -a 'xxx.sh' yum 软件包安装 安装 ansible all -m yum -a 'name=httpd' 卸载 ansible all -m yum -a 'name=httpd state=absent' setup 收集facts信息 # 每个被管理节点在接受命令前,会将当前主机的相关信息(操作系统、IP地址、MAC地址等)报告给ansible主机 ansible all -m setup
Ansible简单实例
1个控制端 + 3个被控制端
Control 192.168.180.128
Client1 192.168.180.130
Client2 192.168.180.131
Client3 192.168.180.132
step1: # ansible 通过ssh实现配置管理、应用部署、任务执行等功能,因此,事先配置ansible端基于密钥认证于个被管理节点通信 ssh-keygen -r rsa -P '' ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.130 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.131 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.132 step2: # 指定主机清单 备份一下hosts文件 cd /etc/ansible/ cp hosts {,.backup} vim hosts # 把原文配置删除,自己指定host清单 :.,$d [webserver] 192.168.180.130 192.168.180.131 [dbserver] 192.168.180.132 step3: # 测试主机清单是否生效 # 是否可以管理远程主机 ansible all -m command -a 'ip addr' ansible webserver -a 'ip addr' ansible 192.168.180.130 -a 'ip addr'