免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

[其他] 讨论:如何同步上百/千台服务器的某一个配置文件?(获奖名单已公布-2012-9-6) [复制链接]

论坛徽章:
0
111 [报告]
发表于 2012-07-21 01:23 |只看该作者
bun 发表于 2012-07-06 12:39
回复 17# zhengwei_zw


找个nagios的健康监控脚本,监控这个人的健康度,体检预警,并短信通知大家,哈哈
iamwhatiam 该用户已被删除
112 [报告]
发表于 2012-07-22 00:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
113 [报告]
发表于 2012-07-23 08:55 |只看该作者
@busyant写得非常好。赞一个...

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
114 [报告]
发表于 2012-07-23 08:55 |只看该作者
@busyant写得非常好。赞一个...

论坛徽章:
3
丑牛
日期:2014-02-25 15:19:10金牛座
日期:2014-02-28 19:01:322015亚冠之西悉尼流浪者
日期:2015-06-10 15:01:09
115 [报告]
发表于 2012-07-23 10:39 |只看该作者
本帖最后由 pxf520 于 2012-07-23 10:44 编辑

如果只是简单的同步配置文件,不建议部署puppet,直接用scp的方式推送好了

这里我重点推荐一下:sshpass(用于非交互的 ssh 密码验证),在主控端上安装即可,客户端无需安装,简单方便。

首先安装sshpass
# yum install -y sshpass

附上我以前写的一个脚本
通过shell读iplist文件,实现批量操作
iplist如下,有3列,分别为ip地址,用户名,密码,有多少就添多少
192.168.10.1 root password
192.168.10.2 root password
192.168.10.3 root password
192.168.10.x root password

cat auto_ssh.sh   
#!/bin/bash
host=(`awk '{print $1}' iplist`)
user=(`awk '{print $2}' iplist`)
pass=(`awk '{print $3}' iplist`)
for((i=0;i<${#host[@]};i++));
do
sshpass -p ${pass[$i]} scp -q /root/test ${user[$i]}@${host[$i]}:/root/test
echo "${host[$i]} finish"
done

脚本实现的功能:scp本地root目录下的test文件到目标机的root目录下。


当然用secureCRT的脚本,也可以实现批量操作,把a机上的文件批量同步到一千台目标服务器上
以前的1个帖子

http://bbs.chinaunix.net/thread-3580762-1-1.html

论坛徽章:
0
116 [报告]
发表于 2012-07-23 11:12 |只看该作者
目前只用过rsync做过这种同步工作  其他的都还木有用过   学习下、、、

论坛徽章:
0
117 [报告]
发表于 2012-07-24 11:40 |只看该作者
学习学习 :wink:

论坛徽章:
0
118 [报告]
发表于 2012-07-25 14:19 |只看该作者
在一台上改好了SCP可以不?呵呵

论坛徽章:
0
119 [报告]
发表于 2012-07-25 15:20 |只看该作者
题目是同步一个配置文件,一般来说,这个文件都不会很大,在 M 级别以下,我一直用的是包装过的 pdsh,

思想如下:
1, 检查要传的文件的 md5
2, 用 pdsh 分发
3, 检查成功的,比较出未成功的
4, 把未成功的重新传,回到 1,  重复执行直到全部成功或失败 10 次。


脚本如下:
  1. bin_name=$(basename $0)

  2. d (){
  3.         pdsh -R exec -u 27 -f 50 -w ^$@
  4. }

  5. help () {
  6.         echo "useage : $bin_name machine_list src(single_file) dst"
  7. }


  8. if [ $# -ne 3 ]
  9. then
  10.         help
  11.         exit 1
  12. fi


  13. machine_list=$1
  14. raw_machine_list=$1
  15. src=$2
  16. dst=$3
  17. md5=$(md5sum $src | awk '{print $1}')

  18. echo $md5

  19. time=$(date +%F_%T)
  20. ok_list="/tmp/ok_$time"
  21. bad_list="/tmp/bad_$time"

  22. >$ok_list
  23. >$bad_list

  24. all_count=$(wc -l $machine_list | awk '{print $1}')
  25. ok_count=$(wc -l $ok_list | awk '{print $1}')


  26. max_loop_count=10

  27. while [ $ok_count -lt $all_count ] && [ $max_loop_count -gt 0 ]
  28. do
  29.         ((max_loop_count =  $max_loop_count - 1))
  30.         
  31.         d $machine_list scp $src %h:$dst
  32.         d $machine_list ssh %h "md5sum $dst" 2>&1 | grep $md5 | awk -F: '{print $1}' >> $ok_list
  33.         sort $raw_machine_list $ok_list $ok_list | uniq -u > $bad_list
  34.         still_bad_count=$(wc -l $bad_list)
  35.         echo "************** still bad : $still_bad_count *******************"
  36.         machine_list=$bad_list
  37.         ok_count=$(sort $ok_list | uniq | wc -l | awk '{print $1}')
  38. done

  39. if [ $ok_count -eq $all_count ]
  40. then
  41.         echo "************** ALL OK ***************"
  42. fi
复制代码

论坛徽章:
0
120 [报告]
发表于 2012-07-25 23:00 |只看该作者
1.SCP就不赘述了。
2.我使用的方式通常比较笨,思路就是模拟人为动作
这是我喜欢Scrt的原因之一。将需要修改的文件在一台机器上录一遍,保存
然后在其他机器上重复这一过程。与vba的宏是一个思路。
达到这个目的的过程中需要注意的是
ssh/telnet的登陆需要以加密方式存为一个profile或者放入小型数据库
我通常选择xml
然后由Scrt读取用户名密码自动登陆逐台操作。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP