Linux文件同步工具sulasync的开始篇章...

接下来的一段时间里,就要开始一个我的新项目,linux下的文件同步工具——sulaSync。这一篇简单介绍我们所要的需求。

一.功能说明1:

(P1)文件同步:能将Server端的文件传输至Client端的某个目录
(P1)软件安装:能触发一个或者多个主机通过apt或者yum安装指定的软件包
(P1)软件升级:能触发一个或者多个主机通过apt或者yum进行软件包的升级
(P1)整个系统要有日志功能
(P1)插件功能,在文件和目录传送到目的主机之后,目的主机要执行指定目录下一些特定类型的文件(插件)

sh XX.sh
python XXX.py
这些文件先按照文件名进行排序,然后才可以执行,以确保文件的执行顺序
(P2)能获取当前正在进行的操作的状态:文件同步,软件安装,升级,执行脚本

二.分析1:

这里是一张需求的剖面图
这里写图片描述

总的来说,将会有几大模块:
文件解析模块,日志模块,*监控模块

1.配置文件/所要传输文件的解析

(1)read directory
1)CRT function “system” to run “ls” and redirectory the output (include stdout and errout) into a file and then read the output file to get all files in the derectory.if it is a configfile, XXX;if it shoud to be execute, XXX;

so , we need a fuction “readdir” to solve the problem

int readdir(unsigned int fd; struct old_linux_dirent *dirp, unsigned int count); 

2.Server/Client网络文件服务系统的选择

很容易想到Client端将会有一个Daemon(守护进程),它将满足以下条件:

1.不接受输入,将进程打入后台
2.有一个network connection(即打开了一个port)
3.可以接收signal,这个signal可以是9(SIGKILL) 1(SIGHUP),关于一些常用信号,之前博客有讲到SIGKILL是由kill -9发出的,而SIGHUP是重启进程重新加载配置文件。
4.可以解析配置文件
5.可以记录用户的操作。

而Server端与Client端的数据传输给出以下几种方案,但是只取一种:
op1:send recv read write

File is so big, this is bad

op2:
Server:http server
Client:http dowload tool,this is bad

op3:
Server:file server(ftp/samba/nfs)

ftp dowload tool,this is bad
samba authentication complicated, this is bad
nfs(network file service), this is good

最终,nfs网络文件系统成为Server端,Client端的进行文件同步的上乘选择。

2.关于日志模块

日志我们有两种选择方式
1.自己造轮子(bad)
Linux哲学:不重复造轮子
2.选用系统日志
直接使用Linux Programmer’s Manual提供的syslog相关函数即可

3.监控模块

check client status
(1)poll each client one by one (bad, unefficient solution)
(2)broadcast to the whole network,and client echo the status to server at the same time(bad, broadcast storm)
(3)start a daemon on server side, client report their status in a certain interval.
要得到每一台客户机此时的状态,如上,给出了三种解决方案:
第一种太低效:

轮询的方式,显然太低效

第二种容易造成广播风暴:

Server端发广播,客户端daemon收到Server端的广播后,汇报自身情况,缺点是数据量过大时,会造成广播风暴,使得Server端阻塞,网络瘫痪。

第三种我详细说明一下,这将是我要采取的方式:

Client起一个守护进程,动态的发送自身状态
Client端每做一个操作就会将自己所进行的操作状态进行汇报,当操作完成,又会将自身的另一种状态进行汇报,而Server端只保存Client端的状态缓存,每当用户使用sulastat时,就会知道此时Client端的状态,这样,避免了广播使得Client一次传送数据量过大造成广播风暴的情况

三.功能说明2

(P1)Server端提供命令和相关选项触发Client端开始文件同步,软件安装,软件升级

命令名称sulasync
-f:文件目录同步选项
-p:软件包安装选项
-u:软件包升级选项
选项不互斥。
(P1)可以指定某些特定主机同步
-m:指定某些特定主机同步,以逗号分隔,或者以空格分隔如果未指定,则该网段全部主机内的所有计算机都执行相应操作
需要同步的文件,目录都放在一个目录下,该目录可以通过配置文件指定
提供日志,记录何时,执行了何种操作
获取当前操作状态sulastat

四.分析2

Server端:
-m:

显然,getopt这一函数不能使用了,如果-m后的主机名以空格间隔,而getopt第二个参数是一个字符串类型,GG….发送广播后,每一台主机比对主机名,如果在指定范围里,那么执行相应操作;如果不在,则不执行

-f -p -u:
-f参数,软件同步,发送包名(包本身太大),路径。


五.总结

组件:Server端/Client端
模块:

Client端:

文件解析模块
配置文件解析模块
命令解析模块
命令执行模块

Server端

命令解析模块
命令执行模块
日志模块
监控模块

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值