美文网首页
第五章:Ansible优化

第五章:Ansible优化

作者: chenkang | 来源:发表于2019-10-17 09:54 被阅读0次

文章摘自:https://www.jianshu.com/p/c82737b5485c

第一节:常用的自动化运维工具的比较:

项目 Puppet SaltStack Ansible
开发语言 Ruby Python Python
是否有客户端
是否支持二次开发 不支持 支持 支持
服务器与远程机器是否相互验证
服务器与远程机器的通信是否加密 是,标准的SSL协议 是,使用AES加密 是,使用OpenSSH
平台支持 AIX , BSD, HP-UX, Linux , Mac OSX , Solaris, Windows BSD, Linux , Mac OS X , Solaris, Windows AIX , BSD , HP-UX , Linux , Mac OS X , Solaris
是否提供Web UI 提供 提供 提供,但是是商业版本
配置文件格式 Ruby 语法格式 YAML YAML
命令行执行 不支持,大师可以通过配置模块实现 支持 支持

第二节:Ansible的一些特性

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

  1. no angents: 被管控节点无需安装agent
  2. no server: 无服务端,使用是直接调用命名
  3. modules in any languages: 基于模块工作, 可以使用任意语言开发模块
  4. 易读的语法: 基于yaml语法编写playbook
  5. 基于推送模式: 不同于puppet的拉取模式,直接由调用者控制变更在服务器上发生的时间
  6. 模块是幂等性的:定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook是安全的

第三节:ansible速度优化

1.SSH Multiplexing

ansible运行playbook时会启动很多ssh连接来执行复制文件,运行命令这样的操作.openssh支持这样一个优化,叫做ssh Multiplexing,当使用这个ssh Multiplexing的时候,多个连接到相同主机的ssh回话会共享相同的TCP连接,这样就只有第一次连接的时候需要进行TCP三次握手.

ansible会默认使用ssh Multiplexing特性,一般不需要更改配置,相关的配置项为:

[ssh_connection]
control_master = auto # 套接字不存在的情况下自动创建
control_path = $HOME/.ansible/cp/ansible-ssh-%h-%p-%r # 连接套接字存放的位置
control_persist = 60s  # 60s没有ssh连接就关闭主连接

2. pipelining

ansible执行过程中,他会基于调用的模块生成一个python脚本,然后将python脚本复制到主机上,最后执行脚本.ansible支持一个优化,叫做pipelining,在这个模式下ansible执行脚本时并不会去复制它,而是通过管道传递给ssh会话,这会让ansible的ssh会话从2个减少到1个,从而节省时间.

pipelining默认是关闭的, 因为他需要确认被管理主机上的/etc/sudoers文件中的requiretty没有启用, 格式如下:

Defaults: <username> !requiretty

ansible开启pipelining方法, 修改ansible.cfg配置文件:

[defaults]
pipelining = True

3.并发数

ansible默认并发数是5,可以用下面两种方法修改并发数:

  • 环境变量方式
export ANSIBLE_FORKS=20
  • 设置ansible.cfg
[defaults]
forks = 20

第四节:fact缓存(速度优化)

1.关闭fact

ansible playbook会默认先收集fact信息,如果不需要fact数据可以在playbook中禁用fact采集:

- name: not need facts
  hosts: myhosts
  gather_facts: False
  tasks:
    ...

也可以全局禁用fact采集:

[defaults]
gathering = explicit

另一种解决方案就是使用fact缓存,目前ansible支持下面几种fact缓存:

  • JSON文件
  • Redis
  • memcached

2.JSON文件做fact缓存示例

ansible把采集到的fact写入控制主机的json文件中,如果文件已经存在,那么ansible不会再去主机上采集fact

启用JSON文件缓存,修改ansible.cfg文件:

[defaults]
gathering = smart

# 设置超时时间
face_caching_timeout = 86400

# 使用JSON文件做为缓存后端
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_fact_cache

3. Redis fact缓存后端

使用redis作为fact缓存后端,需要在控制主机上安装redis服务并保持运行。需要安装python操作redis的软件包。

ansible.cfg配置如下:

[defaults]
gathering = smart
fact_caching_timeout = 86400
fact_caching = redis

4. Memcached fact缓存后端

使用memcached作为fact缓存后端,需要在控制主机上安装Memcached服务并保持运行,需要安装python操作memcached的软件包。

ansible.cfg配置如下:

[defaults]
gathering = smart
fact_caching_timeout = 86400 
fact_caching = memcached

转载于:https://www.cnblogs.com/breezey/p/9273205.html

第五节:ansible 与 docker

ansible内置多种云计算相关模块,如aws,openstack,docker等,下图是ansible与docker相关的模块:

img

1. 使用ansible创建docker镜像

通过playbook和dockerfile相结合的方式生成镜像, 示例如下:

FROM ansible/ubuntu14.04-ansible:stable
MAINTAINER xxx

ADD ansible /srv/ansible
WORKDIR /srv/ansible

RUN ansible-playbook web-app.yaml -c local

VOLUME /srv/project/static

WORKDIR /srv/project

EXPOSE 8000

CMD ["gunicorn_django", "-c", "gunicorn.conf.py"]

2.启动容器

ansible可以通过docker模块来操作容器,示例如下:

# docker run -p 6379:6379 --name redis -d redis:4.0.1
- name: create container
  docker_container:
    name: "{{ container_name }}"
    image: "{{ container_image }}"
    ports:
      - "6379:6379"

相关文章

  • 【ansible】ansible配置优化

    ansible配置优化 https://www.cnblogs.com/mauricewei/tag/ansible

  • 第五章:Ansible优化

    文章摘自:https://www.jianshu.com/p/c82737b5485c 第一节:常用的自动化运维工...

  • ansible速度优化

    文章来自于 carey的博客:ansible速度优化 有人说ansible的执行效率比价差,但是可以通过很多的优化...

  • ansible优化

    优化变量收集facts 在playbook执行过程中,ansible收集facts变量是很耗时的一个步骤,如果我们...

  • Ansible日常优化

    当服务器越来越多,Ansibe执行效率会变得比较慢,可以通过优化Ansible提供工作效率,由于Ansible基于...

  • Ansible性能优化

    关闭 gathering facts 如果您观察过 ansible-playbook 的执行过程中,您会发现 an...

  • Ansible 最佳实战

    优化 Ansible 速度 设置 SSH 为长连接 openssh5.6 版本后支持 Multiplexing 检...

  • 3个让Ansible性能飞起的简单优化方案!

    Ansible 性能优化 在使用 Ansible 的过程中,当管理的服务器数量增加时,不得不面对一个无法避免的问题...

  • .net性能优化

    .net性能优化《.NET 性能优化》—第四章 垃圾回收《.NET 性能优化》—第五章 泛型《.NET 性能优化》...

  • 【Ansible学习】- Ansible初探

    安装 Ansible基础 Ansible架构图 Ansible核心组件说明 Ansible:Ansible的核心程...

网友评论

      本文标题:第五章:Ansible优化

      本文链接:https://www.haomeiwen.com/subject/rncmmctx.html