rsync实现文件的同步

来源:互联网 发布:工厂设备数据采集系统 编辑:程序博客网 时间:2024/05/04 18:51

        已经很久没写博客了,由于最近要部署游戏服,一切都是从零开始,所以觉得还是有必要写写博客,不仅可以让自己更加用心,而且还可以当一个笔记。

        我们的游戏服是分了很多的服务器,处理玩家一般的游戏逻辑和处理公会逻辑还有社交逻辑都是在不同的服务器,而且还有其他的一些服务器来处理其他的逻辑。但是我们的开发代码都是写在一起,只是这些代码跑在不同的服务器上,而且平时的开发都是在一台服上启多个进程来跑,所以真正接触到多个服务器部署的机会并不多。我们的游戏代码都是编成了可执行的引擎文件来跑.b的脚本文件,这些脚本都是处理游戏逻辑的代码,都是静态库,所以实际上要部署起来还是很简单的。基本上把编好的代码文件同步过来开服关服热更新就可以了,数据库的部署暂时不管。

        我们同步代码的工具就是rsync,这也是第一次接触到这个工具,以前的测试阶段都是直接运行大神已经写好的脚本,就可以轻松搞定代码的同步和更新,根本不知其所以然,这次也是有很好的机会去了解这些,对自己也是个很大的提升。

        首先rsync我也是第一次接触,花了一天的时间去了解它是怎么用的,我觉得要学好一个东西,要先知道它是干嘛的,然后知道整个流程是什么,知道怎么跑,最后才是去了解它的内部构造。学校教书则不一样,首先就开始说它的内部构造,说的天花乱坠,学生听的云里雾里,到最后发现这个东西是用来干嘛的都不知道,这种教学方式实在需要改变。就像一般人都是先知道车是用来干嘛的,再知道如何去操作它,最后才开始了解内部东西,知道如何去选择,如何去改造它。

        废话扯了一大堆,rsync是unix系统下的数据镜像备份工具,数据镜像是个什么东东以后再了解,只知道是用来同步数据的。rsync的安装就不用说了,yum install就可以了,当然还有其他方式。rsync是一个很简单好用的工具,它也是c-s模式,我们在rsync客户端将数据同步到rsync服务器上,将数据从rsync服务器端同步到本地。架设rsync服务器也很简单,配置好rsyncd.conf就能用了。

        我这边先装了了centos的虚拟机来模拟外部服务器,yum装好rsync后,通过rsync --daemon来启动rsync服务器,但是这个时候会提示没有配置文件,也就是rsyncd.conf,这个文件默认不存在,需要自己创建并配置。


        接下来就是rsync的配置文件,配置文件有3:rsyncd.conf,rsyncd.secrets和rsyncd.motd。rsyncd.conf和rsyncd.secrets顾名思义就是配置信息和密码文件,服务器怎么知道是自己的客户端将文件上传的呢,就需要服务器和客户端约定的密码,而且rsyncd.secrets必须是root所有600权限,这个没什么好说的。关于配置信息先写个最简单能用的。rsyncd.motd这个东西暂时没啥用先不配。


        这是我的简单配置,左边是config,默认端口是873,这个其实不用写,也可以根据自己的需要修改端口,上半部分属于全局定义,uid=root表示设置指定用户,还可以指定某用户组的某用户,只需加个gid=group1,指定用户运行rsync进程,chroot具体没试过,然后是日志文件,进程文件和锁文件所在路径。下半部分属于模块定义,也就相当于局部变量一样,只在本模块起效,比如这里game模块,path表示该模块同步数据所在目录,auth users表示rsync服务器上已存在的某个用户,也可以指定用户组,和全局定义一样,所以在实际应用中应该建立一个公用用户,secrets file不用说了,read only表示是否不让客户端上传文件,这里显然no。右边是secrets,一个用户对应一个密码,占一行。

        客户端就更简单了,安装好rsync就可以开始了


        这里可以看到有error信息,第一个错误信息意思是目录不存在,我们配置的game模块path是/home/tp0352/game,但是这个目录却不存在,创建game目录再试,然后是第二次的错误信息说连接不到主机,没有路由到主机,但是可以ping通,查了一下是服务器的防火墙问题,最暴力的解决办法就是service iptables stop,更好的方法就是让防火墙通过你所开启的rsync,然后再去上传文件


       这次可以看到已经上传成功,去服务器端验证一下果然已经存在了game.txt文件。当然我们也可以从服务器获取文件,这里不说。这次成功上传文件,但是却要输密码,也就是之前在服务器端配置了secrets文件里面对应的密码123456,那在客户端同样可以配置一个密码文件.rsync.pwd,同样600权限,文件名字随意取。然后通过--password-file参数指定密码文件就可以了。这里有很多的参数,man一下就知道了。


        到这里部署服务器的第一步就已经完成了,将代码的引擎文件和.b的可执行脚本文件可以成功的同步到外部服务器了。

0 0
原创粉丝点击