大型架构及配置技术

一.ansible

  • 简介:2013年推出的一款TI自动化和DevOps软件,2015年被RedHat收购,是基于Python研发,糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能

ansible可以实现:

-自动化部署app

-自动化管理配置项

-自动化持续交付

-自动化(AWS)云服务管理

选择ansible---活跃度 学习成本  使用成本 编码语言(python 集成在系统底层) 性能  使用是否广泛

优点--  只需要ssh和Python即可使用,无客户端,功能强大模块丰富,容易上手门卡低,基于Python开发做二次开发更容易,使用公司比较多,社区活跃

特性: ①模块化设计  ②基于Python语言实现 (paramiko  PyYAML半结构化语言  jinja2 ) ③JSON输出

  • 执行流程

读取配置->读取主机配置->使用host-pattern过滤器列表->根据参数确定执行模块和配置->runner执行返回->输出,结束

  • 主机定义与分组

ansible之后可以做一些简单的任务

ansible配置文件查找顺序

-首席检测ANSIBLE_CONFIG变量定义的配置文件

-其次检测当前目录下的./ansible.cfg文件

-再次检查当前用户家目录下 ~/ansible.cfg文件

  • /etc/ansible/ansible.cfg是ansible的默认配置文件路径

主机定义与分组

ansible.cfg配置文件

-inventory  定义托管主机地址配置文件路径名

-inventory指定的配置文件,写入远程主机的地址

格式#表示注释

[组名称]

主机名称或ip地址.其他参数

样例:

[web]

web1

web2

主机定义与分组

ansible.cfg配置文件

-ssh主机key验证配置参数

-host_key_checking=False

如果为False,不需要输入yes

如果为True,等待输入yes

  • ansible命令基础

ansible主机集合   -m模块名称   -a模块参数

-主机集合 主机名或组名 多个使用"逗号"分隔

-m  模块名称 默认 command 模块

-a  or  --args  模块参数

其他参数

-i  inventory文件路径 或可执行脚本

-k 使用交互式登录密码

-e  定义变量

-v 显示详细信息

ansible  all  --list-hosts  (列出要执行的主机)

ansible  all  -m  ping  -k  (批量监测主机)

部署证书文件

ansible是通过ssh在远程执行命令的

ssh远程执行命令必须要通过认证才行

密码写入配置文件安全性很差

使用key方式认证

给所有主机部署公钥

-没有秘钥命令执行会出错

ansible  web  -a 'uotime'

cd  /root/.ssh

ssh-keygen  -t  rsa -b 2048  -N ''  -f key

ssh-copy-id  -i  key.pub  主机名称

  • inventory扩展参数

ansible_ssh_port

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

ansible_ssh_user  默认的ssh 用户名

ansible_ssh_pass

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

ansible_ssh_private_key_file

ssh使用的私钥文件,使用于有多个秘钥,而你不想使用ssh代理的情况

vars变量定义,用与组名后面

例如

[all:vars]

ansible_ssh_private_key_file="/root/.ssh/key"

children子组定义,用于引用其他组名称

例如

[app:children]

web

db

自定义配置文件

-创建文件夹myansible创建配置文件ansible.cfg

[defaults]

inventory=myhost

host_key_checking=False

配置主机文件

[app1]

web1

db1

  • 动态主机

-无线可能

-ansible  inventory  包含静态和动态的inventory指在文件/etc/ansible/hosts中指定的主机和组,

动态inventory指通过外部脚本获取主机列表,按照其要求格式返回给ansilbe命令

json 对象表示法 一种基于文本独立与语言的轻量级数据交换格式

批量配置管理

ansible-doc和平模块

ansible-doc

-模块的手册相当与shell的man,很重要

ansible-doc  -l  列出所有模块

ansible-doc modulename   查看帮助

ping模块

-测试网络链接通性,平模块没有参数

-ansible host-pattern  -m  ping

command模块

默认模块,远程执行命令

ansible host-pattern  -m  command  -a  '[args]'

若命令里面有如下字符则执行不成功 <>| & ;command  模块不能解析系统变量

该模块不启动动shell直接在ssh进程中执行,所有使用到shell的命令执行都会失败

下列命令执行会失败

ansible  all -m  command  -a  'ps  aux | grep shh'

shell模块用法基本和command一样,区别是shell模块是通过/bin/sh进行命令.可以执行任意命令

不能执行交互式的命令  例如 vim  top等

变量解析

ansible执行命令是二次解析

第一次在本机解析 第二次在执行机器解析

需要第二次解析的变量转义(\)

文件在哪里

文件在用户家目录

ansible是使用ssh多次链接执行

连接退出以后之前的状态就全部失效了

解决方法:使用chdir 代替cd命令

ansible cache -m  shell  -a  'chdir=/tmp touch testfule'

sciptmokuai 

在本地写脚本,然后使用script模块批量执行  

ansible  web  -m  script  -a  'utscript'

yum模块

-使用域名包管理器来管理软件包

-name:要进行操作的软件包名字

state:动作(installed,removed)

-install  ====installed

-remove====removed

ansible  db  -m  yum  -a '那么="lrzsz"  state=removed'

service模块

-name:必选项 服务名称

enabled :是否开机自启 yes|no

sleep:执行restarted 会在stop和start之间沉睡几秒钟

state:对当前服务执行启动,停止重启重新加载等操作(started,stoppedrestarted,reloaded)

ansible  cache -吗 service  -a  'anmed="sshd" enabled="yes" "statestarted"

copy有模块

-赋值文件到远程主机

src:赋值本地文件到远程主机,绝对路径和相对路径都可,路径为目录是会递归复制,若路径以"/"结尾,支付至目录里的内容,若不易"/"结尾,则复制包含目录在内的整个内容,类似于rsync

dest:必选项  远程主机的绝对路径 如果源文件是一个目录 哪该路径必须是目录

backup:覆盖先前备份源文件,备份文件包含时间信息.有两个选择:yes|no

force:若目标主机包含该文件,大内容不同,如果设置为yes,则强制覆盖设置为no 则只有当目标主机的目标位置不催在该文件时才复制.默认为yes

linesinfilemokuai

类似与sed的一种行编辑替换模块

path  目标文件

regrep 正则表达式,要修改的行

line  最终修改结果

ansible db  -吗 lineinfile -a  'path="/etc/my.cnf"  regrep="^binlog-format"  line="binlog-format=row"'

replace模块

类似于sed的一种编辑替代模块

path目的文件

regep正则表达式

replace替换后的结果

替换指定字符 row --> maixed

ansible db  -m  replace -a ' path="/etc/mycnf"   regrep="row"  replcae="mixed"'

setup模块

主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块行管,setup模块下经常用的是filter参数

filter过滤所需信息

ansible cache -吗 setup  -a 'filter=ansible_distribution'

猜你喜欢

转载自www.cnblogs.com/aaaa111/p/11848452.html