FreeBSD作为临时反向代理

今天已经将两台老旧的服务器送入到了机房。比较顺利,但是配置munin花费了点时间,主要是ip地址的配置问题。

将其中的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

#加快网络性能的协议

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

#该选项设置是否延迟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左右。

应对大量的短而快速的连接,降低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中的描述。


你可能感兴趣的:(FreeBSD作为临时反向代理)