nginx proxy模式下502 bad gateway 问题

并发测试的时候发现nginx 502 bad gateway 了,看了下日志发现很多upstream Cannot assign requested address的记录
connect() to 192.168.89.170:80 failed (99: Cannot assign requested address) while connecting to upstream

正常判断应该是端口不够用了
不过,我确实开启了: net.ipv4.tcp_tw_recycle = 1 和 net.ipv4.tcp_tw_reuse = 1两个参数
理论上应该可以把timewait 端口重用,查了下这个参数跟tcp_timestamps有关(http://blog.sina.com.cn/s/blog_781b0c850100znjd.html)

if (tmp_opt.saw_tstamp &&
tcp_death_row.sysctl_tw_recycle &&
(dst = inet_csk_route_req(sk, req)) != NULL &&
(peer = rt_get_peer((struct rtable *)dst)) != NULL &&
peer->v4daddr == saddr) {
if (get_seconds() < peer->tcp_ts_stamp + TCP_PAWS_MSL &&
(s32)(peer->tcp_ts – req->ts_recent) >
TCP_PAWS_WINDOW) {
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_PAWSPASSIVEREJECTED);
goto drop_and_release;
}
}

tmp_opt.saw_tstamp:该socket支持tcp_timestamp
sysctl_tw_recycle:本机系统开启tcp_tw_recycle选项
TCP_PAWS_MSL:60s,该条件判断表示该源ip的上次tcp通讯发生在60s内
TCP_PAWS_WINDOW:1,该条件判断表示该源ip的上次tcp通讯的timestamp 大于 本次tcp

因此: 应该在proxy端和后端都开启net.ipv4.tcp_timestamps=1

网卡LACP聚合配置

本文主要介绍多网卡lacp 聚合模式配置,即mode=4模式下RHEL6 bonding 和 RHEL7 team的配置

此模式需要在交换机做配置LACP聚合,具体参考交换机设置
配置范例以双网卡eth0 eth1为例,多网卡类推

RHEL6 配置

1.新增配置文件/etc/modprobe.d/bonding.conf,内容如下

alias bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1 xmit_hash_policy=layer3+4

2.更改网卡配置

#/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

#/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

#/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.233
NETMASK=255.255.255.0
NETWORK=192.168.1.0
GATEWAY=192.168.1.254

3.重启网络

service network restart

4.注意点: 参见最后附录

 

RHEL7 配置

1. 修改网卡配置

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=”eth0″
ONBOOT=yes
UUID=”原来的UUID”
DEVICETYPE=TeamPort
TEAM_MASTER=team1

#/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
UUID=”原来的UUID”
ONBOOT=yes
TEAM_MASTER=team1

新增配置: /etc/sysconfig/network-scripts/ifcfg-team1
DEVICE=team1
DEVICETYPE=Team
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.23
PREFIX=24
DEFROUTE=no
TEAM_CONFIG='{“runner”: {“name”:”lacp”, “active”:true, “fast_rate”:true, “tx_hash”:[“ipv4”], “ports”:{“eth0”:{}, “eth1”:{}}}}’
MTU=1476

2. 重新启动机器,是的,重新启动机器

问题研究

 
1. RHEL6网卡in能分摊到不同网卡,但是out只走一个网卡
检查/proc/net/bonding/bond0 文件,看看 Transmit Hash Policy 是否正确,一般layer2 在内网测试可能会有问题
需要配置xmit_hash_policy=layer3+4 或者 xmit_hash_policy=layer2+3

2. RHEL7 systetemctl restart network 网卡不通
恩,是的,重启机器吧

哪里买 mac air

2014款的macbook air发布了,作为macbook里边最轻便的机器,满足办公和日常娱乐是没有问题的


macbook-air-holiday-hero-xl-2015

带来了intel最新的i5和i7处理器,也带来了期待已久的背光键盘

那么,作为apple fans当然是入手一台,下边比较下大陆,香港,美国的价格

大陆:
cn_macbook

香港:
hk_macbook

美国:
us_macbook
以13″低配为例,简单换算下:

大陆:  6988RMB

香港:  7488HK$ 约合 6000RMB不到

美国:  999US$   约合 6300RMB

可见,在香港购买是最合算的,分别比美国和大陆购买便宜了1000和300元左右(差价已经比11年的时候小了很多,依然是值得购买的)

so,apple fans,去HK 买一台吧!

以下是HK 苹果专卖店的推荐地址,比较建议去中环IFC Mall购买,其实大概到了2015年年初,就可以去买iphone6了

地址: 國際金融中心商場香港中環金融街 8 號

电话: 香港3972-1500

交通指引: 東涌線或機場快線前往香港站;港島線及荃灣線前往中環站,Apple Store 位於 ifc mall 1 樓及 2 樓最東面,鄰近中環碼頭

移除谷歌重定向

国内的孩子使用google已经苦不堪言,往往搜索出来结果,点击链接却断在google 跳转上

这是google在记录用户行为,优化自己的搜索结果,不过,对国内的用户来说,只能说google从未帮国内用户想过这个问题

于是一群好孩子开发了remove google redirect(移除谷歌重定向)这样的好东西: https://github.com/dangoakachan/Remove-Google-Redirection

对于safari,chrome,firefox 都有对应的插件,灰常好!

使用后的结果:
2012-11-2512-19

点击后就直接跳往结果页了,自然也不会被GFW拦截

附上下载地址吧:
chrome: chrome google
safari: 4os 本地下载

半吊子的程序员之: python 抓不到的execpt

最近写了个try except的时候,发现每次都出现except,但是注释掉try except代码却不出错
try:
code line 1
code line 2

except:
excpet code …

查了下文档,可以用sys.exc_info()[0]把excpet信息打印出来
我的这个例子中刚好是在函数块中直接sys.exit(X),导致了exceptions.SystemExit
于是改了下代码,在main函数中处理了下,才sys.exit(X),错误自然也就没了

恩恩,我是半吊子的程序猿

什么才是理想的抬头显示

抬头显示,Head Up Display,也叫做平视显示系统,让驾驶者在视线不离开路面的情况下更方便的查看一些信息

故事的缘由是一个朋友跟我推荐了叫”优驾”的HUD”玩具”,接入OBD后能显示车速/转速/油耗/驾驶时间等等

显示效果如图:
hud_1

一个玩具而已,我理想中的HUD是这个样子的:

1. 奥迪家的HUD,导航 +  道路限速 + 当前时速 + 车道辅助 + 跟车距离
hud_2

2. BMW家的HUD,盲区辅助 + 道路限速 + 时速 + 导航等
hud_4

3. 奥迪家的,很有意义的功能: 危险提醒
hud_3

嗯,没错,HUD应该是个精密的系统工程,跟雷达/摄像头/导航系统/行车电脑紧密连接
尤其是导航+车道辅助+盲区辅助+危险提醒,这些才是HUD的意义所在!

HP 380G5 安装RHEL7 找不到磁盘

安排一位同学做Docker测试的时候,用的是台380G5的老机器,结果发现找不到磁盘

那位同学搜了下,是驱动被移除了,HP官方不再支持在新OS下的测试,需要显式打开支持

在kernel 引导时加入 hpsa.hpsa_allow_any=1 就可以了

相关文档:
http://serverfault.com/questions/611182/centos-7-x64-and-hp-proliant-dl360-g5-scsi-controller-compatibility
https://www.kernel.org/doc/Documentation/scsi/hpsa.txt

2014广州自助上牌攻略

2014年广州自助上牌攻略,灰常详细,灰常靠谱,关键是:省钱
1. 购置税和车船税
一般来说,交强险4S会帮你买好了,需要自己买的一般是购置税和车船税,如果4S帮忙买可以忽略
现在广州有4个地方能买购置税,分别是新市/天河/黄埔/芳村,建议市区的同学去天河赛马场那边的征收点,比较近
具体地址和办公时间可以去国税车购税征管分局网站查询 http://www.gd-n-tax.gov.cn/html/gdgz/cgs/index.htm

2.上牌预约
现在广州的各大车管所上牌都需要提前预约,包括黄埔区,因此,买完购置税的同时跑过去预约个号吧,建议是约早上9-10点的

3.上牌流程
全部流程可以参考这个图,这是水荫路东山车管所的示意图,建议去这家,上牌人少,阿sir态度也很好
IMG_3233

1)按照预约的时间提早半小时去到,先在这个地方拍照,如果有天窗记得升起来
IMG_3237

2)顺着路开下去,阿sir会指示你停在查验区的哪个位置,打开引擎盖,找拓印员帮你拓印发动机号和车架号
IMG_3234

3)拿到发动机号和车架号拓印贴纸之后,照片也应该好了,到1)中的房间去取相,到查验区旁边的资料采集大厅交资料和填表,填完表后工作人员会给你个蓝色的牌子和一沓资料
提交的资料包括:
身份证原件复印件(2份)
购车发票原件复印件(2份)
交强险副本和复印件(2份)
购置税原件
车船税原件
摇号/竞价指标文件
车辆合格证文件
汽车照片和拓印贴纸
这里会收取拓印和照相费:200元RMB

4)回到验车区,把资料和蓝色牌子放在车头,把三角警示牌取出打开摆好,放到车顶,阿sir验完车会收走你的资料的

5)去到流程图中的办事大厅取号,告诉保安你是新车上牌,它会给你取号和告知哪里等的

6)基本上轮到你的时候,验车阿sir也把资料拿到办事大厅了,这个时候会要求你在资料上签名表示真实无误

7)等待选号区的阿sir叫你名字,一般是1号和10号窗,如果有任何不明白可以问现场的保安或者阿sir,态度都非常好

8)如果是10选1,那么选中号码后就去缴款窗口交钱,125元RMB;如果是自编号码,请仔细咨询工作人员,嘿嘿

9)交完钱后就需要漫长的等待了,一般需要2小时,这个时候,你有个事情可以顺便做了: 开通网上车管所
还是去前台拿号,说开通网上车管所业务,提交身份证原件复印件,填表,摄像头采集照片等,半天后会有短信通知审核通过

10)经过漫长的等待,你可以到最左边的窗口拿到行驶证和机动车登记证,年审标识

11)去这里领取车牌,然后进旁边的小黑屋去领取环保标识
IMG_3236

12)大工告成,去这里固封吧,一般会问你要不要牌托,要价100还是150,礼貌的谢绝即可
IMG_3235

总共费用: 200+125  = 325 RMB,而我的4S想收我3000RMB…比较黑

nginx with static libcurl

场景是这样子的: 这边有个nginx 模块 include curl/curl.h,而我的编译参数–with-openssl使用了最新的openssl 1.0.1g,编译出来的nginx直接segfault

去除这个模块或者去掉–with-openssl都能正常使用,推测是系统的libcurl(https)包含了libssl的依赖,与内嵌的openssl产生冲突

于是解决办法就是把libcurl也编译到nginx里边,绕开冲突和依赖

1. 静态编译libssl
cd openssl-1.0.1g
./config –prefix=/usr/src/redhat/BUILD/nginx-1.4.7/openssl-1.0.1g/.openssl no-shared no-threads
make
make install
make install LIBDIR=lib

2. 静态编译libcurl
cd curl-7.36.0
./configure –prefix=/usr/src/redhat/BUILD/nginx-1.4.7/curl-7.36.0/.curl –with-ssl=/usr/src/redhat/BUILD/nginx-1.4.7/openssl-1.0.1g/.openssl/lib/ –disable-ldap –disable-ldaps –without-libidn –enable-static=yes –enable-shared=no

#去除对librt.so的依赖,不介意可以不修改
sed -i /HAVE_CLOCK_GETTIME_MONOTONIC/d lib/curl_config.h

make
make install

3. 修改nginx的Makefile
#替换libcurl.so(lcurl)为静态编译的libcurl.a
sed -i ‘s#-lcurl#curl-7.36.0/.curl/lib/libcurl.a -Lopenssl-1.0.1g/.openssl/lib -lcrypto -lz#g’ objs/Makefile
make
make install

做完这步,就生成了包含libcurl和libssl的nginx了