嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2016-12-05 7289 次浏览

作为一个伪运维,肯定要批量操作服务器集群了,单台依次操作,真是难受啊。有没有工具能够一次执行多端显示呢?看我同事在用ansible,很强大,瞎折腾了下,ok,满足需求,非常实用。不过自己还是比较笨,学一些新工具总是很慢。

安装比较痛苦,总是超时,最后用了国内镜像+本地软件包,才安装成功

sudo easy_install pip

sudo pip install ansible (一直超时)

然后提示我下载软件包在本地安装,不过还有好多依赖的东西也总是下载失败,最后通过配置镜像,安装完成。

首先下载安装包

wget http://releases.ansible.com/ansible/ansible-2.2.0.0.tar.gz

然后安装

sudo pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ /Users/zhoumengkang/Downloads/ansible-2.2.0.0.tar.gz

然后在家目录下新建一了个 hosts 文件,插入了一个分组product下面有10台机器。

$ cat ~/hosts
[product]
yq_200
yq_185
yq_167
yq_96
yq_152
yq_134
yq_225
yq_65
yq_83
yq_136

这些服务器别名都是我配置在~/.ssh/config好的。

然后在终端执行下命令:

zhoumengkang@OSX10111-3c15c2ba060a:~$ ansible -i hosts product -m shell -a 'vmstat'
yq_167 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1155180 155416 1374512    0    0     1    20    0    0  3  0 96  0  0

yq_200 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 490932 292456 2446672    0    0     2    19    1    1  3  0 96  0  0

yq_185 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 5994480 121712 1132976    0    0     1    33    0    0  4  0 96  0  0

yq_96 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  49500 166460 1366892    0    0     1    20    1    1  4  1 96  0  0

yq_152 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  51220 324788 1411120    0    0     0    12   21   11  2  0 97  0  0

yq_134 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  52520 320524 1282820    0    0     0    12   20   11  2  0 97  0  0

yq_225 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 453740 358292 1444124    0    0     0    12   13   10  2  0 97  0  0

yq_136 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 5268904 356984 1545880    0    0     0    13   10   11  2  0 97  0  0

yq_83 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 453208 351480 1427116    0    0     0    12    1    9  2  0 97  0  0

yq_65 | SUCCESS | rc=0 >>
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 297928 355376 1499784    0    0     0    12   15   10  2  0 97  0  0

这样我推送某一个文件到各个服务器,我就不用一台一台去查看文件最后的更新时间了,直接

ansible -i hosts product -m shell -a 'ls -al xxx'

就行啦,还有批量修改某个文件

ansible -i hosts product -m shell -a "sed -i 's/\$questions = array_slice(\$questions\,0\,4);//g' 12345.php"

批量复制分发的服务器(默认 hosts 位置 /etc/ansible/hosts

ansible product -m copy -a "src=/Users/zhoumengkang/xxx.jpg dest=/home/zhoumengkang/xxx.jpg"

pip 安装 python 库总超时的解决办法 https://segmentfault.com/q/1010000000162410

分享到

评论列表

如果填写邮箱了,当我我回复您的时候会给您邮箱发送消息提醒,方便交流
提交 可以使用`xxxx`来插入简短的代码碎片
1楼 wujunze 2017-04-06 16:01:16

回复
2楼 leon 2017-07-19 21:27:17

ansible 能解决git pull 吗

回复