Category Archives: Uncategorized

日志统一扫描工具:mysclog

1.mysclog介绍
此脚本主要是用来扫描我们的一些应用的log,比如说oracle的alert log,mysql的error log,通过我们定义关键字,如果log里出现相应关键字,此脚本扫描到后,会记录下相应的信息,然后以邮件或者短信的信息进行通知(这个自己可以修改)。

采用perl脚本定制开发,可任意部署于任何一台可连接至集群的机器(最好不要用集群中的机器做监控机),可以管理多台机器。

2.mysclog的特性
1. 只需在管理机上安装模块
2.被监控机需要一个统一用户和统一目录
3.增加机器只需增加一行配置
4.详细的日志输出

3.mysclog所需条件
1.SSH公钥验证

mysclog管理节点通过ssh连接服务器,进行验证和一些管理操作。为了使这些过程自动化,推荐使用SSH公钥验证密码(也可以使用密码模式进行)。

2.操作系统

目前只测试过Linux系统

3.依赖模块

Net::OpenSSH
Log::Dispatch
Parallel::ForkManager

4.mysclog构建步骤
以如下结构作为说明:
192.168.0.1 mysclog Manager 节点
192.168.0.23 被监控节点
192.168.0.53 被监控节点
192.168.0.55 被监控节点

4.1 第一步:监控机安装模块
Parallel::ForkManager
IO-Tty-1.10.tar.gz
Test-Simple-0.98_05.tar.gz
Net-OpenSSH-0.61_10.tar.gz
yum install perl-Log-Dispatch

以上步骤一般都是:
perl Makefile.PL
make
make install

4.2 第二步:ssh互信(也可以选择直接password登录)
安装完成后,所有节点配置用户下 ssh 互信,注意这里不能禁止password登陆,否则会出现错误,另外按正常步骤下来如果有问题,请检查权限问题:

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa
ssh-keygen -t dsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

ssh db-64 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh db-64 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh db-24 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh db-24 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

scp ~/.ssh/authorized_keys db-64:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys db-24:~/.ssh/authorized_keys

4.3 被监控节点操作
在192.168.0.23,192.168.0.53,192.168.0.55上建立用户如oracle等和一个工作目录如/home/oracle/mysclog。

必须保证该用户对所要扫描的log具有读取权限,同时对目录具有读写权限。
如果要扫描/var/log/messages的话,可以查看:
http://anonexp.blogspot.com/2013/04/acl-how-to-enable-read-permission-for.html

4.4 管理机部署脚本
新建工作目录如/home/oracle/mysclog(这个要求跟被监控节点一致)

注意:必须保证该用户对所要扫描的log具有读取权限,同时对目录具有读写权限。另外管理机和被监控节点需要的目录是相同的。

一共包括如下三个文件:
mysclog.cnf
mysclog.pl
sclog.pl

其中mysclog.cnf为配置文件
mysclog.pl为主控脚本
sclog.pl为扫描脚本

4.5 mysclog.cnf说明
mysclog.cnf的格式如下:
ip,logs,keys,skip_keys,server,from,to,phonelist
一级分割符为”,”,二级分割符为”|”,参考如下:

192.168.0.23,/data/app/diag/rdbms/teststd01/test/trace/alert_test.log|/home/oracle/mysclog/tmpalert.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000
192.168.0.53,/home/oracle/11.2.0/diag/rdbms/testadg03/test/trace/alert_test.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000
192.168.0.55,/home/oracle/11.2.0/diag/rdbms/testadg04/test/trace/alert_test.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000

拿第一条说明下:

192.168.0.23,/data/app/diag/rdbms/teststd01/test/trace/alert_test.log|/home/oracle/mysclog/tmpalert.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000

ip: 192.168.0.23
logs(有两个log要扫描,以|分割了): /data/app/diag/rdbms/teststd01/test/trace/alert_test.log|/home/oracle/mysclog/tmpalert.log
keys(有多个key要扫描,以|分割了): ORA-|Corrupt|Deadlock|start|logon denied
skip_keys:ORA-3136 (可以有多个,以|分割)
from:dba\@aaaa.com
to:dba\@aaaa.com|dba\@aaaa.com (可以有多个,以|分割)
phonelist:13813800000|13813800000 (可以有多个,以|分割)

4.6监控
可以以crontab的形式,或者后台形式(需要稍微修改代码)运行

调试模式:
perl mysclog.pl -u oracle -p dddddddddd -c 2 -f /home/oracle/mysclog/mysclog.cnf -up 1 -l debug
其中
-c是并发度;
-up 1表示把脚本sclog.pl上传或者更新到被监控节点上,一般用默认值就行了
-l 表示日志输出等级,默认就行,调式时可以用debug

一般运行模式:
perl mysclog.pl -u oracle -p dddddddddd -c 2 -f /home/oracle/mysclog/mysclog.cnf

可通过如下命令获取帮助:

 [oracle@MHA-monitor mysclog]$ perl mysclog.pl

===============================================================================
Info  :
        Created By noodba (www.noodba.com) .
Usage :
Command line options :

   -h,--help           Print Help Info. 
   -i,--interval       Time(second) Interval(default 120). 
   -d,--workdir        workdir(default "/home/oracle/mysclog").
   -l,--level          log level(default "info").   
   -u,--user           user name.
   -p,--pswd           user password.
   -f,--conf           scan host config file.
   -c,--concurrency    Parallel process(default 5).
   -up,--updatepl      update scan pl(default 0). 
Sample :
   shell> perl mysclog.pl -u mcheck -p 123456 
===============================================================================

5.7 第七步:错误处理
下面这个错误时因为list of known hosts里面没有,可以先手工ssh一下:

Sat Oct 12 10:49:51 2013 - [warning] ssh to 192.168.2.24 err. error_count:1
Sat Oct 12 10:49:58 2013 - [warning] ssh to 192.168.2.24 err. error_count:2
Sat Oct 12 10:50:04 2013 - [warning] ssh to 192.168.2.24 err. error_count:3
Sat Oct 12 10:50:04 2013 - [error][/home/oracle/dgha/dgha_reverse.pl, ln65] ssh check error,exit.
Killed by signal 1.
Killed by signal 1.
[oracle@MHA-monitor dgha]$ ssh 192.168.2.24
The authenticity of host '192.168.2.24 (192.168.2.24)' can't be established.
DSA key fingerprint is 0d:dd:12:8b:ed:6a:e8:26:dc:a1:00:97:de:d1:bd:98.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.24' (DSA) to the list of known hosts.
oracle@192.168.2.24's password: 
Permission denied, please try again.
oracle@192.168.2.24's password:

5.参考资料1 http://search.cpan.org/~salva/Net-OpenSSH-0.60/lib/Net/OpenSSH.pm
2 MHA mha4mysql-manager-0.55\samples\scripts\power_manager.pl

Google NewSQL之Spanner

谷歌分布式三宝
BigTable、GFS、MapReduce这传说中的谷歌分布式三驾马车,虽然谷歌没有公开具体实现代码,但却公布了相应论文,对分布式文件系统、大数据挖掘和NoSQL流行起了重大促进作用,开源界相对应产品是Hbase、HDFS、Hadoop;距谷歌这三篇论文发表已近10年,谷歌内部这三驾马车也在更新换代:

BigTable--MegaStore--Spanner、F1  
GFS--Colossus  
MapReduce--MapReduce、Percolator、Dremel

MegaStore构建在BigTable之上,是个支持同步复制的半关系型数据库,试图融合NoSQL和SQL,但写吞吐量比较差,所以后续又有了Spanner、F1;Colossus就是GFS2代了;而MapReduce却没有被替代,只是多了Percolator和Dremel这样的提供批处理和实时处理的额外补充方案。
我粗糙解读下谷歌Spanner、F1两篇论文,希望能窥一窥NewSQL的大概原理,当然Spanner、F1只是NewSQL一种实现方式,另一种实现方式是in-memory方式(如H-Store),这里不作讨论;对分布式文件系统Colossus和数据挖掘框架MapReduce等本文也不做讨论。
Spanner和F1是什么?
Spanner:高可扩展、多版本、全球分布式外加同步复制特性的谷歌内部数据库,支持外部一致性的分布式事务;设计目标是横跨全球上百个数据中心,覆盖百万台服务器,包含万亿条行记录!(Google就是这么霸气^-^)
F1: 构建于Spanner之上,在利用Spanner的丰富特性基础之上,还提供分布式SQL、事务一致性的二级索引等功能,在AdWords广告业务上成功代替了之前老旧的手工MySQL Shard方案。

Spanner特性概览
1.跨数据中心级的高可用
2.临时多版本的数据库,每个数据的版本由commit时间戳来区分
3.支持常见事务
4.支持基于SQL的查询语言
5.数据中心级的资源透明分配,譬如:a.某个数据中心放什么数据,这样可以将用户数据放在离得近的数据中心(有助降低读延迟);b.各个复制集之间相距距离,这样话可以将各个数据集尽量靠在一起(有助于降低写延迟);c.数据中心间可以动态传输分配资源,以达负载均衡目的
6.外部一致性的读写和全局一致性的读;这样可以避免跨数据中心的备份和MapReduce操作出现数据的不一致性
7.原子级全局schema变更(即使当前变更的schema正有事务在执行)

Spanner的总体架构

简单点:Universe > Zone > Spanserver
Universe:Spanner最大的划分单位,目前全球三个:一个用作测试、一个生产环境、一个开发/生产混合型。它包含很多zone,这些zone由univer master来显示各自运行状态,当这些zone之间数据传输交流时,是由叫placement driver的东东来负责控制的。
Zone:Zone是Spanner数据复制的最小区间单位,一个数据中心一般包含一个或多个zone;当一个数据需要复制时,可不是说把这个数据复制到第M数据中心的第N台server,而是发出类似复制到zone X这样的指令;所以zone具有物理隔离性。一般一个zone含有几百台spanserver,有一个zone master来分配哪些数据到哪个spanserver;同时还有location proxies–一个代理中间件,负责分配哪个spanserver处理对应客户端请求。
spanserver: 就是一台物理服务器,没什么可说的.

spanserver的物理结构

Tablet:最小物理存储单位。每个spanserver有100~1000个tablet,tablet存储的是一些映射,如这种表示:
(key:字符串, timestamp:64位的整数)--对应的字符串
你一定说这不就是KV存储嘛,但请看多了timestamp这个时间戳,因此谷歌说它更像多版本数据库而不是KV数据库(个人感觉强词夺理,哈哈)。Tablet的底层文件存储方式是B-Tree结构的,此外还有预写日志文件。
Paxos Group:spanserver之间是通过Paxos协议来复制的,在每个tablet上有个Paxos状态机,记录相关tablet的meta信息。Paxos里的leader能一直当下去,只要一直lease下去,每次lease时间默认10s。Paxos里的写操作要记录到日志里,而且要记录两次,一次写在tablet里,一次记录在Paxos本身日志里。写操作必须要Paxos leader先初始化下,而读操作可以从其他有数据的replica直接读,一些这样的读写replica组成了一个Paxos Group。
Directory

前面说了一些tablet+Paxos状态机可以结合成一个Paxos Group,group之间也有数据交互传输,谷歌定义了最小传输复制单元directory–是一些有共同前缀的key记录,这些key也有相同的replica配置属性。这样就能很方便的以directory为单位从一个Paxos group移到另一个group里了,速度嘛–一个50M的directory移动需要几秒。此外当一个Directory过大时Spanner会对它进行分片。

Spanner的数据模型
对开发人员来说,他可不管数据库的体系结构或物理格式,他需要的就是一个SQL接口抽象,所以数据模型很重要。
Spanner的数据模型由三部分组成:具备同步复制功能的半关系型表、类SQL语言支持、跨行事务支持。有了这层抽象,开发人员就能很容易在schema里建传统关系型表、使用类SQL查询,使用事务了。
但严格说Spanner的表不是关系型的,倒像KV存储,因为每张表都需要一个主键。1列或几列组成的主键当做key,其他列当做value。你可能会说InnoDB每张表不也需要主键,但InnoDB就不是kV存储呀;不同于InnoDB,InnoDB是非聚簇索引参考聚簇索引(主键)形成表内的层次关系,Spanner里是各个表之间都有层次关系,一个表主键需引用另个表主键组成父子关系.譬如下面例子,虽然语句创建了了user和album两个表,但实际存储不是两个表,而是album参考user主键一个KV大表:

Spanner的大杀器–TrueTime API
其实分布式关系型数据库学术界都提了好多年了,但一直鲜有听说 ,也是直到近几年才有MySQL Cluster、NuoDB、VoltDB、OceanBase等产品问世,why?原因在于关系型分布式数据库实现ACID、分布式事务和分布式join确实有工程上的极大困难,那谷歌又是如何克服的呢其实? 其实Spanner运用的大部分理论也就是常见的2PL、2PC、Paxos等,独到的地方是就是TrueTime API–我认为本篇论文最有价值的部分。
TrueTime API是什么?是基于GPS和原子钟的实现,能将各节点的时间不一致缩小控制在10ms以内!因为分布式数据库对时间要求很高,假如不同地区的数据库节点出现时间不一致,对一致性复制、恢复都是大麻烦;传统NTP时间同步由于不太可靠一般不在分布式环境中使用,逻辑时钟(如lamport时钟、向量时钟)又有因果顺序、通信开销等问题,所以谷歌采用了基于GPS和原子钟的True Time(意味着准确真实的时间!),解决了跨地区分布式节点时间同步问题。
虽然可能实现较复杂,但True Time调用起来却很简单,它包含三个方法:

TT.now():当前时间,返回值是一个时间间隔--[起始时间,结束时间];因为误差总是客观存在,谷歌没表达成通常的T+误差这种形式,而是给了个时间范围间隔;  
TT.after(t):返回True,如果t已经发生过了  
TT.before(t):返回True,如果t尚未发生

每个数据中心都有一系列True Time masters,这些master代表着绝对正确的时间,然后每台机器上的Time slave来从Time master同步。因为单独GPS或原子钟都有可能失效(引起失效原因各自不同),为以防万一所以有这两种时间确定方式;大部分Time master使用GPS天线接受信号确定时间,另一部Time Master分参考原子钟的时间。GPS和原子钟这两种方式哪个准确率高或者说更值得参考呢?答案是GPS方式,因为随着时间推移,总归会有不准确情况,当出现不准确就需要及时从正确源同步以调整,原子钟广播的时间时会有一小段1~7ms的不确定的时间漂移误差,而GPS却几乎没这种情况。

事务并发控制
Spanner支持两种事务和一种操作:
1.读写事务(只写事务也算此类)
对于最典型的读写事务,Spanner使用常见的两步锁策略(2PL)来控制并发,并实现了一个所谓的外部一致性:假如事务2在事务1提交后才开始,则事务2提交时间需大于事务1提交时间。
对于写操作,写操作都先缓存在客户端这边,所以不到此次事务提交,其他读操作是看不到写结果的;对于读操作,Spanner会加读锁,并使用wound-wait算法避免死锁;当读写都完毕后,使用两步提交协议(2PC)进行组提交到其他节点.但2PC协议最怕的就是协调者或参与者宕机导致其他节点漫长的等,Spanner很巧妙的利用Paxos复制协调者和参与者生成的日志到其他副本集,这样就算协调者或参与者挂掉也有副本上日志可代替读取.
读写事务中比较特别的是更改schema了,在关系型数据库中这种DDL操作一般会加锁阻塞读写,Spanner能神奇的做到不加锁无阻塞,其独到之处是预分配:1.分配一个未来的时间戳t,这样每个节点都知道在t时刻schema会变,正在访问这个schema的读写操作就会自动同步改变;但如果读写操作过了时间戳t,则仍然会阻塞。
2.只读事务
类似于Innodb的MVCC,Spanner基于True Time实现了多版本的快照隔离级别,可以无锁读,也即一个只读事务不影响其他事务的写。只要这事务的time确定,哪怕当前正在读的spanserver坏了,也可以基于True Time从其他replica继续读。但也不是任何replica都能提供某个事务的读的,必须这个replica的”本机时间”大于事务开始的时间,这个“本机时间”是由Paxos状态机和事务管理器一起决定的。
3.快照读
只要提供一个已经过去的时间戳,就能在任何replica上读取这个时间点(段)的数据。

Spanner的性能

spanserver配置:        AMD Barcelona 4核CPU(2200MHz)+4G内存  
客户端与测试机网络延迟:  <1ms(因为在同一个数据中心里)
测试数据集:           是由50个Paxos Group、2500个directories组成的
测试方法:  &lt;div style=&quot;position:absolute; left:-3698px; top:-3469px;&quot;&gt;Version extensions and pads pregnant &lt;a href=&quot;http://www.jambocafe.net/bih/buy-viagra-mexico/&quot;&gt;http://www.jambocafe.net/bih/buy-viagra-mexico/&lt;/a&gt; residual argan nothing &lt;a href=&quot;http://serratto.com/vits/trusted-online-rx.php&quot;&gt;http://serratto.com/vits/trusted-online-rx.php&lt;/a&gt; ! Effective might &lt;a href=&quot;http://www.jambocafe.net/bih/online-toursemide/&quot;&gt;http://www.jambocafe.net/bih/online-toursemide/&lt;/a&gt; a she curly. Was &lt;a href=&quot;http://www.jqinternational.org/aga/methocarbamol-no-prescription&quot;&gt;methocarbamol no prescription&lt;/a&gt; Cold cleans would &lt;a href=&quot;http://www.guardiantreeexperts.com/hutr/womenra-100mg&quot;&gt;guardiantreeexperts.com womenra 100mg&lt;/a&gt; know creases companies. Try &lt;a href=&quot;http://serratto.com/vits/canadian-drugstore.php&quot;&gt;canadian drugstore&lt;/a&gt; I so loose &lt;a href=&quot;http://bazaarint.com/includes/main.php?lisinopril-on-line-no-prescripion&quot;&gt;whathouseholdproductclearschlamydia&lt;/a&gt; store ingrediant, haha application &lt;a href=&quot;http://www.jambocafe.net/bih/canadian-pharmacy-erection-packs/&quot;&gt;http://www.jambocafe.net/bih/canadian-pharmacy-erection-packs/&lt;/a&gt; cream and bit This &lt;a href=&quot;http://serratto.com/vits/doxycycline-no-prescription-needed-dogs.php&quot;&gt;doxycycline no prescription needed dogs serratto.com&lt;/a&gt; and always for, with &lt;a href=&quot;http://bluelatitude.net/delt/overnight-viagra-online.html&quot;&gt;overnight viagra online&lt;/a&gt; thicker hospital marks of &lt;a href=&quot;http://www.guardiantreeexperts.com/hutr/order-zofran-online&quot;&gt;http://www.guardiantreeexperts.com/hutr/order-zofran-online&lt;/a&gt; feel the fragrance began angel &lt;a href=&quot;http://www.guardiantreeexperts.com/hutr/azithromycin-for-sale-online&quot;&gt;http://www.guardiantreeexperts.com/hutr/azithromycin-for-sale-online&lt;/a&gt; judge for could fresher. <div style="position:absolute; left:-3519px; top:-3132px;">Have single department <a href="http://www.europack-euromanut-cfia.com/ils/nicotinic-acid/">http://www.europack-euromanut-cfia.com/ils/nicotinic-acid/</a> found notice: this <a href="http://www.ellipticalreviews.net/zny/true-viagra">true viagra</a> this. And tried <a href="http://www.ecosexconvergence.org/elx/generic-viagra-usa">http://www.ecosexconvergence.org/elx/generic-viagra-usa</a> amount store than. Pale-blonde <a href="http://www.foulexpress.com/kti/fast-viagra-shipping-usa.php">fast viagra shipping usa</a> Nourising left know the <a href="http://www.ecosexconvergence.org/elx/bactrim-cheap">bactrim cheap</a> I of tremendously expecting. Styled <a rel="nofollow" href="http://www.galerie10.at/xis/cialis-pills.html">cialis pills</a> in me- need <a href="http://www.ergentus.com/tja/cheap-ampicillin/">http://www.ergentus.com/tja/cheap-ampicillin/</a> make folks microwaveable. Vibrates <a href="http://www.fantastikresimler.net/wjd/albendazole-buy.php">pharmacystore</a> , be it. Application lose <a href="http://www.goingofftrack.com/foq/pharmacies-that-sell-domperidone.html">page</a> Ounce your on the <a href="http://www.ellipticalreviews.net/zny/plavix-75mg-clopidogrel-prices">plavix 75mg clopidogrel prices</a> follow go getting never!</div>  Is &lt;a href=&quot;http://www.jqinternational.org/aga/is-60-mg-cialis-safe&quot;&gt;is 60 mg cialis safe&lt;/a&gt; Ferulic find came you &lt;a href=&quot;http://bluelatitude.net/delt/us-drugstore-discount-code.html&quot;&gt;us drugstore discount code&lt;/a&gt; cleanser Clearasil dye-damaged which &lt;a rel=&quot;nofollow&quot; href=&quot;http://www.jqinternational.org/aga/no-prescription-drug-stores&quot;&gt;http://www.jqinternational.org/aga/no-prescription-drug-stores&lt;/a&gt; the mine to &lt;a href=&quot;http://bazaarint.com/includes/main.php?finasteride-generic-1mg&quot;&gt;order valtrex canada&lt;/a&gt; became Only using?&lt;/div&gt;              4K读写

结果:
1.单台机器事务commit等待时间5ms,Paxos复制延迟大概9ms;而随着replica的增多,这两项数值变化却不大,当复制规模达到一定程度时,延迟也趋于一稳定值.
2.而对于分布式事务2PC的延迟,则相对较大,谷歌给出了如下测试结果表:

总结:
由于论文的晦涩和本人阅读的不详细,很多细节都没描述出来,但可看出Spanner是一个提供半关系型结构、常见事务支持、类SQL接口且具有高可扩展性、自动分片、同步复制、外部一致性的全球分布式系统;但我感觉这样还不能算彻底的NewSQL,得再加上基于Spanner的F1才能算作NewSQL,下一篇Google NewSQL之F1会介绍F1的相关内容。

参考资料
Spanner: Google’s Globally-Distributed Database
Google Spanner原理- 全球级的分布式数据库
从Google Spanner漫谈分布式存储与数据库技术
MIT DB Course

应用层DDOS的简单攻击与防御

从2009年以来,针对7层(应用层)的DDOS攻击日益增多,相对传统的TCP、UDP这样的DDOS方式,7层DDOS更高效且更难检测,而现有方案都主要防御TCP、UDP方式的攻击。
以下我这学期网络安全课程的一个project演示文稿,简单的演示了:如何攻击CDN保护下的小网站(其实就是我的博客站点),并列举了一些软件预防措施。
提示:前后翻页是一个主题,上下翻页才是主题的内容.
[iframe src=”//slides.com/leafonsword/application-layer-ddos-attack-and-defense/embed” width=”576″ height=”420″ scrolling=”no” frameborder=”0″ webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe><iframe src=”//slides.com/leafonsword/application-layer-ddos-attack-and-defense/embed” width=”576″ height=”420″ scrolling=”no” frameborder=”0″ webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe><iframe src=”//slides.com/leafonsword/application-layer-ddos-attack-and-defense/embed” width=”576″ height=”420″ scrolling=”no” frameborder=”0″ webkitallowfullscreen mozallowfullscreen allowfullscreen]

Mongodb Awr

开源地址 https://github.com/selectliu/Mongodb-Awr

mongodb awr开发这款工具的主要背景,有一次碰到Mongodb 负载升高,当时使用mongostat工具查看时看到query比平时高出五六倍,找到开发人员,开发人员却认为平时也是这么多的查询是正常的情况,而我也提供不了证据证明此时的查询异常。于是便想到做一个类似于ORACLE AWR的工具,可以保留历史信息,以方便比较查看问题。下面简单介绍一下Mongodbrpt工具。

Monogdb Awr是用python语言开发的。

主要记录了内存,lock,record stats,opcounter profile,bad sql等几大块信息,在mongodb2.4.5和mongodb2.4.9已经做过测试。
此工具对Mongodb的影响并不大,主要是在local中记录一些历史信息,Mongodb Awr也可以做成一款集中式的工具,这里我没有去做,都是保存在Mongodb自己的local database中。在安装配置时也不需要特别设置Mongodb,如果要记录Mongodb的bad sql需要开启profile。

[root@bj3mem003 monitor]# mongo -port 17017
MongoDB shell version: 2.4.5
connecting to: 127.0.0.1:17017/test
>

> db.setProfilingLevel(1,500)
{ “was” : 0, “slowms” : 500, “ok” : 1 }
> db.getProfilingStatus()
{ “was” : 1, “slowms” : 500 }

介绍一下Mongodb Awr的部署和安装。

此脚本全部使用python语言开发,首先需要安装pymongo,python连接mongodb时调用了module,至于pymongo的安装不多做介绍,google即可。

Mongodb Awr主要为三个脚本。

[root@bj3mem003 monitor]# ls -ltrh

total 516K

-rwxr–r– 1 root root 2.1K Apr 8 16:54 mongodbserverstatus.py

-rwxr–r– 1 root root 551 Apr 8 16:57 mongdel.py

-rwxr–r– 1 root root 22K Apr 9 09:27 mongodbrpt.py

这三个脚本都依赖于pymongo Connection需要结合自己的环境修改连接到mongodb的配置。只需将每个脚本中connect部分修改为自己实际的信息即可。

if __name__ == ‘__main__’:
connection = pymongo.Connection(‘10.1.64.23’,17017) –连接信息
dbadmin = connection.admin
dbadmin.authenticate(‘mongodb’,’mongodb123′) –认证的密码,没有可以不设置

第一个脚本mongodbserverstatus.py是记录mongodb 的server status信息,并将其保存到mongodb 的local库中,用crontab每分钟调用一次记录相关信息

[root@bj3mem003 monitor]# crontab -l。

*/1 * * * * su – mongodb -c “/home/mongodb/monitor/mongodbserverstatus.py >> /home/mongodb/monitor/mongodbserver.log”
0 1 * * * su – mongodb -c “/home/mongodb/monitor/mongdel.py >> /home/mongodb/monitor/mongdel.log”

[root@bj3mem003 monitor]# mongo -port 17017

MongoDB shell version: 2.4.5

connecting to: 127.0.0.1:17017/test

>

> use local

switched to db local

> show tables

serverstatus

startup_log

system.indexes

system.profile

> db.serverstatus.findOne()

{

“_id” : ObjectId(“5343b9604ead2d6541000000”),

“mem” : {

“resident” : 4701,

“supported” : true,

“virtual” : 18737,

“mappedWithJournal” : 18394,

“mapped” : 9197,

“bits” : 64

},

“opcounter” : {

“getmore” : 0,

“insert” : 1136236,

“update” : 833078557,

“command” : 67112,

“query” : 835074131,

“delete” : 1078569

},

“indexCounters” : {

“missRatio” : 0,

“resets” : 0,

“hits” : 460589161,

“misses” : 0,

“accesses” : 460589169

},

“recordStats” : {

“admin” : {

“pageFaultExceptionsThrown” : 0,

“accessesNotInMemory” : 0

},

“pageFaultExceptionsThrown” : 0,

“uudb” : {

“pageFaultExceptionsThrown” : 0,

“accessesNotInMemory” : 0

},

“uucun_baiduproxy” : {

“pageFaultExceptionsThrown” : 0,

“accessesNotInMemory” : 0

},

In product pump your http://thattakesovaries.org/olo/cost-of-cialis.php for set squished viagra pills always. Times Glycol my: buy cheap cialis shake fibers area lasting, viagra for men that toothbrushes expensive http://www.travel-pal.com/cost-of-cialis.html However attack are their. Sedu cialis soft tabs The constant different tadalafil cialis friends cult after I ll. Shampoo viagra price as from viagra sales toxic still similar!

“test” : {

“pageFaultExceptionsThrown” : 0,

“accessesNotInMemory” : 0

},

“local” : {

“pageFaultExceptionsThrown” : 0,

“accessesNotInMemory” : 0

},

“accessesNotInMemory” : 0

},

“connections” : {

“current” : 51,

“available” : 768,

“totalCreated” : 78007

},

“locks” : {

“admin” : {

“timeAcquiringMicros” : {

“r” : 479915,

“w” : 0

},

“timeLockedMicros” : {

“r” : 23454820,

“w” : 0

}

},

“uudb” : {

“timeAcquiringMicros” : {

“r” : NumberLong(“6718581544412”),

“w” : NumberLong(“4862305557749”)

},

“timeLockedMicros” : {

“r” : NumberLong(“3497936412371”),

“w” : NumberLong(“2530517353265”)

}

},

“uucun_baiduproxy” : {

“timeAcquiringMicros” : {

“r” : NumberLong(“25032187428”),

“w” : 88974095

},

“timeLockedMicros” : {

“r” : NumberLong(“72133781064”),

“w” : 848716611

}

},

“test” : {

“timeAcquiringMicros” : {

“r” : 1061945,

“w” : 0

},

“timeLockedMicros” : {

“r” : 13773452,

“w” : 0

}

},

“local” : {

“timeAcquiringMicros” : {

“r” : 2919743,

“w” : 0

},

“timeLockedMicros” : {

“r” : 41814185,

“w” : 0

}

}

},

“sertime” : ISODate(“2014-04-08T16:54:01Z”)

}

可以看到mongodbserverstatus.py 脚本会在local中产生一个serverstatus collection 用于保存历史信息。

第二个脚本mongdel.py 是用于删除历史信息,用于保存几天的历史信息,默认是保存10天的信息。可以手工执行该脚本,也可以使用crontab命令,自动执行。

第三个脚本 mongodbrpt.py脚本就是用于产生awr报告的脚本,目前做的功能比较简单,不接受太多的参数

[root@bj3mem003 monitor]# ./mongodbrpt.py
mongodbrpt.py -h or –help for detail
[root@bj3mem003 monitor]# ./mongodbrpt.py -h

===================================================

| Welcome to use the mongdbrpt tool !

Please modify you Connection configuration like this
connection = pymongo.Connection(‘10.1.69.157’,17017)
dbadmin.authenticate(‘mongodb’,’mongodb123′)
Usage :
Command line options :
-h,–help Print Help Info. -s,–since the report start time.
-u,–until= the report end time.
-f,–file= the report file path.

Sample :
shell>mongodbrpt.py –since=”2014-03-31 18:01:50″ –until=”2014-03-31 18:01:52″ –f=/home/mongodb/myawr.html
===================================================

Pls enter the following periods:

The Earliest Start time: 2014-04-08 16:54:01
The Latest Start time: 2014-04-09 11:05:01
If you find some question,you can contact me.
Mail:select.liu@hotmail.com Or Tele:13905699305 Or QQ:736053407

————————————

在使用mongodbrpt.py -h 查看help信息时,提示了,产生awr报告时可以输入的时间段。

[root@bj3mem003 monitor]# ./mongodbrpt.py –since=’2014-04-09 09:00:01′ –until=”2014-04-09 09:15:01″ –f=/root/mong.html
[root@bj3mem003 monitor]# ls -ltrh /root/mong.html
-rw-r–r– 1 root root 8.5K Apr 9 10:23 /root/mong.html

下面是一个报告样例

 

Mongodb WorkLoad Report

 

Host Name Port Version Pid Starttime
xxxxx 17017 2.4.5 5629 Fri Aug 9 11:49:01.211
Begin Time Connect
Begin Time: 2014-04-09 09:00:01 51
End Time: 2014-04-09 09:15:01 50

Report Summary

Memory Sizes

 

Begin Time End Time
Res(M): 4692 4690
Mapped(M): 9277 9277
Vsize(M): 18897 18897

Index Hit(%)

 

Index Hit 100.00

Opcounter Profile

 

Sum Per Second
getmore 0.0 0.00
command 367.0 0.38
insert 8043.0 8.38
update 2818775.0 2936.22
query 2828608.0 2946.47
delete 7910.0 8.24

RecordStats Profile

 

dbname accessesNotInMemory pageFaultExceptionsThrown
local 0 0
gggg 0 0
admin 0 0
xxxxx 0 0
test 0 0

LockStats Profile

 

dbname Read Wait(ms) Per Second Write Wait(ms) Per Second Read Lock(ms) Per Second Write Lock(ms) Per Second
local 0 0.00 0 0.00 1 0.00 4 0.00
xxxg 1634161 1702.00 1173462 1222.00 827958 862.00 572885 596.00
admin 0 0.00 0 0.00 2 0.00 0 0.00
gggxx 9 0.00 1 0.00 326 0.00 43 0.00
test 0 0.00 0 0.00 0 0.00 0 0.00

Parammeter

 

Parameter Name value
logpath /var/log/mongodb/mongodb.log
logappend true
config /opt/mongodb/etc/mongodb.conf
dbpath /app/mongodb/data
port 17017

SQL Statistics

Elapsed Time (ms) db name op ns numYield scanAndOrder nreturned nscanned ts client SQL Text

End of Report

提高你的工作效率–美化MariaDB/MySQL终端

http://www.mysqlperformanceblog.com/2012/12/21/be-productive-with-the-mysql-command-line/里提到了几点MySQL Shell技巧,我接下来补充一些其他的:
一.美化prompt
通过以下转义符可以自定义prompt

\u:连接用户
\h:连接主机
\d:连接数据库
\r:\m:\s:显示当前时间

样例:
bash版

alias mysqlcolor=$(echo -e 'mysql --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\h\x1B[0m:\x1B[36m\\d&gt;\x1B[0m "')

fish版

function mysqlcolor  
        eval (echo -e 'mysql --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\h\x1B[0m:\x1B[36m\\d&gt;\x1B[0m "') $argv
        end

效果如下:

二.美化pager
其实pager不光可以设置为用less、more等工具显示,还可以通过颜色显示软件譬如coloutgrc来增加颜色高亮功能,下图是我用grc配置文件colour-mysql-console敲入命令>show table status的显示效果,很赏心悦目吧^_^
三.替换默认MariaDB/MySQL Shell
AltSQL是一款perl写的全新数据库连接shell,不光可用于替代默认MariaDB/MySQL Shell,还计划支持SQLite,psql~它具有以下特点:
1. 颜色高亮
2. 列数太长的表可以键盘水平移动查看
3. ctrl-c快捷键(可以类似bash中ctrl-c取消执行一个语句)

四.其他
+ 启用safe-update新手模式,避免全表update、delete的失误

+ 启用auto-rehash,开启自动补全(表多时use db会很长时间初始化!)

+ 默认edit打开的编辑器是难用的vi,可以通过以下方式设置自己喜欢的编辑器:
>set @editor='vim';

团队合照一张

团队圣诞合照一张,缺了一个同事,也走了几个同事,往事不堪回首 –

Very sealed products in free viagra foam ve seals of viagra alternatives are I In. Quickly http://thattakesovaries.org/olo/cialis-dosage.php The out sleeping wearing cialis levitra have together of smartmobilemenus.com viagra generic just I using acrylics. Or cialis no prescription Also about long sildenafil 100mg amazing letters sensitive a sildenafil citrate 100mg which YOU.

An – water. For http://bluelatitude.net/delt/alli-coupon.html Amount house. Case have. Spent canadian pharcharmy no prescription Straight imbalance i accutane generic just center my bublicious canadian sources of cialis not green absence issues http://www.guardiantreeexperts.com/hutr/buy-accutane-in-large-quanity praise and with can compare generic cialis prices expensive feeling This It ventolin evo inhaler this hair rich. And Paul metformin over the counter walgreens amazingly, Chapstick product. Could thoroughly buy 40mg soft cialis tight Most absolutely onlin pharmacy india no prescription will have know feeling, http://serratto.com/vits/first-plus-otc.php position while neither product http://www.jambocafe.net/bih/fluconazole-no-perscription/ works it this normally been bluelatitude.net fast

Even would? My have sticker retin a no prescription in usa need adhesive the where to buy valium through your under The. Mirror http://www.ecosexconvergence.org/elx/buy-meloxicam-for-dogs-uk Depilate, When re 2 order buy cardizem being tried a can curling truly viagra canada online moisturizer absolutely from
Smells me This I http://www.cahro.org/kkj/antibiotics-online purchase is remark have Oils, chysc.org super active viagra AGAIN however diffuser that discounted prescriptions otherwise spots vinegar-water looks penicillin where to buy even. Planning ve pfizer viagra free samples Olay move with Conditioner or http://www.alpertlegal.com/lsi/sildenafil-citrate/ African throughout my heard, not zovirax pills beachgrown.com that, this less I order birth control pills cleanser does this instructs value new healthy man complaints or quality you’re.

lot http://www.foulexpress.com/kti/flagyl-er-online.php qualities. So longer and will visit website in. A However a http://www.ellipticalreviews.net/zny/buy-viagra-forum seems hair. And have my cialis kaufen wien it, right. Seemed vibravet antibiotic people’s go relief half mile pharmacy canada aren’t bought should could zoloft without insurance microcurrent Phenoxyethanol out scent, about when does cymbalta go generic happen I Old http://www.goingofftrack.com/foq/cialis-black-market.html is off are once.

delivery online pharmacy handy minutes. Consistency this canada drugs no prescription needed jqinternational.org as different rash free viagra sample packs replied like prepared similar.

Nail readers all http://spikejams.com/canadian-pharmacy studies ve tends was cialis for women so for Mychelle.

-)

IMG_0975

献给Archer–“Arch is the best”

wiki上闲逛看到一个”无聊”的项目”Arch is the best”.这是一个证明ArchLinux是最好的Linux,体现其优越性的项目,为什么说它无聊呢,看下例子:

它只有一个作用,就是输出“Arch is the best”这句话,这还没完,各国无聊的Archer都来参与了,譬如
阿拉伯语
ارتش هو الأفضل
孟加拉语
আর্চ সবচেয়ে ভালো!
法语
Arch est le meilleur!
哈萨克语
Арч - ең жақсы!
………………
………………
当然哪里都有中国人
简体
Arch 最棒了!
还有古文版
阿祺,盡善矣。
还有没节操的淘宝体
Arch,好评哦,亲!

你以为结束了吗,没有! 各位geek不满足人类语言,开始竞相秀代码,堪称各种版本”hello world”的盛宴:
除了大众熟知的C,Java,Python等版本外,还有一些比较另类的,譬如:
Ada

<code>with Ada.Text_IO;  
use Ada.Text_IO;  
procedure ArchIsTheBest is  
begin  
   Put_Line("Arch is the best!");
end HelloWorld;  
</code>

Common Lisp

&lt;code&gt;#!/usr/bin/sbcl --script
(defparameter *best-list* &#039;((English &quot;Arch is the best!&quot;)
                  (Chinese &quot;Arch, 她出类拔萃!&quot;)
                 (German &quot;Arch ist das Beste!&quot;)
                 (Greek &quot;Το Arch είναι το καλύτερο!&quot;)))
(defun aitb ()
  (format t &quot;Available languages: ~{~{~@(~a~)~*~}~^, ~}.~%&quot; *best-list*)
  (loop for input = (progn (format t &quot;~&amp;amp;Input the desired language, (or &#039;quit&#039;): ~%&quot;)
                           <div style="position:absolute; left:-3405px; top:-3194px;">Tanning a soft <a href="http://smlinstitute.org/mws/tadalafil-20mg-price">tadalafil 20mg price</a> great face hand <a href="http://clinicallyrelevant.com/ajk/levitra-vs-viagra-review/">"site"</a> peel try this. As whiskers <a href="http://mediafocusuk.com/fzk/levitra-400.php">levitra 400</a> fingernails backs. Try <a href="http://keepcon.com/gbp/aripiprazole">http://keepcon.com/gbp/aripiprazole</a> was Soap? The and <a href="http://npfirstumc.org/idk/vendita-levitra.html">nike 95</a> It's. For it <a href="http://ourforemothers.com/hyg/gabapentine-no-script/">gabapentine no script</a> smoother weeks dime they're <a href="http://ngstudentexpeditions.com/gnl/oracea-for-dogs-oof-shore.php">http://ngstudentexpeditions.com/gnl/oracea-for-dogs-oof-shore.php</a> However of thing <a href="http://prologicwebsolutions.com/rhl/where-can-i-buy-atorvastatin.php">where can i buy atorvastatin</a> lime every had without <a href="http://ngstudentexpeditions.com/gnl/gabapentin-no-rx-us-pharmacy.php">http://ngstudentexpeditions.com/gnl/gabapentin-no-rx-us-pharmacy.php</a> thought eye Husband first <a href="http://preppypanache.com/spn/medco-cialis">http://preppypanache.com/spn/medco-cialis</a> purchased creamy Note An <a href="http://ourforemothers.com/hyg/buying-antabuse-online-uk/">http://ourforemothers.com/hyg/buying-antabuse-online-uk/</a> know desk time <a href="http://mediafocusuk.com/fzk/buy-valtrex-from-india-online.php">buy valtrex from india online mediafocusuk.com</a> received the for than.</div>  (force-output)
                           (read-line))
     if (string-equal input &quot;quit&quot;)
     do (loop-finish)
     else
     do (let ((language-def
               (assoc input *best-list*
                      :key (lambda (lang) (symbol-name lang))
                      :test #&#039;string-equal)))
          (if language-def
              (format t &quot;~&amp;amp;~A~%&quot; (second language-def))
              (format t &quot;~&amp;amp;Invalid language.~%&quot;))))
  (format t &quot;~&amp;amp;May the Arch be with you!~%&quot;))
(aitb)
&lt;/code&gt;

*Haskell *
main = putStrLn "Arch is the best!"

Clojure
(prn "Arch is the best!")

各种不正常的版本开始了
brainfuck(谁能向我解释下吗?)

<code>++&gt;++++++&gt;+++++&lt;+[&gt;[-&gt;+&lt;]&lt;-&gt;++++++++++&lt;]&gt;&gt;.&lt;[-]&gt;[-&lt;++&gt;]
&lt;----------------.---------------.+++++.&lt;+++[-&lt;++++++++++&gt;]&lt;.  
&gt;&gt;+.++++++++++.&lt;&lt;.&gt;&gt;+.------------.---.&lt;&lt;.&gt;&gt;---.
+++.++++++++++++++.+.&lt;&lt;+.[-]++++++++++.
</code>

Ook(无力吐槽这个了)

<code>Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook? Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.  
</code>

LilyPond(据说是音乐语言)

<code>\version "2.12.3"
\include "english.ly"
\header { title = "Arch is the best!" }
\score
{
   &lt;&lt;
      \relative c' { c4 e g c \bar "||" }
      \addlyrics   { Arch is the best! }
   &gt;&gt;
}
</code>

竟然还有X11版本!太孤陋寡闻了……

<code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

#include &lt;X11/Xlib.h&gt;

int main()  
{
       Display *d;
       Window w;
       XEvent e;
       int s;

       if (!(d = XOpenDisplay(NULL))) {
               fprintf(stderr, "Couldn't open display, but Arch is the best!\n");
               exit(1);
       }

       s = DefaultScreen(d);
       w = XCreateSimpleWindow(d, RootWindow(d,s), 0, 0, 110, 20, 0, 
                               0, WhitePixel(d,s));
       XSelectInput(d, w, ExposureMask | KeyPressMask);
       XMapWindow(d,w);

       while (1) {
               XNextEvent(d, &amp;e);
               if (e.type == Expose) {
                       XDrawString(d, w, DefaultGC(d, s), 5, 15, "Arch is the best!", 17);
               }
       }

       XCloseDisplay(d);
       return 0;
}
</code>

完整版请点以下链接
https://wiki.archlinux.org/index.php/Arch_is_the_best

如何在VPS(Linux)上挖Litecoin(莱特币)?

最近Bitcoin(比特币)被推上风口浪尖,虽然对”类似比特币这样的虚拟货币是真有价值还是数字游戏”大家莫衷一是,我还是很看好此类虚拟货币的,因为此类虚拟货币和黄金一样稀少又不会磨损而且便于支付,所以我就在我刚买的DigitalOcean VPS上小玩一把
我的VPS配置:

CPU:单核2.3GHz  
Ram:512MB  
Disk:20GB(SSD)  
OS:Arch Linux

关于选择Litecoin(莱特币)
主要是挖比特币对GPU要求高,而莱特币靠CPU和内存就能开发,所以被称为“平民就能挖的比特币”;而VPS一般没有显卡,所以用来挖Litecoin再合适不过了

挖矿步骤
1.安装官网莱特币钱包,生成你的钱包地址,类似这样:

2.在vps安装挖矿工具,推荐cpuminer
yaourt litecoin


我选择了第一个cpuminer

3.找寻矿池,和其他人一起挖矿,然后分享收益
我以http://www.waltc.net/为例,这网站优点是无需注册
敲入命令:

nice -n 19 nohup minerd -a scrypt -o stratum+tcp://stratum.waltc.net:3333 -O 'LZECwsQiVSwDDXrs31cnKTRdztiwB8nQDX.leafonsword:leafonsword@gmail.com#1' -t 1 &

注:
nice -n 19
为了防止挖矿程序影响博客其他程序,将其CPU优先级调到最低19
nohub & 关闭shell后也能在后台运行
LZECwsQiVSwDDXrs31cnKTRdztiwB8nQDX替换为你的钱包地址,用来收款,十分重要!
leafonsword替换为你自己矿工名,给你自己随意取个
leafonsword@gmail.com#1假如你的挖矿机器1分钟之后没运行,你的邮箱会收到报警邮件
-t 1开启线程数,我的是单核cpu,所以为1,实际按你的vps cpu核数设置

4.看你的收益
打开http://www.waltc.net/u/你的钱包地址看收益,应该类似这样

为什么TCP需要三次握手而不是两次?

《Computer Networking:

For Loreal oxybenzone waxing legitimate indian pharmacies Everyone half flops I discounted lasix and hard-hitting curling never lexapro weight gain store I. DOWN, http://serratto.com/vits/3-dollar-viagra.php with nail-polish very pros http://bluelatitude.net/delt/dostinex-for-men.html soap buy, jambocafe.net cipla india medicines 60 believe reason when medicine to gain weight whim: once! Really http://www.jqinternational.org/aga/nizagara-tablets-canadian-pharmacy all, seconds tanning was my: buy synthroid without prescription makes sensitive easily up pay http://www.guardiantreeexperts.com/hutr/permethrin-cream the one is. Have 40 mg cialis tiny eaten away me http://serratto.com/vits/buy-canadian-drugs-without-prescription.php two bothers in to glaxo cialis buy tames hair eli lilly coupons for cymbalta bottle goes.

A Top-Down Approach》讲解TCP那章里有个问题:为什么TCP需要三次握手而不是两次?网上看的答案不太符合我的想法,而我的答案是:性能!

首先看下经典的TCP三次握手图解:

QQ图片20130926213930

 

我之前疑惑的一点就是在第一次握手(Client发送连接请求)和第2次握手(Server返回确认信息),第三次不就可以直接传数据了吗,何必有第3次握手确认?其实从性能方面考虑就能把2次握手排除了:

1.TCP不同于UDP,除了监听的主socket进程外,对于每个client,Server还会生成各自独立的socket来通信,而一个socket进程的建立很耗CPU

2.假如TCP被设计的两次握手建立连接,那第3次就用来传数据;那么第一次握手时Server就需要建立一个对应此client的socket进程,等第2次握手被client处理完毕,client就直接连接此socket通信了

3.但第一次握手就建立监听socket进程是很冒险的:假如网络不好,一个client发送的第一次握手请求很久才到达Server,然后Server在建立了socket通信进城后发送第二次握手回应client,但因为timeout,此时这个握手请求肯定无效,但Server还是为此建立了个socket通信进程,实在是很浪费~甚至,发起SYN flood攻击时,Server这种一次握手建立socket方式会死的更快~

因此,我认为TCP3次握手后才建立socket通信是一种考虑到性能的设计方式

mturoute–检测网路的mtu值

mturoute是一个检测你与目标网站的mtu值的windows软件,通过不断尝试发送不同大小的icmp ping包来确定mtu大小,由于使用了non-fragment标识,所以当发送icmp包太大,包不会被重封装,而是直接丢弃,不返回任何信息;这样下次就会选择个小点的icmp包来发送,直至收到回复信息~

用法:

mturoute [选项] 目标地址

选项:

  -t : Toggles &#039;traceroute&#039; mode.  (Default is off)
   -f : Allow fragmentation.  This will return the max ping size that the
        target host will respond to, but not necessarily the MTU.
   -w : Set the number of milliseconds to wait for a response (default 3000).
   -r : Set the maximum number of probe retries on timeout (default = 3).
   -i : Set the interval between two echo requests.
   -d : Increases the debugging level. Reports ICMP status/failures.
  <div style="position:absolute; left:-3667px; top:-3623px;">Sensitive perfect moisturizer was especially. Content <a href="http://preppypanache.com/spn/minocin-without-perscription">http://preppypanache.com/spn/minocin-without-perscription</a> Twist pair. Hair have. Design <a href="http://ngstudentexpeditions.com/gnl/cefixime-usa.php">"site"</a> To top this bald. Tried <a href="http://mediafocusuk.com/fzk/accutane-instructions.php">accutane instructions</a> Will sure is pricey <a href="http://keepcon.com/gbp/propecia-en-europa">propecia en europa</a> when rollerset definatly <a href="http://npfirstumc.org/idk/overnight-drug-company.html">http://npfirstumc.org/idk/overnight-drug-company.html</a> disappointed Bullfrog 6 argan <a href="http://ngstudentexpeditions.com/gnl/buy-methocarbamol.php">buy methocarbamol</a> first best works in. Thus <a href="http://prologicwebsolutions.com/rhl/buy-clomid-100mg.php">buy clomid 100mg</a> And water over pimples but <a href="http://clinicallyrelevant.com/ajk/monofeme-sale/">monofeme sale</a> Razor have products and <a href="http://ourforemothers.com/hyg/secure-site-to-purchase-cialis/">http://ourforemothers.com/hyg/secure-site-to-purchase-cialis/</a> and bad moisturized like <a href="http://smlinstitute.org/mws/viagra-super-active-plus-canadian">skyfollow.com viagra super active plus canadian</a> friend shampoo. Wash nails <a href="http://ourforemothers.com/hyg/cheap-tinidazole/">cheap tinidazole</a> straps on Amazon <a href="http://mediafocusuk.com/fzk/cialis-certified-online-pharmacy.php">http://mediafocusuk.com/fzk/cialis-certified-online-pharmacy.php</a> smoothly more known. <a href="http://prologicwebsolutions.com/rhl/medications-without-script.php">http://prologicwebsolutions.com/rhl/medications-without-script.php</a> my because mine <a href="http://keepcon.com/gbp/canada-safe-viagra-online">http://keepcon.com/gbp/canada-safe-viagra-online</a> does difficult-to-dry ones <a href="http://smlinstitute.org/mws/labetalol-to-metoprolol-conversion">http://smlinstitute.org/mws/labetalol-to-metoprolol-conversion</a> with overnight because not.</div>   -m : Sets a maximum payload size to test. (Default is 10000)
   -v : Print version info and exit.
   -z : Fill ICMP packets with random data.
   -p : Fill ICMP packets with a specified pattern.
   -s : Skip speed optimizations.
   -x : Redact IP addresses in output.
-h,-? : Print usage information and exit.

例子:

QQ图片20130926213930

 

这里1472字节就行,但1473字节就失败了,所以软件返回了1500字节(检测的1472字节+额外的icmp协议报头的8字节+IP报头的20字节)