DEAD MAN CODING

FOOOLING.COM

涨姿势,LVS的syn_proxy引发的奇怪现象

2015-07-20 11:24:28

都知道TCP建立连接的时候会有个SYN握手。这件事情在LVS的fullnat模式下由于引入了一个“中间人”, 建立连接时会有两种策略。
1. 客户端与服务端的包全部经过中间人的转手, 原样递给双方。
2. 客户端与服务端的TCP连接时不会立即直接和服务端建立, 而是中间人单独和客户端建立连接,然后中间人再去和服务端建立连接。这种方式也就是syn_proxy这个功能的意义了。

从这两个方式本身来看, 正常的情况应该是用第一种了, 第二种有个明显的问题是,客户端认为连接建立好的时候其实并没有。。那么客户端接着发的内容就会被“阻挡”在中间人或者中间人满了有拒绝可能,这样的好处是流量超大时,前端请求不会把服务端压跪。

那么, 有件事情是最近遇到的。现象是客户端建立连接(应用层连接)速度异常缓慢(比如建100个连接的话, 平均1~2秒才能建好一个连接),而tcp连接的建立则表现出毫无压力的迹象,超级蛋疼。
抓包发现tcp win 的值会被LVS给从14600压制到115,这个窗口大小从TCP知识上来说是服务端告诉客户端自己只能接受xx大,多的受不了,那么客户机就会乖乖地把窗口改成115了。

于是试着投机取巧用sysctl将客户机的tcp window关了。。 改了下客户端的net.ipv4.tcp_window_scaling。 然后出现了神奇的一幕,客户机不再理会LVS设置tcp窗口的请求了,全部一口气发过去, 建100个连接倒是秒建了,然而QPS下降一半。。

果然还是不行的。最后联系了负责LVS的兄弟,他一看果然是syn_proxy给打开了。

另外,除了建连接慢,另一个比较奇怪的现象是一条消息,超过一定大小就会变得很慢,从1ms变为2s。。这个目前怀疑也和这个tcp win太小有点关系, 暂时还没想明白具体的机制(有想法了会更新)


所以LVS的这个syn_proxy虽然在防攻击上面挺好,但导致的一些诡异的问题真是很蛋碎。。


阅读全文

WINDOWS 使用符号链接平稳迁移C盘占硬盘空间的文件夹

2015-06-02 15:13:34

肥皂镇楼!! 这是我的一篇旧文了,上次又用到找了下才找到,故翻出造福大家。

windows 其实是有符号链接的,并非是快捷方式

创建符号链接需要使用mklink这条命令
符号链接的作用类似快捷方式
使用windows时  经常会有c盘空间不断减少的情况,
比如 C:\Users\Administrator\Downloads  这样一个文件夹,不想在每个下载工具都改一遍默认下载路径时,内容就会越来越多。
我们可以在另外盘(比如e盘)   建立一个任意名字的文件夹(比如downloads)
然后将原来 C:\Users\Administrator\Downloads 中的文件全部移动至e:\downloads
然后删除 C:\Users\Administrator\Downloads     (否则无法创建符号链接)

然后 运行->cmd   输入


mklink /d "%HOMEPATH%\Downloads" "E:\Downloads"
的其中%HOMEPATH% 代表了C:\Users\Administrator\  这货 ,可以直接输入具体地址,不影响。
然后就成功地平滑移动了原来文件夹中的内容。 C盘空间得到释放。
遇到必须装在c盘的东西也可以使用同样方法避免空间消耗哦



-------------------------------------人肉分割线-----------------------------------

这次场景是这样的, Win8系统只给了40G的系统盘, 一堆东西自动装在了C盘, 按章上面的方式得先删除原文件夹才能创建,这次想了个更奇葩的方式, 直接替换,例如本来要建立 Downloads这个符号链接, 但是Downloads这个文件夹正被某个程序所使用,OK,我们复制到D盘之后,创建一个Downloads2符号链接链到D盘。 怎么替换呢?  答:关机!。。

对, 比如切换到另外个系统ubuntu,然后把源文件夹删了或者命名为Downloads3 以备恢复, ...

阅读全文

MySQL 5.7.7-labs-json

2015-06-02 14:41:28

最近发现MySQL官网上出现了一种原生支持json的mysql版本,在http://labs.mysql.com/ ,选那个json。目测bin包推荐el6系统, 遂在阿里云买了个按量计费的ECS,准备花一块钱体验下, 效果不错还实惠。

经过一番折腾,写了如下安装脚本,有需要拿走

gist:https://gist.github.com/fooling/28a5db37e7cd60375f81

懒得点或者被墙了可以直接复制下面


#!/bin/bash
 
tar zxvf mysql-5.7.7-labs-json-linux-el6-x86_64.tar.gz
 
path=`pwd`
root_path=$path/mysql-5.7.7-labs-json-linux-el6-x86_64
mkdir /opt/mysql
mkdir /opt/mysql/mysql
mkdir /opt/mysql/mysql/data
useradd mysql
usermod -a -G root mysql
chown -R mysql:mysql $root_path
chown -R mysql:mysql /opt/mysql
mkdir /var/run/mysqld
chown -R mysql:mysql /var/run/mysqld
ln -s $root_path/lib /var/lib/mysql
ln -s $root_path /usr/local/mysql ...

阅读全文

一个因为没看清楚mysql版本引起的xx

2014-10-18 04:50:25

升级10.10后,重装了homebrew,死活装不上MySQL-python这个包

总是提示


fooling@fooling-2:~$ easy_install MySQL-python

Finished processing dependencies for MySQL-python
fooling@fooling-2:~$ python
Python 2.7.8 (default, Oct 19 2014, 11:46:44) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.51)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in ...

阅读全文

说说Google authenticator这玩意

2014-08-23 10:38:02

如果你用过“支付宝钱包”里面的那个“手机宝令”,就应该对这玩意的形式不陌生。

Google authenticator(https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2)

好吧中文名叫“身份验证器”

目前支持两种模式:


1. 基于时间,TOTP 
2. 基于计数器,HOTP


而我们熟悉的这种方式就是基于时间,离线地根据一个时间戳和秘钥来生成一个6位数密码。

基于时间的TOTP可以简单认为是基于计数器的,将时间戳简单除以30并取整再丢给HOTP就可以了。

即 TOTP(timestamp) == HOTP((int)(timestamp/30))


也给出一个python的实现


import hmac
import struct
import hashlib
import time
import base64


def hotp(secret, number):
    key = base64.b32decode(secret, True)
    # big-endian, long long
    msg = struct.pack(">Q", number)
    #RFC 2104 , HMAC algorithm ...

阅读全文

友情链接