设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 9463|回复: 10

[其它] 用salt管理一到上万台服务器 [复制链接]

Rank: 6Rank: 6

签到
55
注册时间
2009-12-18
最后登录
2015-6-8
在线时间
105 小时
阅读权限
70
积分
5997
帖子
11
主题
4
精华
1
UID
7197
发表于 2013-12-21 16:05:11 |显示全部楼层
本帖最后由 xx007 于 2013-12-21 16:41 编辑

本文是使用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服务端

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


2. 安装salt 客户端

  1. wget -O - http://bootstrap.saltstack.org | sudo sh
复制代码

3. 配置salt 服务端


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

  1. /etc/init.d/salt-master  start
复制代码

4. 配置salt客户端


编辑 /etc/salt/minion文件

a.修改masterIP为服务端IP: 192.168.1.1

Master:192.168.1.1

b.修改客户端标识id 这个是验证和管理时使用的名称

id:cn-gd-gz-0001

c.启动客户端

  1. /etc/init.d/salt-minion  start
复制代码

5. Salt-key确认


这时候服务端已经接受到客户端的验证请求

使用命令salt-key查看


1.jpg


AcceptedKeys:已经接受的客户端

UnacceptedKeys:还没有验证的客户端

RejectedKeys:拒绝的客户端


这时候看到cn-gd-gz-0001在未验证那里显示

执行命令接受管理这个客户端,会提示是否接受,Y即可


  1. salt-key -a cn-gd-gz-0001
复制代码


2.jpg


6. 执行测试在线命令

  1. salt '*'  test.ping   
复制代码

格式: * 代表所有客户端,*换成id代表只是选中这个id的客户端


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


3.jpg



7. 执行远程命令


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

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

4.jpg


8. 执行远程脚本


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


9. 查看帮助


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

  1. salt '*' sys.doc > man.txt
复制代码

查看cmd.开头的模块

  1. grep 'cmd.' man.txt
复制代码

会发现有一些以cmd. 开头的模块

cmd.exec_code:

CLIExample:

         salt '*' cmd.exec_code ruby 'puts "cheese"'


演示:

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

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

  1. salt 'cn-gd-gz-0001' cmd.exec_code python 'print "cheese"'
复制代码

正确显示


5.jpg


用法是:  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

  1. #!/bin/bash
  2. echo  "test salt" > /tmp/testsalt.txt
复制代码

执行远程命令

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

6.jpg



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


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

修改脚本为

  1. #!/bin/bash
  2. echo  "test salt" > /tmp/testsalt.txt
  3. echo $1
  4. echo $2
  5. echo $3

  6. if [ "$3"x = "yy"x ]
  7. then
  8.      echo "ok ???????????????"
  9. fi
复制代码

再次执行远程命令

  1. salt 'cn-gd-gz-0001' cmd.script salt://scripts/1.sh "aa bb cc"
  2. salt 'cn-gd-gz-0001' cmd.script salt://scripts/1.sh "aa bb yy"
复制代码

看起来传递的参数有效的


7.jpg


10.扩展

grep -r 'cmd.' man.txt这个命令可以查出帮助文档中还有其它 cmd. 大概有10个,童鞋们可以研究研究

除了这个远程执行之外,salt还有很多已经做好的模块,在这里就不一一介绍了


11.      管理更多服务器


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


这里演示是管理一台虚拟机。。。。。。。。能不能很方便管理一百台服务器?一千台服务器?一万台服务器?

笔者也没有一万台服务器环境,只能说管理几百台机器还是轻松加愉快的^_^ 如果你有更好的想法和建议,请告诉我,谢谢.




论坛元老

LT fans

Rank: 8Rank: 8

注册时间
2011-5-31
最后登录
2019-7-22
在线时间
220 小时
阅读权限
90
积分
30041
帖子
243
主题
23
精华
0
UID
13960
发表于 2013-12-21 20:27:01 |显示全部楼层
标题写的很大,内容还不错,欢迎加入官方群一起交流

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-9-16
最后登录
2020-2-24
在线时间
949 小时
阅读权限
90
积分
266367
帖子
2158
主题
2
精华
0
UID
15647
发表于 2013-12-22 09:14:49 |显示全部楼层
感谢楼主分享!

使用道具 举报

论坛元老

深呼吸

Rank: 8Rank: 8

注册时间
2011-6-30
最后登录
2014-5-11
在线时间
112 小时
阅读权限
90
积分
34853
帖子
190
主题
3
精华
0
UID
14772
发表于 2013-12-22 11:21:00 |显示全部楼层
当涉及被管理节点超过一定数量的时候,要考虑的不仅仅是这些了,而且效能也是问题,1w节点同时去服务器上down文件,这对salt master也是一种很大的压力,所以能引申出很多问题
<-sina_sign,2469594384,dc5f828b,1->

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2010-7-3
最后登录
2015-5-15
在线时间
267 小时
阅读权限
100
积分
46000
帖子
340
主题
21
精华
1
UID
9704
发表于 2013-12-22 16:42:44 |显示全部楼层
标题吸引人呢  哈哈  目前有管理1w台的公司吗?

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-12-18
最后登录
2015-6-8
在线时间
105 小时
阅读权限
70
积分
5997
帖子
11
主题
4
精华
1
UID
7197
发表于 2013-12-22 22:36:17 |显示全部楼层
想当年,用的是ssh免认证+for循环,管理100多台机器,遇到网络卡和慢的问题,也熬过来了,puppet和chef,func等等还有很多都没使用过。。。。。。。感觉用了这个salt,理解和使用起来简单一点,比较符合正常的逻辑,还是python写的,管理几百台机器应该没什么问题了,超过上千是要细心布署一下才行,有上万服务器的公司也能自己开发一套管理工具了

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-3-16
最后登录
2019-4-1
在线时间
269 小时
阅读权限
90
积分
18110
帖子
40
主题
0
精华
0
UID
12407
发表于 2013-12-31 16:40:20 |显示全部楼层
感谢楼主分享!

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-9-21
最后登录
2019-7-22
在线时间
2394 小时
阅读权限
90
积分
51732
帖子
1362
主题
1156
精华
2
UID
10437
发表于 2014-1-2 11:15:50 |显示全部楼层
安装还真方便
脚本都写好了,赞一个
只玩过python fabric    func
感觉已经够用

使用道具 举报

金牌会员

init 0

Rank: 6Rank: 6

注册时间
2010-9-20
最后登录
2019-7-22
在线时间
35 小时
阅读权限
70
积分
9056
帖子
62
主题
12
精华
0
UID
10432
发表于 2014-2-10 09:56:15 |显示全部楼层
赞一个。
大家有比较过salt和puppet他们之间的优劣处么
个人博客:http://reeddeer.blog.163.com/

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-11-30
最后登录
2015-8-5
在线时间
98 小时
阅读权限
90
积分
14677
帖子
121
主题
24
精华
0
UID
16171
发表于 2014-2-10 15:53:47 |显示全部楼层
现在都用puppet去管了吧!而且由下发文件到执行脚本和修改参数,直接一次性在服务端执行就可以了

使用道具 举报

论坛元老

深呼吸

Rank: 8Rank: 8

注册时间
2011-6-30
最后登录
2014-5-11
在线时间
112 小时
阅读权限
90
积分
34853
帖子
190
主题
3
精华
0
UID
14772
发表于 2014-2-18 09:21:05 |显示全部楼层
我们这里用的puppet再结合git做的,git托管puppet配置文件
<-sina_sign,2469594384,dc5f828b,1->

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2020-2-24 16:48 , Processed in 0.034842 second(s), 16 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部