抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

ansible是一款集群配置管理工具,安装配置简单,功能却十分强大,不需要安装额外的agent,也不需要指定帐号密码的配置文件就可以使用。

环境

1
2
系统:         Centos6.5
Python版本: 2.6

安装

安装依赖

1
yum install gcc python-devel python-pip

配置epel源

1
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

安装ansible

1
yum install -y ansible

验证安装

1
ansible --version

使用

配置登录密钥

ansible不需要使用密码,但是要求将宿主机的~/.ssh/ip_rsa.pub拷贝到目标主机的/home/user/.ssh/authorized_keys中。

操作如下,例如目标主机为192.168.1.1,用户名为app

1
2
ssh-keygen #先生成ip_rsa.pub,若已有则跳过。
ssh-copy-id -i ~/.ssh/ip_rsa.pub app@192.168.1.1

第一个命令

无密码ssh配置好后, 来执行第一个命令 ansible关于hosts的配置位于/etc/ansible/hosts ,如果没有则新建。centos上建立后会自带一份模板文件,详细可以看官方文档。 创建了/etc/ansible/hosts后,在里面添加

1
2
192.168.1.1
192.168.1.2

执行命令ansible all -m ping,将会得到两台主机的ping命令返回结果

组配置

这里直接上配置格式

1
2
3
4
5
6
7
[组名A]
hosta
hostb

[组名B]
hostc
hostb

例如我配置成这样

1
2
3
4
5
6
7
[ino]
192.168.1.1
192.168.1.2

[app]
192.168.2.1
192.168.2.1

这样我在执行操作就可以选择不同的组来操作,例如ping命令absible ino -m ping

此操作就会同时ping 192.168.1.1192.168.1.2,若要指定全部host则可用ansible all -m ping

上面的host是最简单的配置,下面说带别名和端口的,格式如下

1
2
3
[别名]   [ssh端口默认22,非22就自定义]  [host地址]
ino-01 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1
ino-02 ansible_ssh_port=22 ansible_ssh_host=192.168.1.2

这样直接执行ansible 带上别名 也是可以的。如ansible ino-01 -m ping

常用命令

(-a “ “括号内带命令, -m 后面跟模块名)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
查看ansible的所有模块
#ansible-doc -l

查看模块命令的具体使用方法
#ansible-doc -s user(添加模块名)
查看远程主机登陆信息
#ansible ino-01 -m command -a "uptime"
测试远程主机的运行状态
#ansible ino-01 -m ping
指定使用的用户名为app
#ansible ino-01 -m ping -u app
使用file模块创建目录,类似于mkdir -p
ansible ino-01 -m file -a "dest=/path/to/c mode=755 owner=root group=root state=directory"
使用file模块删除文件或者目录
ansible ino-01 -m file -a "dest=/path/to/c state=absent"
使用shell或者raw模块查看远程主机的特定进程
#ansible app -m shell -a "ps -ef | grep tomcat"
#ansible app -m raw -a "pa -ef | grep tomcat"
远程文件信息查看
#ansible ino -m command -a "ls -al /tmp/a.txt"
在远程主机创建目录
#ansible ino -m file -a "path=/tmp/test.txt state=directory"
远程文件符号链接删除
#ansible ino -m file -a "path=/tmp/a.txt state=absent"
将本地文件“/etc/ansible/ansible.cfg”复制到远程服务器
#ansible all -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
重启主机组的所有主机,每次重启10台
#ansible all -a "/sbin/reboot/" -f 10
使用shell模块在远程主机执行命令
#ansible all -m shell -a "echo $TERM"
创建一个新的用户,查看并删除
#ansible ino-01 -m command -a "useradd -s /sbin/nologin -M user1"
#ansible ino-01 -m command -a "id user1"
#ansible ino-01 -m command -a "userdel user1"
后台执行命令的最大时间是1800s即30分钟,-p每60s检查下状态默认15s
ansible all -B 1800 -p 60 -a "/usr/bin/long_running_operation –do-stuff"
搜集网卡信息
ansible all -m setup -a "filter=ansible_eth[0-2]"
======================================================================
管理软件包
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
确保rpm包已经安装,但不更新
#ansible ino-01 -m yum -a "name=python state=present"
确保安装包到一个特定的版本
#ansible ino-01 -m yum -a "name=python-2.7 state=present"
确保一个软件包是最新版本
#ansible ino-01 -m yum -a "name=python state=latest"
确保一个软件包没有被安装
#ansible ino-01 -m yum -a "name=python state=absent"
安装httpd,启动,并检查进程
#ansible ino-01 -m yum -a "name=httpd state=installed"
#ansible ino-01 -m service -a "name=httpd state=started"
#ansible ino-01 -m shell -a "ps -ef |grep httpd"
======================================================================
服务管理
确保app组所有主机的httpd是启动的
ansible app -m service -a "name=httpd state=started"
重启app组所有主机的httpd服务
ansible app -m service -a "name=httpd state=restarted"
确保app组所有主机的httpd是关闭的
ansible app -m service -a "name=httpd state=stopped"
启动app组所有主机的nginx服务,确保开机时启动
ansible app -m service -a "name=nginx state=started enabled=yes"
======================================================================
搜集系统信息
搜索主机的所有信息
#ansible all -m setup
搜集和内存相关的信息
#ansible all -m setup -a "filter=ansible_*_mb"
======================================================================
后台运行
长时间运行的操作可以放到后台执行,ansible会检查任务的状态,在主机执行的同一个任务会分配同一个job ID
后台执行命令3600s,-B表示后台执行的时间
#ansible all -B 3600 -a "/usr/bin/long_running_operation –do-stuff"
检查任务的状态
ansible all -m async_status -a "jid=123456789"

常用命令来源于http://www.cnblogs.com/wangtao1993/p/5997199.html

评论