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
验证安装
使用
配置登录密钥
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
后,在里面添加
执行命令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.1
和192.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