大型架构及配置技术之Ansible

大型架构及配置技术之Ansible


一、ansible简介

1、什么是ansible ?

Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议。其是基于Python研发,糅合了很多老运维工具的优点实现了批量操作系统配置,批量程序的部署,批量运行命令等功能。
2、ansible可以实现:
1)自动化部署APP
2)自动化管理配置项
3)自动化的持续交付
4)自动化的(AWS)云服务管理
3、为什么要选择ansible?

1)活跃度(社区活跃度)
2)学习成本
3)使用成本
4)编码语言
5)性能
6)使用是否广泛

ansible优点:
1)仅需ssh和python即可使用
2)无需客户端
ansible缺点:
对于几千台、上万台机器的操作,还不清楚性能、效率情况如何,需要进一步了解。
4、ansible特性
1)模块化设计,调用特定的模块来完成特定任务
2)基于python语言实现
paramiko
PyYAML (半结构化语言)
jinja2
3)其模块支持JSON等标准输出格式,可采用任何编程语言重写
4)部署简单
5)主从模式工作
6)支持自定义模块
7)支持playbook
8)易于使用
9)支持多层部署
10)支持异构IT环境

二、ansible安装

机器准备:
1:ansible 192.168.1.10 管理机器
2:web1 192.168.1.11 托管机器
3:web2 192.168.1.12 托管机器
4:db1 192.168.1.21 托管机器
5:db2 192.168.1.22 托管机器
6:cache 192.168.1.33 托管机器

管理机器:
要求python2.6或python2.7
需要安装ansible使用模块:
paramiko
PyYAML
Jinja2
httplib2
six
托管机器:
Ansible默认通过 SSH 协议管理机器
被管理主机要开吭 ssh 服务,允许 ansible 主机登彔
在托管节点上也需要安装 Python 2.5 或以上的版本
如果托管节点上开启了SElinux,需要安装libselinux-python

1、在ansible管理机器上配置yum源
2、安装ansible
]#yum -y install ansible
3、安装完成查看版本信息
]#ansible –version

三、主机管理

ansible 的配置文件是 ansible.cfg
ansible.cfg 的查找顺序是

1  ANSIBLE_CONFIG 变量定义的配置文件
2 当前目录下的 ./ansible.cfg 文件
3 前用户家目录下 ~/ansible.cfg 文件
4 /etc/ansible/ansible.cfg 文件
ansible.cfg 中 inventony 指定主机分组文件的路径和地址,默认分组文件 hosts

1、主机定义于与分组管理——编辑/etc/ansible/hosts文件

1.1、格式:

[组名称]
主机名称或ip地址, 登陆用户名,密码、端口等信息

1.2、测试:

ansible [组名称] --list-hosts

2、主机定义与分组——inventory 参数说明

1)ansible_ssh_host

将要连接的进程主机名与你想要设定的主机的别名不同的话,可通过此变量设置。

2)ansible_ssh_port

ssh端口号,如果不是默认的端口号,通过此变量设置。

3)ansible_ssh_user

默认的 ssh 用户名

4)ansible_ssh_pass

ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

5)ansible_sudo_pass

sudo 密码(建议使用 --ask-sudo-pass)

6 ) ansible_sudo_exe (new in version 1.8)

sudo 命令路径(适用亍1.8及以上版本)

7)ansible_connection

不主机的连接类型.比如:local, ssh 或者 paramiko。Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 ‘smart‘,‘smart‘ 方式会根据是否支持ControlPersist, 来判断‘ssh‘ 方式是否可行。

8)ansible_ssh_private_key_file

ssh 使用的私钥文件,适用亍有多个密钥,而你不想使用SSH 代理的情况

9)ansible_shell_type

目标系统的shell类型.默认情况下,命令的执行使用 ‘sh‘语法,可设置为 ‘csh‘ 或 ‘fish‘。

10)ansible_python_interpreter

目标主机的 python 路径.适用于的情况: 系统中有多个Python, 或者命令路径不是"/usr/bin/python”
[web]
web[1:2]
[db]
db1
db2
[app:children]  # 指定子组
web
db
[app:vars]
ansible_ssh_user="root"
ansible_ssh_pass="123456"
[other]
cache           ansible_ssh_user="root" ansible_ssh_pass="123456"

3、动态主机

ansible 的inventony 文件可以是静态也可以是脚本(输出格式 json)
修改ansible.cfg
]#mkdir /var/myansible
]#cd /var/myansible
]#vim ansible.cfg

[defaults]
inventory      = urscript

编写usrscript脚本

#!/bin/bash
echo ‘
{
    "web"   : ["web1", "web2"],
    "db"    : ["db1", "db2"],
    "other" : ["cache"]
}‘

四、批量执行

1、ansible命令基础

ansible 主机分组 -m 模块 -a ‘命令和参数‘
– host-pattern 主机戒定义的分组
– -M 指定模块路径
– -m 使用模块,默认 command 模块
– -a or --args 模块参数
– -i inventory 文件路径,或可执行脚本
– -k 使用交互式登录密码
– -e 定义变量
– -v 详细信息,-vvvv 开启 debug 模式

2、列出要执行的主机,不执行任何操作

]#ansible all –list-hosts

3、批量检测主机

]#ansible all -m ping 

4、批量执行命令

]#ansible all -m command -a ‘id‘ -k

5、给所有主机部署密钥

]#ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key=‘$(< /root/.ssh/id_rsa.pub)‘" -k

注意:
报错:"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host‘s fingerprint to your known_hosts file to manage this host."
解决方法:

修改ansible.cfg
host_key_checking = False

五、模块

1) ansible-doc

    模块的手册,相当于shell的man
    ansible-doc -l  //列出所有模块
    ansible-doc  模块名        //查看帮助

2) ping模块

    测试网络连通性,ping模块没有参数(测试ssh的连通性)

3) command模块

    默认模块,远程执行命令没有启用 shell ,所有shell 相关特性命令无法使用,例如 < > | &
    raw    模块,没有 chdir create remove 等参数,能执行大部分操作
    shell  模块,启动 /bin/sh 运行命令,可以执行所有操作
    用法:ansible 主机分组 -m command -a ‘命令和参数‘
    测试:
    ansible cache -m command -a ‘chdir=/tmp touch f1‘   创建成功
    ansible cache -m shell -a ‘chdir=/tmp touch f2‘             创建成功
    ansible cache -m raw -a ‘chdir=/tmp touch f3‘               文件可以创建,但无法切换目录,文件在用户家目录下生成。

4) shell | raw 模块

    shell 模块用法基本和command一样,区别是 shell模块是通过/bin/sh迚行执行命令,可以执行任意命令
    raw模块,用法和shell 模块一样 ,可以执行任意命令
    区别是 raw 没有chdir、creates、removes参数

5) script模块

    处理复杂操作,编写脚本
    测试:
    #!/bin/bash
    id  zhang3
    if [ $? != 0 ];then
    useradd li4
    echo 123456 |passwd --stdin li4
    fi
    ansible all -m scriopt -a "urscriopt.sh"

6) copy 模块

复制文件到进程主机
– src:要复制到进程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync
– dest:必选项。进程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
– backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
– force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
    测试:
    复制文件
    ]#ansible cache -m copy -a ‘src=/root/a.log dest=/root/a.log‘
    复制目录:
    ]#ansible cache -m copy -a ‘src=urdir  dest=/root/‘

7) lineinfile | replace 模块

– 类似 sed 的一种行编辑替换模块
– path 目的文件
– regexp 正则表达式
– line 替换后的结果
利用 lineinfile 修改 /etc/sysconfig/network-scriopts/ifcfg-eth0
]#ansible cache -m lineinfile -a ‘path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^ONBOOT" line="ONBOOT=\"no\""

– 替换指定字符
利用 replace 修改 /etc/sysconfig/network-scriopts/ifcfg-eth0
]#ansible cache -m replace -a ‘path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^(ONBOOT=).*" replace="\1\"yes\""‘

8) yum模块

– 使用yum包管理器来管理软件包
– config_file:yum的配置文件
– disable_gpg_check:关闭gpg_check
– disablerepo:不启用某个源
– enablerepo:启用某个源
– name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
– state:状态(present,absent,latest)

删除软件包
]#ansible cache -m yum -a ‘name=”lftp” state=”removed”‘
删除多个软件包
]#ansible cache -m yum -a ‘name=”lftp,lrzsz” state=”removed”‘

安装软件包
]#ansible cache -m yum -a ‘name=”lftp” ‘
安装多个软件包
]#ansible cache -m yum -a ‘name=”lftp,lrzsz” ‘

9) service 模块

– name:必选项,服务名称
– enabled:是否开机启动 yes|no
– sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
– state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
测试:
]#ansible cache -m service -a ‘ name=”sshd” enabled=”yes” state=”started” ‘

10) setup 模块

– 主要用亍获取主机信息,在playbooks里经常会用到的一个参数gather_facts就不该模块相关。setup模块下经常使用的一个参数是filter参数。
– filter 可以过滤到我们需要的信息
]# ansible cache -m setup -a ‘filter="ansible_os_family"‘

练习:

安装apache,修改apache监听端口为8080,设置默认主页,启动服务,设置开机自启。

]#ansible web -m yum -a ‘name=”httpd”‘
]#ansible web -m lineinfile -a ‘path=/etc/httpd/conf/httpd.conf  regexp=”^Listen”  line=”Listen 8080”‘
]#ansible web -m shell -a ‘echo  this is test_web > /var/www/html/index.html‘
]#ansible web -m service -a ‘name=”httpd” state=”restarted”  enabled=yes‘

原文地址:http://blog.51cto.com/11389430/2150751

时间: 2024-10-13 16:00:04

大型架构及配置技术之Ansible的相关文章

大型网站优化-memcache技术

大型网站优化-memcache技术 memory+cache 内存缓存 memcache简介 memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提升效果十分显著 .这是一套开放源代码软件,以BSD license授权发布.[摘取自百度百科] 官网:http://memcached.org/ 分布式:多台Memcache服务器来管理数据的架构. 缓存

构建大型云计算平台分布式技术的实践

作者 章文嵩 发布于 2014年7月23日 | 本文基于章文嵩博士在2014年7月18日的全球架构师峰会ArchSummit上的主题演讲<构建大型云计算平台分布式技术的实践>整理而成. 演讲者简介 章文嵩博士是阿里集团的高级研究员与副总裁,主要负责基础核心软件研发和云计算产品研发.推进网络软硬件方面的性能优化.搭建下一代高可扩展低碳低成本电子商务基础设施.他也是开放源码及Linux内核的开发者,著名的Linux集群项目LVS(Linux Virtual Server)的创始人和主要开发人员.L

Linux:综合架构批量管理服务(ansible)-- 下

综合架构批量管理服务之--ansible 00. 介绍部分 1) 利用剧本功能简单完成服务一键化部署 2) 主机清单配置 3) 剧本的扩展配置功能 4) 多个剧本如何进行整合 5) 剧本的角色目录??? 01. 知识回顾 1) 将所有模块进行了讲解说明 command 模块: 在远程主机上执行命令操作 默认模块 shell 模块: 在远程主机上执行命令操作 万能模块 PS: 有时剧本不能反复执行!!! script 模块: 批量执行本地脚本 copy 模块: 用于批量分发传输数据信息 fetch

Linux之LAMP架构搭建配置

Linux之LAMP架构搭建配置 LAMP简介 LAMP定义指Linux(操作系统).ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台. 对于大流量.大并发量的网站系统架构来说,除了硬件上使用高性能的服务器.负载均衡.CDN 等之外,在软件架构上需要重点关注下面几个环节: 使用高性能的操作系统 (OS) . 高性能的网页服务器 (Web Server) .高性能的数据库(Data

Hive运行架构及配置部署

Hive 运行架构 由Facebook开源,最初用于解决海量结构化的日志数据统计问题:ETL工具: 构建于Hadoop的HDFS和MapReduce智商,用于管理和查询结构化/非结构化数据的数据仓库: 设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据: 使用HQL作为查询接口: 使用HDFS作为存储底层: 使用MapReduce作为执行层: 2008年facebook把Hive项目贡献给Apache: 1.Hive的缺点 Hive的HQL表达能力有限:有些复杂运算用HQL不

多研究些架构,少谈些框架(4):架构师是技术的使用者

架构师是技术的使用者而不是信徒 我承认我是标题党, 为什么要写这篇充满争议的文章?目前架构师这个职位特别火热,程序员的目标都是成为一个令人尊敬的架构师.但是我们真的理解架构师应该做些什么?很多人把架构师和框架师等同起来,认为研究框架多的才是架构师 下面说的情况请勿对号入座. 盲目的追新:技术人员的喜好往往是什么技术流行就追什么技术.现在的技术发展快,前后端不断涌现各种框架,我们恨不得把这些框架都用在自己的项目里才行,要不然怎么好意思和别人打招呼啊. 我亲身经历,有个技术人员一定要把原来单元测试框

log4net架构、配置、使用

架构说明 配置 使用 参考: https://www.cnblogs.com/LiZhiW/p/4317198.html https://www.jianshu.com/p/6c9b26db6d6d https://segmentfault.com/a/1190000010866959#articleHeader1 https://stackoverrun.com/cn/q/261563 https://yq.aliyun.com/articles/293129/ https://logging

互联网DSP广告系统架构及关键技术解析

互联网DSP广告系统架构及关键技术解析 宿逆 关注 1.9 2017.10.09 17:05* 字数 8206 阅读 10271评论 2喜欢 60 广告和网络游戏是互联网企业主要的盈利模式 广告是广告主通过媒体以尽可能低成本的方式与用户达成接触的商业行为.也就是说按照某种市场意图接触相应人群,影响其中潜在用户,使其选择广告主产品的几率增加,或对广告主品牌产生认同,通过长期的影响逐步形成用户对品牌的转化. 一个好的DSP系统需要满足: 拥有强大的RTB(Real-Time Bidding)的基础设

MHA高可用架构部署配置实例

MHA高可用架构部署配置实例 一.前言 1.1What's MHA?--原理简介 ? MHA--Master High Availability,目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的MySQL故障切换和主从提升的高可用软件. ? 这里我们提到了两个个关键点:"高可用","故障切换".我们逐一简单介绍一下这两者的含义. 1.1.1何为高可用? ? 高可用就是可用性强,在一定条件下(某个服务器出错或宕机)可以保证服务器可以正常运行,在一定程度