Ansible自动化运维
第二部分
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:剧本执行多个任务时,可以让被管控端一次性运行多个任务。
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
看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改
• 模块参数: 可以通过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数 • ansible参数: 可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、 是否sudo等。
会花费更多的时间,相应的时间/人工成本也会上升。
人工的方式因个人部署习惯千差万别,导致一些项目难以维护。
nginx keepali ved tomcat keepali ved
ngiRedis Mongodb ……
nodejs
nodejs
Server1
Server2
自动运维
列表(sequence)
depend:
task: install
- gcc
- openssl-devel
字典(mapping)
name: install jdk1.7 hosts: test_host remote_user: root sudo: false gather_facts: true
纯量(标量)
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'"
数值 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
Ansible架构图
Ansible任务执行流程
第三部分
Ansible的常用操作
Ansible安装配置 Ansible常用模块 Ansible主机清单 YAML介绍
Ansible安装配置
两种安装方式:
使用yum/apt安装(推荐)- 版本稍旧 yum/apt-get install ansible 使用pip安装(依赖pip,gcc等)- 版本新 pip install ansible
Ansible配置
/etc/ansible/ansible.cfg
Ansible主机清单 - Inventory
Inventory默认文件
/etc/ansible/hosts
Ansible主机清单 - 主机与组正则匹配
1、表示所有的主机使用all 或 *
Ansible主机清单 - 主机与组正则匹配
运维自动化的演进
没有专门的工具为我们做这些事情,使用脚本语言(Python、shell) 逐渐有了运维自动化的一些工具,比如Fabric 、Puppet、Chef、SaltStack、Ansible等 自动化运维平台
运维自动化的演进
运维自动化的目标 1、某某组件坏了可以不用管继 续睡觉 2、出现异常时点击一下就可 立即恢复 3、与监控配合,系统挂了可 以自动恢复
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: '/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"'