FreeBSD作为临时反向代理
今天已经将两台老旧的服务器送入到了机房。比较顺利,但是配置munin花费了点时间,主要是ip地址的配置问题。 www.zhishiwu.com
将其中的Dell 1950做为了临时的反向代理来处理所有api的接入。
参考某位大神的博客进行了以下设置,有很多值还是不是很清楚为什么要这样设置,要逐步的搞清楚
/etc/sysctl.conf
不接受源路由信息包可以防止你的内部网络被探测
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
#最大的待发送TCP数据缓冲区空间
net.inet.tcp.sendspace=65536
#最大的接受TCP缓冲区空间
net.inet.tcp.recvspace=65536
#本地套接字连接的数据发送空间
net.local.stream.sendspace=65535
#加快网络性能的协议 www.zhishiwu.com
net.inet.tcp.rfc1323=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1
#最大的套接字缓冲区
kern.ipc.maxsockbuf=2097152
#系统中允许的最多文件数量
kern.maxfiles=65536
#每个进程能够同时打开的最大文件数量
kern.maxfilesperproc=65535
www.zhishiwu.com
#该选项设置是否延迟ACK应答数据包
net.inet.tcp.delayed_ack=1
#设置为1会帮助系统清除没有正常断开的TCP连接
net.inet.tcp.always_keepalive=1
#若看到net.inet.ip.intr_queue_drops这个在增加,就要调大net.inet.ip.intr_queue_maxlen,为0最好
net.inet.ip.intr_queue_maxlen=1000
net.inet.ip.intr_queue_drops=0
#防止DOS攻击,默认为30000
net.inet.tcp.msl=2500
#防止DOS攻击
net.inet.tcp.syncookies=1
#仅为线程提供物理内存支持,需要256兆以上内存
kern.ipc.shm_use_phys=1
# 线程可使用的最大共享内存
kern.ipc.shmmax=67108864
但是发现出现了大量的FIN_WAIT_2的状态。经过修改
net.inet.tcp.finwait2_timeout=600
net.inet.tcp.fast_finwait2_recycle=1
很快大量的FIN_WAIT_2的状态就消失了。
经过这些配置后接入效果明显比Dell R610上的CentOS效果好。现有业务正常状态下TCP的ESTABLISHED状态的连接基本上能保持在350,非ESTABLISHED状态在450左右,现有业务峰值TCP的ESTABLISHED状态的连接基本上能保持在400,非ESTABLISHED状态在550左右。
www.zhishiwu.com
应对大量的短而快速的连接,降低net.inet.tcp.msl的值非常有必要。我们常看到的TCP状态有以下几个(
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}',一段很有效的命令来获取本级所有TCP的状态)
LAST_ACK 等待关闭确认状态
SYN_RECV 已收到连接请求SYN状态(常见于服务器端)
CLOSE_WAIT 等待关闭连接状态,等待来自应用程序的关闭要求。
ESTABLISHED 已建立连接状态
FIN_WAIT1 应用程序要求关闭连接,断开请求FIN已经发出状态。
FIN_WAIT2 已关闭半连接状态,等待对方关闭另一个半连接。
CLOSING 双方同时决定关闭连接状态
SYN_SENT 已发出连接请求SYN状态,等待确认ACK。(常见于客户端)
TIME_WAIT 等待超时状态
MSL值指的是最大分段寿命,是分段被丢弃之前在网络中可以存活的最大时长。这个值会直接影响TIME_WAIT状态,TIME_WAIT状态是TCP/IP可靠性保证的一部分。虽然缩短TIME_WAIT时间可以加速TCP连接关闭,但是不可以缩短的太短,否则会引起一些不必要的问题,如数据没有正常送达,无限ACK循环的连接不同步现象以及新建连接错误断开等问题,具体见RFC1337中的描述。