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

来源:互联网 发布:mac 卸载百度云盘 编辑:程序博客网 时间:2024/06/10 22:08

接下来的一段时间里,就要开始一个我的新项目,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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子突然一直吐怎么办 宝宝呕吐并发烧怎么办 宝宝发烧呕吐拉稀怎么办 小孩发高烧还吐怎么办 二个多月的宝宝拉肚子怎么办 宝宝肚子着凉吐怎么办 孩子胃着凉呕吐怎么办 一岁受凉呕吐怎么办 孩子着凉了呕吐怎么办 小孩受凉呕吐腹泻怎么办 宝宝胃受寒呕吐怎么办 一岁半宝宝受寒呕吐怎么办 治小儿反复发烧怎么办 海洋宝宝吃下去怎么办 两岁儿童拉肚子怎么办 14天宝宝拉肚子怎么办 小孩不消化引起发烧怎么办 宝宝胃胀呕吐怎么办 小儿胃胀不消化怎么办 4岁小儿腹胀怎么办 两岁半的宝宝吐怎么办 月子宝宝闹人怎么办 宝宝一周岁拉肚子怎么办 一岁幼儿呕吐怎么办 孩子受凉呕吐拉肚子怎么办 5岁儿童呕吐怎么办 小孩发烧老是吐怎么办 宝宝吃雪糕呕吐怎么办 小孩感冒发烧吐怎么办 宝宝呕吐加发热怎么办 七个月宝拉肚子怎么办 新生儿17天拉稀怎么办 七个半月宝宝拉肚子怎么办 七个月婴儿拉稀怎么办 宝宝不停的拉稀怎么办 猫咪受凉了呕吐怎么办 孩子生理性腹泻怎么办 婴儿肚子受凉了怎么办 小孩说话有点口吃怎么办 3岁宝宝先拉后吐怎么办 1岁宝宝拉肚子怎么办