23

自动化运维工具Ansible

 3 years ago
source link: http://www.cnblogs.com/Job123/p/13757334.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

介绍

更加简洁的自动化运维工具,不需要再客户端上安装,

基于python开发,

安装简单,centos上直接yum,

可以实现批量操作系统配置、批量程序的部署、批量运行命令。

Ansible常用命令参数

-a:制定模块所需的参数

-i:文件路径

-m:要使用的模块的名称

-h:帮助信息

-v:详细信息

all:针对hosts定义的所有主机执行

1、Ansible安装部署

(1)安装ansible

直接yum安装

yum install ansible -y

版本信息

auI7ZbY.png!mobile

2 ssh 免密钥登录设置(只在主控制端使用)

ansible 服务器上生成公钥和私钥

[root@mycat ansible]# ssh-keygen -t rsa -t rsa :表示使用 rsa 算法进行加密)

NjuQbue.png!mobile

// 会让你设置密钥生成路径和密钥(可以不设置默认路径和自动生成密钥)

3 )将公钥发送给客户端

[root@mycat ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

// 将公钥发送到客户端 41 上(提示输入是否连接 yes ,和客户端登陆密码)

NnaQB3Y.png!mobile

4 )测试登录客户端

Jjy2Uj3.png!mobile

使用 scp 命令也可以

[root@mycat ansible]# scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh

// 将公钥复制到客户端 42

vquqYfj.png!mobile

如果出现报错可能是

1) 检查 selinux 是否关闭

2) 公钥文件的权限是否为 600

3) Python 的版本是否一致

5 )测试登陆到客户端 42

3Y3UZfe.png!mobile

2 、编辑 hosts 文件( /etc/anside/hosts

添加组名(服务)组内可以有多个 ip

[webservers]

192.168.200.41

[dbservers]

192.168.200.42

1 )测试主机连通性

只测试 web

Ab2yAbM.png!mobile

全部测试

vQbUr2V.png!mobile

常用模块

1.      查看所有模块: ansible-doc -l

2.      查看具体某个模块: ansible-doc -s (模块的名)

格式

1 、远程命令模块

commond :默认模块(可省略)用于远程执行命令(不能使用变量)

示例:查看远程主机名

[root@mycat ansible]# ansible all -m command -a "hostname"

6fiqqyf.png!mobile

1 chdir :执行命令前,进入到指定目录

// 进入到 41 home 目录下查看

IFZVJrF.png!mobile

2 creates :判断文件是否存在,如果存在不执行(先在 41 home 下创建 1.txt

// 判断 1.txt 存在,就不执行后面的内容, skip 跳过

juiqiaU.png!mobile

// 判断 3.txt 不存在就执行后面的,在 41 上创建 2.txt

2mUBbyV.png!mobile

3 removes :判断文件是否存在,如果存在就执行

// 判断到 2.txt 就创建 4.txt

7NfM7nB.png!mobile

// 判断没有 6.txt 就不创建

VnaQBnZ.png!mobile

shell :执行远程主机上的脚本(在远程主机上调用 shell 解释器运行命令,支持 shell 的各种功能)

示例:执行 41 主机上的 3.sh

[root@mycat ansible]# ansible 192.168.200.41 -m shell -a "/home/3.sh"

rAjEBf6.png!mobile

scripts :远程主机执行主控服务器 ansible 上的脚本(把本地脚本复制到远程主机,并执行)

示例:执行 ansible 上的 test1 ,输出 41 的主机名

QrUBz2i.png!mobile

2 ping :测试连接可通性

[root@mycat ansible]# ansible webservers -m ping

Fb2mAn2.png!mobile

3 、文件模块

copy :复制文件(主要用于将管理主机上的数据信息传送给多台主机)

常用参数

1) Src :指定将本地管理主机的什么数据信息进行远程复制

// test1 复制到 41 data

Uj6reuv.png!mobile

2) backup :默认数据复制到远程主机,会覆盖原有文件(选项 yes/no 是否将原文件进行备份)

// 修改一下 test1 的内容,然后执行 backup=yes 覆盖原文件,并且备份原文件

6faA7fq.png!mobile

查看 41 data 生成了 test1 的备份

rYfEjqu.png!mobile

3 content :(可以代替 src )在文件中添加信息,直接设定文件的值

// test1 中加入 123 内容

//content 添加的内容不会添加回车符

MfiaUjj.png!mobile

// 41 上查看 test1

IBJFJrJ.png!mobile

4 group :文件数据复制到远程主机,设置文件 / 目录的属组

owner :文件数据复制到远程主机,设置文件 / 目录的属主

mode :文件数据复制到远程主机,设置文件 / 目录的权限

// 创建 test2 ,复制 test2 41 上它的组为 www ,用户为 qqq ,权限为 755

UfARJzv.png!mobile

查看

eyI7Zvr.png!mobile

5 dest required ):为必须使用的参数,必选项。将数据复制到远程节点的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

4 、管理任务计划

cron :定时任务模块

常用参数

1 Weekday/mouth/day/hour/minute (周 / / / 小时 / 分钟)

//* 代表一周都执行, */2 一周执行两次

2 Job :设置定时执行任务

3 Name :设定定时任务注释描述

//每五分钟同步一次(ntpdate 同步更新时间)

查看 41 crontab -l 查看定时任务的列表

ERnmqq3.png!mobile

4 state :删除 / 创建指定的定时任务 absent/present

FbAZNzA.png!mobile

再查看 41 上的定时任务就没有了

5 disabled :将指定定时任务进行注释

// 注释和取消注释时必须填写 job 和时间参数

rayYzif.png!mobile

查看 41 (内容被注释)

yeqE7z3.png!mobile

取消注释 disabled=no

V3yQf2V.png!mobile

再次查看

aI7Rnua.png!mobile

5 、用户模块

group :批量创建组

常用参数

1 gid :创建的组 ID

2 Name :创建组的名称

3 State :删除 / 创建组

创建组 abc gid 1055

[root@mycat ~]# ansible 192.168.200.41 -m group -a "name=abc gid=1055"

删除指定组 abc gid 1055

[root@mycat ~]# ansible 192.168.200.41 -m group -a "name=abc gid=1055 state=absent"

user :批量创建用户

常用参数

1 Groups :指定用户的属组

2 Uid :指定用户的 uid

3 Passwd :指定用户的密码(不能使用明文,只能使用密文方式)

4 Name :指定用户名

5 Home :指定用户的家目录()

6 Createhome :是否创建家目录 yes/no

7 System :是否为系统用户

8 Remove :是否连同家目录一起删掉 yes/no

9 State :创建 / 删除 absent/present

示例:创建 www1

[root@mycat ~]# ansible 192.168.200.41 -m user -a "name=www1 comment=lqb uid=1001 group=root"

删除 www1 用户(及其家目录)

[root@mycat ~]# ansible 192.168.200.41 -m user -a "name=www1 state=absent remove=yes"

6 Rsynchronize :使用 rsync 同步文件

常用参数

1 archive :归档,相当于同时开启 recursive( 递归 )linkspermstimesowner

2group-D 选项都为 yes ,默认该项为开启

3 checksum: 跳过检测 sum 值,默认关闭

4 compress: 是否开启压缩

5 copy_links :复制链接文件,默认为 no ,注意后面还有一个 links 参数

6 delete: 删除不存在的文件,默认 no

7 dest :目录路径

8 dest_port :默认目录主机上的端口 ,默认是 22 ,走的 ssh 协议

9 dirs :传速目录不进行递归,默认为 no ,即进行目录递归

10 rsync_opts rsync 参数部分

11 set_remote_user :主要用于 /etc/ansible/hosts 中定义或默认使用的用户与 rsync 使用的用户不同的情况

12 mode: push pull 模块, push 模的话,一般用于从本机向远程主机上传文件, pull 模式用于从远程主机上取文件, pull 模式用于从远程主机上取文件

// 首先需要在远程客户端下载 rsync

ansible hosts 同步到 41 tmp 目录下

EBz26ze.png!mobile

查看 41 tmp/hosts

3AVVjmY.png!mobile

Get_url 该模块主要用于从 httpftp ,https 等服务器上下载文件类似于 wget

sha256sum :下载完成后进行 sha256 check

timeout :下载超时时间,默认 10s

url :下载的 URL

url_password url_username :主要用于需要用户名密码进行验证的情况

use_proxy :是事使用代理,代理需事先在环境变更中定义

// 从网站下载页面到 data/1

buMfYrv.png!mobile

查看是否下载成功

RzqE7j6.png!mobile

Yum :软件包管理

Stat :获取远程文件信息

Service :远程主机系统服务管理

Sysctl :远程主机 sysctl 配置


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK