Windows多台服务器数据同步,可有好的软件方案?
微软的MSCS, 赛门铁克的Veritas Storage Foundation,易腾数信的EterneCluster,SteelEye的LifeKeeper,
下面介绍下详细情况:
MSCS,微软自带的不过要在Server版本中才有,他的群集服务充当后端群集,可为数据库、消息传递以及文件和打印服务等应用程序提供高可用性。当任一节点(群集中的服务器)发生故障或脱机时,MSCS 将尝试最大程度地减少故障对系统的影响。
Veritas Storage Foundation,它提供了业界领先的异构存储管理和高可用性的软件解决方案,解决了企业如何合理保护和备份关键信息数据, 如何高效管理异构硬件环境,以及如何提高应用系统和数据库可用性的问题。
Veritas SFHA 主要包括以下五个组件:Veritas Volume Manager (VxVM), Veritas File System (VxFS),Veritas Cluster Server (VCS),Veritas Storage Foundation Cluster File System (SFCFS), Veritas Storage Foundation for Oracle RAC (SFRAC)
EterneCluster,易腾数信新一代的双机热备产品,具有人性化,高可配置性,操作简单,还支持基于多机的多机热备。可实现整个系统的不间断运行,从而保证整个系统对外服务的正常,为企业24小时×365天的关键业务应用提供了强大的保障。
LifeKeeper,使用户的服务器、操作系统、数据库系统以及关键的数据及应用程序保持7天×24小时连续不间断,提供9999%的高可用性。
这些是做双机热备的几款软件,这几款软件都可以实现数据同步功能。
开发过程中,需要经常将SVN服务器上的代码同步到测试服务器上,一般做法,需要人工手工更新,这样很浪费工夫。下面的脚本为svn server的钩子程序,放在svn服务器上,只要代码更新,就会自动提交的测试服务器上。
使用条件:
1、SVN主机是WIN系统,如果要在LINUX的SVN主机上用,需要修改下面的代码为sh脚本,道理类似,代码不同。有需要的自行更改吧。
2、SVN主机上需要安装完整版的PUTTY安装包,而不是一个EXE
3、测试服务器可以用putty登录
@echo off
setlocal enableDelayedExpansion
rem 本脚本实现将SVN服务器A(win环境)上提交的代码,自动上传(通过pscp)到测试环境的服务器B(linux)上,如果SVN在LINUX环境下,根据本代码自行调整。
rem svn服务器上版本库地址
set reposLoc=%1
set REV=%2
rem ---------------------------------------------------------------------- 配置开始
rem svn服务器上putty的路径
set puttyPath="D:\Program Files (x86)\PuTTY"
rem 测试环境putty登录的用户名
set username=root
rem 测试环境putty登录的密码
set password=password
rem 测试环境IP
set host=10111
rem 测试环境代码根地址
set remoteRootPath=/var/www/htdocs/test
rem ---------------------------------------------------------------------- 配置结束
cd /d %puttyPath%
rem 遍历提交了的代码
for /f "tokens=2 delims= " %%i in ('svnlook changed %reposLoc%') do (
set "var=%%i"
svnlook cat !reposLoc! !var! > temptxt
rem 替掉路径中的trunk
set newPath=!var:trunk=!
rem 通过pscp提交到测试服务器
echo y | pscp -l !username! -pw !password! temptxt !host!:!remoteRootPath!!newPath!
)
使用方法:
将上面的代码中配置区的变量修改,并将内容保存成bat文件,命名为post-commitbat,放在SVN服务器上版本库的hooks目录下。提交代码试试看吧。经测试可行。
当然,这个脚本可以再做的牛比点儿,可以针对某个用户的提交做更新,也可以分析SVN提交时的日志,只有当日志中有特定的字符时更新。
另外,由于上面的脚本,只更新当前的提交,所以假设只针对某个用户的提交做更新时,不能只更新当前提交,这样其它用户的提交就落掉了,需要更新整个工程。
1、samba
我觉得samba是目前最好的解决方案。要求在linux端安装samba服务,并配置好共享目录,然后在windows端做磁盘映射,把linux的某个目录映射到windows下。
这个方案最大的好处是不需要人工操作,在映射的磁盘下的文件自动同步到linux下,实时性比较好,cache机制也相对非常完善,一般不会有卡的感觉。
但是这个方案有个缺点是,必须在linux机器上安装samba,目前我所在公司,对在linux服务器上安装samba,管得比较严,担心有安全的隐患。因此受限于这个的限制。
一个解决的办法就是安装虚拟机,在虚拟机中安装与服务器一样的操作系统和编译环境,然后在虚拟机中安装samba,再到windows下做映射。但是这个方案的问题是虚拟机要占用一定的cpu和内存,而且编译速度会比较慢。最让我忍受不了的是虚拟机导致windows无故重启。我用的virtualbox,不知道是不是virtualbox的bug。因此,最终这套方案被我放弃了。
2、ssh + webdrive
webdrive是一个商业软件,有破解版本的。它可以通过ssh将linux的某个目录映射到windows下。但是这个方案有个严重的问题,速度好像不行,会让你感觉有卡的感觉。你想呀,开了eclipse做开发,经常发现保存一个文件要很长的时间,让你很不能忍受,建立索引的时间也比较长。
这个方案是我最初的选择,最后由于速度问题放弃了。
3、svn
就是在windows下做开发,然后提交代码到svn。在到linux下svn下载代码,然后编译。这样做的好处是编辑的时候很方便,不用担心速度的问题,eclipse建立索引也很快。
但是存在的问题是什么呢?一个是不是很方便,要先提交代码,然后再下载代码,然后才能编译。这也与提交代码的原则是相违背的,我们一般要确保我们的代码是能编译通过的,才提交,有的时候甚至要code review通过后才能提交代码。对于采用CI机制管理的代码来说,更是这样,提交一次代码会引起编译机的编译和跑单测。
因此这种方案也不是很可取。
1安装CentOS70yum install ssh 安装SSH协议yum install rsync (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件)service sshd restart 启动服务任务
2配置Master无密码登录所有Salve,在Master机器上生成密码对
3查看/home/hadoop/下是否有"ssh"文件夹,且"ssh"文件下是否有两个刚生产的无密码密钥对。
4接着在Master节点上做如下配置,把id_rsapub追加到授权的key里面去。
5设置SSH配置用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。设置完之后记得重启SSH服务,才能使刚才设置有效。
6退出root登录,使用hadoop普通用户验证成功同步另一台服务器的数据
Linux自带了ntp服务 -- /etc/initd/ntpd,这个服务不仅可以设置让本机和某台/某些机器做时间同步,他本身还可以扮演一个time server的角色,让其他机器和他同步时间。
配置文件就是/etc/ntpconf。
为了测试,设置让node2 -- 1921681102和node1 -- 1921681101做时间同步。第一步,node1做time server,node1本身不和其他机器时间同步,就是取本地时间。所以,先把node1机器的时间调准了:
[root@node1 ~]date -s 08/03/2011
[root@node1 ~]date -s 11:12:00
[root@node1 ~]clock -w[root@node1 ~]hwclock --systohc
后两个命令是把设置的时间写到硬件时间中去(也就是CMOS里面的时间)。
第二步,然后将node1配置成一个time server,修改/etc/ntpconf,[root@node1 ~]vi /etc/ntpconf其他的配置不怎么需要改,只需要关注restrict的配置:
1 注释掉原来的restrict default ignore这一行,这一行本身是不响应任何的ntp更新请求,其实也就是禁用了本机的ntp server的功能,所以需要注释掉。
你可以把服务器做一下cluster
如果是安装的window2000 advance server或2003,不需要安装第三方软件,可以用MS的cluster 的component。
具体的实现方式可以去MS的网站上看看white paper就可以了。
0条评论