其实对python熟悉的人都可以自己用paramiko来写任务的分发系统,再结合gevent的协程就能实现异步的处理。
如果只想用工具的朋友可以使用一些工具,类似{puppet,saltstack,fabric,ansible,chef}等,其实这些工具的都是很好用的,不过于学习的成本,我建议大家使用ansible,这个模块封装的不错,功能也很齐全。
我们首先先安装ansible把
复制代码 代码如下:
pip install ansible #其实我建议大家用ubuntu的系统,ubuntu的系统对开源的东西都支持的很好,而且apt的功能要比yum强不少。
复制代码 代码如下:
mkdir -p /etc/ansible/ #给ansible创建一个配置文件的目录
1
2
3
4
5
6
7
|
more hosts
[Web]
192.168 . 6.210 : 22 ansible_ssh_user = root ansible_ssh_pass = 123
[Dubbo + Zookeeper]
192.168 . 6.212 : 22 ansible_ssh_user = root ansible_ssh_pass = 123
[Mysql]
192.168 . 6.213 : 22 ansible_ssh_user = root ansible_ssh_pass = 123
|
如果你的机器没有做无密码访问,那么就在后面加上密码吧,如果你的SSH端口做过改动,那么请在IP后面加上端口号。如果有报错的话,你先安装一下apt-get install sshpass
做完上面这些准备工作,我们的ansible就可以运行了
1
2
3
4
5
6
7
8
9
|
ansible Boss + Merchant + Web - m shell - a "hostname;ip a" 这里的Boss + Merchant + Web是我在hosts文件中定义的主机组 - m后面是接的模块 - a 就、后面是索要执行的命令
192.168 . 6.210 | success | rc = 0 >>
Pay - Boss + Merchant + Web
1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link / loopback 00 : 00 : 00 : 00 : 00 : 00 brd 00 : 00 : 00 : 00 : 00 : 00
inet 127.0 . 0.1 / 8 scope host lo
2 : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link / ether 00 : 0c : 29 : 96 : 06 : 4e brd ff:ff:ff:ff:ff:ff
inet 192.168 . 6.210 / 24 brd 192.168 . 6.255 scope global eth0
|
模块的信息可以从官网的教程下仔细查看,反正我一般都用shell。。。
现在来玩玩playbook,其实就是把命令保存到文件中,再执行,也就是一回事,不必非要用这个东西,我们自己也能写代码来封装这些命令
1
2
3
4
5
6
7
8
9
|
mkdir - p / etc / ansible / playbooks
touch boss.yml
more boss.yml
- hosts : Boss + Merchant + Web hosts 文件中的主机组
remote_user : root
tasks :
- name : update_boss 任务代号
shell : source / etc / profile;whoami;uptime;cat / etc / issue 模块 + 命令
# shell : echo "xxxxxxxxxxxxxxxxx"
|
执行
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
|
ansible - playbook boss.yml
__________________________
< PLAY [Boss + Merchant + Web] >
- - - - - - - - - - - - - - - - - - - - - - - - - -
\ ^__^
\ (oo)\_______
(__)\ )\ / \
|| - - - - w |
|| ||
_________________
< GATHERING FACTS >
- - - - - - - - - - - - - - - - -
\ ^__^
\ (oo)\_______
(__)\ )\ / \
|| - - - - w |
|| ||
ok: [ 192.168 . 6.210 ]
___________________
< TASK: update_boss >
- - - - - - - - - - - - - - - - - - -
\ ^__^
\ (oo)\_______
(__)\ )\ / \
|| - - - - w |
|| ||
changed: [ 192.168 . 6.210 ]
____________
< PLAY RECAP >
- - - - - - - - - - - -
\ ^__^
\ (oo)\_______
(__)\ )\ / \
|| - - - - w |
|| ||
192.168 . 6.210 : ok = 2 changed = 1 unreachable = 0 failed = 0
|
这个是结果,不过这个 cowsay是怎么打印出来的,我了个去,这是什么情况?
利用-vvvv来查看具体的执行情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
ansible Boss + Merchant + Web - m shell - a "hostname;ip a" - vvvv
< 192.168 . 6.210 > ESTABLISH CONNECTION FOR USER: root
< 192.168 . 6.210 > REMOTE_MODULE command hostname;ip a #USE_SHELL
< 192.168 . 6.210 > EXEC sshpass - d6 ssh - C - tt - vvv - o ControlMaster = auto - o ControlPersist = 60s - o ControlPath = "/root/.ansible/cp/ansible-ssh-%h-%p-%r" - o GSSAPIAuthentication = no - o PubkeyAuthentication = no - o ConnectTimeout = 10 192.168 . 6.210 / bin / sh - c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440 && echo $HOME/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440'
< 192.168 . 6.210 > PUT / tmp / tmpRfkD3R TO / root / .ansible / tmp / ansible - tmp - 1435819148.95 - 1730630738440 / command
< 192.168 . 6.210 > EXEC sshpass - d6 ssh - C - tt - vvv - o ControlMaster = auto - o ControlPersist = 60s - o ControlPath = "/root/.ansible/cp/ansible-ssh-%h-%p-%r" - o GSSAPIAuthentication = no - o PubkeyAuthentication = no - o ConnectTimeout = 10 192.168 . 6.210 / bin / sh - c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/command; rm -rf /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/ >/dev/null 2>&1'
192.168 . 6.210 | success | rc = 0 >>
Pay - Boss + Merchant + Web
1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link / loopback 00 : 00 : 00 : 00 : 00 : 00 brd 00 : 00 : 00 : 00 : 00 : 00
inet 127.0 . 0.1 / 8 scope host lo
2 : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link / ether 00 : 0c : 29 : 96 : 06 : 4e brd ff:ff:ff:ff:ff:ff
inet 192.168 . 6.210 / 24 brd 192.168 . 6.255 scope global eth0
|
类似于debug。
以上所述就是本文的全部内容了,希望大家能够喜欢。