寻觅生命中的那一片浅草......

每月存档 四月, 2010

Dynamic port forward:ssh -D

Bypass the Firewall with “ssh -Nf -D 10086 username@server”

all traffic coming to port 10086 on the client will be forwarded to the server

Great SSH!

iptables的妙用——条件限速

某些路由器具有所谓的流量控制中具有“惩罚性限速”的功能:(例如)192.168.1.100在120秒内平均速率超过100KB/S,那么把该IP
列入惩罚队列,惩罚队列速率是40KB/S.

其实,利用iptables的也可以实现类似的功能。脚本如下:

iptables -t mangle -N LMT
iptables -t mangle -N LMT2
iptables -t mangle -I FORWARD -d 192.168.1.100 -m length –length 128: -j LMT
iptables -t mangle -A LMT -m recent –rdest –name badguy –rcheck –seconds 60 -j LMT2
iptables -t mangle -A LMT -m limit –limit 100/sec –limit-burst 5000 -j RETURN
iptables -t mangle -A LMT -m recent –rdest –name badguy –set -j RETURN
iptables -t mangle -A LMT2 -m limit –limit 50/sec –limit-burst 5000 -j RETURN
iptables -t mangle -A LMT2 -j DROP
复制代码

上面代码是用limit限制计算速率,为了更准确,使用了数据包长度筛选: “-m length –length 128:”,这样更准确一点。
一般限制为100/s,按照数据包平均大小1000Bytes来算,大概就是100KB/S。
如果超出,限制变为50/sec,大约50KB/S。

当然,这只是一个示范性的例子了,其中limit模块也可以改用更为强大的hashlimit,hashsped等模块。
还可以用connlimit使用连接数作为限制条件。。。。。。。。。。
如果再把这些模块结合MARK和TC流量控制,就实现了某些路由器的所谓“条件限速”“P2P惩罚”等功能。

转载自:http://linux.chinaunix.net/bbs/thread-1156170-1-1.html

A rsync script with openvpn

#mkdir /data/conf/openvpn

up is a file containing vpn username/password on 2 lines

#vi /data/conf/openvpn/up
username
password

#vi /data/sh/rsync_my_files.sh
#!/bin/bash

#start openvpn in background
cd /data/conf/openvpn
/usr/sbin/openvpn –config openvpn.ovpn –auth-user-pass up –daemon

/usr/bin/rsync -vazu –password-file=/data/conf/rsync.pass rsy_user@192.168.1.100::db_file /data/backup/db_file

#disconnect from vpn server after synchronization
pkill openvpn

make rsync_my_files.sh executable

#chmod 700 /data/sh/rsync_my_files.sh

Sersync服务器同步程序-inotify与rsync用来代替inotify-tools解决方案(上)

http://code.google.com/p/sersync/
项目简介:
本项目利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。
目前使用的比较多的同步程序版本是inotify-tools,另外一个是google开源项目Openduckbill(依赖于inotify-tools),这两个都是基于脚本语言编写的,其设计思路同样是采用inotify与rsync命令。 相比较上面两个项目,本项目优点是:
1.sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(我稍后会提到),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
2.相比较上面两个项目,sersync配置起来很简单:在http://code.google.com/p/sersync/downloads/list 处下载源码(分为32版本,与64位版本),其中bin目录下已经有我编译好的2进制文件,配合bin目录下的xml文件直接使用即可。
3.另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
4.本项目自带出错处理机制,通过失败队列对出错的文件重新出错,如果仍旧失败,则每10个小时对同步失败的文件重新同步。
5.本项目自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。
6.本项目自带socket与http协议扩展,满足您二次开发的需要。

基本架构:

设计简析

如上图所示,线程组线程是等待线程队列的守护线程,当队列中有数据的时候,线程组守护线程逐个唤醒,当队列中inotify事件交多的时候就会被全部唤醒一起工作。这样设计的目的是能够同时处理多个inotify事件,重发利用服务器的并发能力(核数*2+2)。

之所以称之为线程组线程,是因为每个线程在工作的时候,会根据服务器的数量建立子线程,子线程可以保证所有的文件与各个服务器同时同步,当要同步的文件较大的时候,这样设计可以保证各个远程服务器可以同时获得要同步的文件。

服务线程的作用有三个,首先是处理同步失败的文件,将这些文件再次同步,对于再次同步失败的文件会生成rsync_fail_log.sh脚本,记录失败的事件。同时每隔10个小时执行脚本一次,同时清空脚本。服务线程的第三个作用是crontab功能,可以每隔一定时间,将所有路径整体同步一次。

过滤队列的建立是为了过滤短时间内产生的重复的inotify信息,例如在删除文件夹得时候,inotify就会同时产生删除文件夹里的文件与删除文件夹得事件,通过过滤队列当删除文件夹事件产生的时候,会将之前加入队列的删除文件的事件全部过滤掉,这样只产生一条事件减轻了同步的负担。同时对于修改文件的操作的时候,会产生临时文件与重复操作。

举例:

当我们在vi的一个test文件,进行wq操作的时候会产生如下事件:

即使把”.”开头与”~”结尾的世界过滤了,对于test文件仍旧有3次操作,分别是删除,创建与保存,通过过滤队列,就只剩下一个事件,一定程度上也提高了效率。

过滤队列第二个作用,即当你在本机删除目录的时候,假设你删除一个有5个文件的目录,inotify会产生6个事件,分别是5个文件删除事件,和一个删除目录事件,如果使用过滤队列,正常情况下会只产生一个删除目录的事件,大大减少了rsync通信次数。(当然,这不是绝对的。如果这6个事件分多次读到进入队列,那么可能还没来得及过滤,就已经被同步线程从队列中取走同步了。但一定程度上可以减少删除文件夹得同步通信次数)。

过滤队列的第三个作用,可以过滤监控目录下的文件夹,如果不想同步目录下的一些文件夹,或者一些后缀的文件。对于不需监控的子文件夹,在inotify启动时候remove掉监控,对于不需监控子文件,产生的文件事件就会从在入同步队列前过滤掉。如果使用rsync用–exclude, 这样虽然也可以过滤,但还是与rsync守护进程进行了一次交互。

关于inotify识别事件,详见我上一篇博客:

http://hi.baidu.com/johntech/blog/item/e4a31a3db1ee1ce755e723f4.html

转载自:http://hi.baidu.com/johntech/blog/item/5aa39a890124a6749f2fb4c7.html/cmtid/deed43f268e2e5ce7831aae3

混沌

是混沌吗?好多事压下来,感觉好乱:培训,交流,PPT准备,为提高工作效率,避免重复工作,N多文档要写,N多规范要定,team内管理、分工协调,任务跟进,如何有效落实,如何才能跟进好?什么情况需要向上层反馈?新版系统,软件性能测试。思绪好乱、好乱。成长是个过程,谁给我指条明路?还是要我自己大刀阔斧,勇往直前?希望混沌后是一片光明。

2010年四月
« 3月   5月 »
 1234
567891011
12131415161718
19202122232425
2627282930