虚幻0516 发表于 2015-11-26 12:44:45

用salt管理一到上万台服务器

本文是使用salt管理一台虚拟机,从而引出管理一万台服务器的思路.^_^

1.      安装salt服务端
2.      安装salt 客户端
3.      配置salt 服务端
4.      配置salt客户端
5.      Salt-key确认
6.      执行测试在线命令
7.      执行远程命令
8.      查看帮助
9.      执行远程脚本
10.   扩展
11.管理更多服务器


本文从这个网址得到启发http://wiki.saltstack.cn/docs

测试环境,salt服务端IP:192.168.1.1   salt客户端IP:192.168.1.2

1.安装salt服务端

[*]curl -L http://bootstrap.saltstack.org | sudo sh -s -- -M -N
复制代码

2.安装salt 客户端

[*]wget -O - http://bootstrap.saltstack.org | sudo sh
复制代码
3.配置salt 服务端

Salt服务端一般不需要配置,直接启动即可

[*]/etc/init.d/salt-masterstart
复制代码4.配置salt客户端

编辑 /etc/salt/minion文件
a.修改master的IP为服务端IP: 192.168.1.1
Master:192.168.1.1
b.修改客户端标识id,这个是验证和管理时使用的名称
id:cn-gd-gz-0001
c.启动客户端

[*]/etc/init.d/salt-minionstart
复制代码
5. Salt-key确认

这时候服务端已经接受到客户端的验证请求
使用命令salt-key查看





AcceptedKeys:已经接受的客户端
UnacceptedKeys:还没有验证的客户端
RejectedKeys:拒绝的客户端

这时候看到cn-gd-gz-0001在未验证那里显示
执行命令接受管理这个客户端,会提示是否接受,按Y即可

[*]salt-key -a cn-gd-gz-0001
复制代码





6.执行测试在线命令

[*]salt '*'test.ping
复制代码
格式: *代表所有客户端,把*换成id代表只是选中这个id的客户端

返回true说明客户端在线,无响应大家懂的





7.执行远程命令

在cn-gd-gz-0001这台客户端执行命令uname –a

[*]salt 'cn-gd-gz-0001' cmd.run 'uname -a'
复制代码



8.执行远程脚本

上面cmd.run可以执行远程命令,但是有时我们想执行很多命令,例如一键安装lnmp,怎么办?

9.查看帮助

可以查看帮助文档来解决这个问题,帮助文档太多了,重定向到一个文件再看

[*]salt '*' sys.doc > man.txt
复制代码
查看cmd.开头的模块

[*]grep 'cmd.' man.txt
复制代码
会发现有一些以cmd.开头的模块
cmd.exec_code:
CLIExample:
         salt '*' cmd.exec_code ruby 'puts "cheese"'

演示:

[*]salt 'cn-gd-gz-0001' cmd.exec_code ruby 'puts "cheese"'
复制代码

这个客户端没有ruby,返回找不到这个命令

[*]salt 'cn-gd-gz-0001' cmd.exec_code python 'print "cheese"'
复制代码
正确显示




用法是:salt ‘目标’执行语言 对应语言的代码


cmd.run这个前面说了

cmd.script
这个是比较强大的命令,意思是可以从远程下载一个脚本在客户端执行

CLIExample:
         salt '*' cmd.script salt://scripts/runme.sh
         salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'


帮助文档说Thescript can be located on the salt master file server or on an HTTP/FTP       server.

所以配置一下salt服务端,把脚本放在服务端


编辑/etc/salt/master,打开下面的注释,保存后重启服务端
file_roots:
   base:
   - /srv/salt

如果没有/srv/salt/script目录就创建一个

cd/srv/salt/scripts

写一个shell脚本保存为1.sh

[*]#!/bin/bash
[*]echo"test salt" > /tmp/testsalt.txt
复制代码


执行远程命令

[*]salt 'cn-gd-gz-0001' cmd.script salt://scripts/1.sh
复制代码




显示的信息还是很直观的,stdout没有信息显示是因为脚本语句没有显示文本,可以加多一句echo “ok”再执行多一次就可以看到输出了.

看帮助好像还可以在执行脚本时添加命令行参数,试试
修改脚本为

[*]#!/bin/bash
[*]echo"test salt" > /tmp/testsalt.txt
[*]echo $1
[*]echo $2
[*]echo $3
[*]
[*]if [ "$3"x = "yy"x ]
[*]then
[*]   echo "ok ???????????????"
[*]fi
复制代码再次执行远程命令

[*]salt 'cn-gd-gz-0001' cmd.script salt://scripts/1.sh "aa bb cc"
[*]salt 'cn-gd-gz-0001' cmd.script salt://scripts/1.sh "aa bb yy"
复制代码看起来传递的参数有效的





10.扩展
grep'cmd.' man.txt这个命令可以查出帮助文档中还有其它 cmd. 大概有10个,童鞋们可以研究研究
除了这个远程执行之外,salt还有很多已经做好的模块,在这里就不一一介绍了

11.      管理更多服务器

基本思路是: 把需要执行的脚本放在服务端,然后让客户端下载回去自己执行.......然后就可以喝杯茶了

这里演示是管理一台虚拟机。。。。。。。。能不能很方便管理一百台服务器?一千台服务器?一万台服务器?
笔者也没有一万台服务器环境,只能说管理几百台机器还是轻松加愉快的^_^ 如果你有更好的想法和建议,请告诉我,谢谢.




本文来自:http://bbs.iyunv.com/thread-4116433-1-1.html
页: [1]
查看完整版本: 用salt管理一到上万台服务器