Ansible自动化运维

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

会花费更多的时间,相应的时间/人工成本也会上升。
人工的方式因个人部署习惯千差万别,导致一些项目难以维护。
nginx keepali ved tomcat keepali ved
nginx
tomcat
MySQL Redis Mongodb ……
nodejs
nodejs
Server1
Server2
自动运维
Ansible
自动化运维实践
IT运维管理 Ansible介绍 Ansible常用操作
Ansible实例(playbooks)
第一部分
IT运维管理
传统运维 自动运维
传统运维
传统运维带来的坑
运维工作是比较繁琐的,尤其是新系统上线的场景,一切都是从零开始。包括虚机的创建,主机名的修 改,系统的初始化等等,在机器不多的情况下人工还能应付的过来,如果有上百台机器呢?最初也是用堆人 的方法来做的。但这样的方式出错率高,而且有时还会有遗漏。只能通过相互检查的方式来验证,但这样就
Ansible配置
/etc/ansible/ansible.cfg
Ansible主机清单 - Inventory
Inventory默认文件
/etc/ansible/hosts
Ansible主机清单 - 主机与组正则匹配
1、表示所有的主机使用all 或 *
Ansible主机清单 - 主机与组正则匹配
Playbooks(tomcat部署)
Playbooks(tomcat部署)
--- name: install tomcat7 hosts: tomcat remote_user: root sudo: false gather_facts: true vars: tomcat_ver: '7.0.73' tomcat_pack: 'http://mirrors.cnnic.cn/apache/tomcat/tomcat-7/v{{ tomcat_ver }}/bin/apache-tomcat-{{ tomcat_ver }}.tar.gz' tomcat_dir: '/opt' tomcat_location: "{{ tomcat_dir }}/apache-tomcat-{{ tomcat_ver }}" tasks: - name: get tomcat7 package and unpack unarchive: src={{ tomcat_pack }} dest={{ tomcat_dir }} remote_src=yes - name: tomcat start script add utf8 lineinfile: dest: "{{ tomcat_location }}/bin/catalina.sh" insertafter: '^#JAVA_OPTS.*' line: "{{ item }}" with_items: - JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m" - JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jun.encoding=UTF-8" - name: tomcat config file add utf8 replace: dest: "{{ tomcat_location }}/conf/server.xml" regexp: 'redirectPort="8443"' replace: 'redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"'
第二部分
Ansible介绍
Ansible简介 Ansible架构图 Ansible任务执行流程
Ansible简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多老牌运维工具(puppet、cfengine、 chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块, ansible只是提供一种框架。主要包括: (1) 连接插件connection plugins:负责和被管控端实现通信; (2) host inventory:指定操作的主机,是一个配置文件里面定义管控的主机; (3) 各种模块核心模块、command模块、自定义模块; (4) 借助于插件完成记录日志邮件等功能; (5) playbook:剧本执行多个任务时,可以让被管控端一次性运行多个任务。
YAML介绍
YAML
YAML 是“Yet Another Markup Language”(仍是一种置标语言)的头字母简写,目前一般专门用来 写配置文件的语言,对于人类很友好。
YAML介绍
基本语法规则
• 大小写敏感 • 使用缩进表示层级关系 • 缩进时不允许使用Tab键,只允许使用空格。 • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
lineinfile模块
ansible mysql -m lineinfile -a "dest=/etc/hosts line='10.10.31.181 db1'"
replace模块
ansible all -m replace -a "path=/etc/hosts regexp='^10.10' replace='10.12'"
Ansible特性
(1) no agents:不需要在被管控主机上安装任何客户端;
Ansible优点
(1) 轻量级,无需在客户端安装agent,更新时,只需在操 作机上进行一次更新即可; (2) 批量任务执行可以写成脚本,而且不用分发到远程就可 以执行; (3) 使用python编写,维护更简单,ruby语法过于复杂; (4) 支持sudo。
列表(sequence)
depend:
task: install
- gcc
- openssl-devel
字典(mapping)
name: install jdk1.7 hosts: test_host remote_user: root sudo: false gather_facts: true
纯量(标量)
支持的数据结构
• 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
• 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list) • 纯量(scalars):单个的、不可再分的值
YAML介绍 – 数据结构
对像
一组键值对,使用冒号结构表示
运维自动化的演进
没有专门的工具为我们做这些事情,使用脚本语言(Python、shell) 逐渐有了运维自动化的一些工具,比如Fabric 、Puppet、Chef、SaltStack、Ansible等 自动化运维平台
运维自动化的演进
运维自动化的目标 1、某某组件坏了可以不用管继 续睡觉 2、出现异常时点击一下就可 立即恢复 3、与监控配合,系统挂了可 以自动恢复
unarchive模块
ansible java -m unarchive -a "src=java7.tar.gz copy=yes dest=/usr/java owner=root group=root"
file模块
ansible java -m file "src=/usr/java/jdk1.7 dest=/usr/java/jdk state=link owner=root group=root"
Playbooks(ping.yaml)
--- hosts: all tasks: - name: test connection ping:
# ansible-playbook ping.yaml
Playbooks(jdk部署)
Playbooks(JDK部署)
--- name: install jdk1.7 hosts: java remote_user: root sudo: false gather_facts: true vars: jdk_ver: 'jdk1.7.0_79' jdk_pack: 'jdk-7u79-linux-x64.tar.gz' tasks: - name: mkdir /usr/java file: path=/usr/java state=directory owner=root group=root - name: push jdk package and unpack unarchive: src={{ jdk_pack }} copy=yes dest=/usr/java/ owner=root group=root - name: make soft link file: src=/usr/java/{{ jdk_ver }} dest=/usr/java/jdk state=link owner=root group=root - name: setup java env blockinfile: dest: /etc/profile marker: "# {mark} JAVA ENV" block: | export JAVA_HOME=/usr/java/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
Ansible常用模块
ping模块
ansible all -m ping
command模块
ansible all -m command -a "uptime"
shell模块来自百度文库
ansible all -m shell -a "cat /dev/null > /var/log/nginx/access.log"
看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改
• 模块参数: 可以通过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数 • ansible参数: 可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、 是否sudo等。
2、通配符(*)和逻辑或(:)
Ansible主机清单 - 主机与组正则匹配
3、逻辑非和逻辑与
Ansible常用模块
Ansible运行任务的方式
Ad-hoc - ansible命令
Playbook - YAML
Ad-hoc
ansible 主机或组 -m 模块名 -a '模块参数' ansible参数 • 主机和组: 是在/etc/ansible/hosts 里进行指定的部分,动态Inventory 使用的是脚本从外部应用里获取的主机 • 模块名: 可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查
数值 number: 12 float:12.30
字符
str: 这是一行字符串 布尔值 表示true的值
true, True, TRUE, yes, Yes, YES, on, On, ON, y, Y
表示false的值 false, False, FALSE, no, No, NO, off, Off, OFF, n, N
(2) no server:无服务器端,使用时直接运行命令即可;
(3) modules in any languages:基于模块工作,可使用 任意语言开发模块; (4) yaml,not code:使用yaml语言定制剧本playbook; (5) ssh by default:基于SSH工作; (6) strong multi-tier solution:可实现多级指挥。
yum模块
ansible all -m yum -a "name=telnet state=present"
service模块
ansible all -m service -a "name=nginx state=restarted"
Ansible常用模块
copy模块
ansible all -m copy -a "src=/root/nginx.conf desc=/etc/nginx/nginx.conf owner=nginx group=nginx mode=644"
Ansible架构图
Ansible任务执行流程
第三部分
Ansible的常用操作
Ansible安装配置 Ansible常用模块 Ansible主机清单 YAML介绍
Ansible安装配置
两种安装方式:
使用yum/apt安装(推荐)- 版本稍旧 yum/apt-get install ansible 使用pip安装(依赖pip,gcc等)- 版本新 pip install ansible
第四部分
Ansibe实例(playbooks)
playbooks
tomcat自动部署 jdk自动部署 Ansible roles
Mysql主从自动部署
Playbooks(剧本)
Playbooks(剧本)简介
剧本是Ansible的配置、部署语言,由它对描述你想要远程机器执行的策略或步骤,使用YAML编写。 playbooks是由一个或多个“play”(task)组成的列表。从根本上讲task就是调用ansible的一个module。将多个 play组织在一个playbook中,运行时就会根据自上而下的顺序依次执行。
相关文档
最新文档