技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> LVS hash size解决4096个并发的问题

LVS hash size解决4096个并发的问题

浏览:5429次  出处信息

LVS 有个 connection hash table ,默认的 size 为 4096,可以通过以下命令得到:

# ipvsadm -ln
IP Virtual Server version 1.0.12 (size=4096)

简单地说,这个hash table 用于记录每个进来的连接及路由去向的信息。面对庞大的连接时,这个4096是远远不够的,这时就会产生冲突,然后hash table 就不断置换table 中的数据,系统的负荷就这样上来了。所以,很多调优文章都说,要把这个值调大。至于如何调大呢,好像必须重编译内核了。。。

我的是 centos 5.4 final ,利用 srpm 去重编译吧,使用当前系统的 config ,这样编译后的内核只不过是改变了 hash table 的值,并没有改变其它的东西。

下一个 kernel 的 srpm :http://mirrors.163.com/centos/5.4/os/SRPMS/kernel-2.6.18-164.el5.src.rpm

重编内核时,把原来的 config(/boot/config-2.6.18-164.el5) copy 覆盖 SOURCES/kernel-2.6.18-x86_64.config .

把第一行的

#

改为

# x86_64

同时,修改 CONFIG_IP_VS_TAB_BITS=12 (2的12次方,4096)为 CONFIG_IP_VS_TAB_BITS=20 。

然后 rpmbuild -ba -target=`uname -m` kernel-2.6.spec ,新编译出来的kernel-2.6.18-164.el5.x86_64.rpm 就在 RPMS/x86_64/ 里了。

rpm -Uvh 吧。

reboot 后,再 ipvsadm -ln 就可以看到

IP Virtual Server version 1.2.1 (size=1048576)

成功!
lvs 调优的文章通常会说,如果你的并发连接数是 200,keep alive 是200秒,那么hash table size 就应该设置为不要低于 200×200=40000 太多,2的15次方32768 就差不多了。不过,谁知道我们的需求是否会变呢?我一般都懒得算,直接开到最大,20 就是最大的了。

还需要注意一点,就是每个连接是要占用内存的,印象中是每个连接占用136 bytes ,尽管说 lvs 可以抗百万级别的连接,也要注意有没有足够的内存哦,呵呵。

来源:http://blog.helosa.org/2010/03/31/lvs-hash-size.html

建议继续学习:

  1. HashMap解决hash冲突的方法    (阅读:11246)
  2. 关于memcache分布式一致性hash    (阅读:10694)
  3. MinHash原理与应用    (阅读:5863)
  4. 无锁HashMap的原理与实现    (阅读:5353)
  5. 如果用户在5分钟内重复上线,就给他发警告,问如何设计?    (阅读:4872)
  6. Ubuntu 下Hash校验和不符问题的解决    (阅读:4490)
  7. LVS & MySQL NDB Cluster    (阅读:4051)
  8. 分布式系统hash策略    (阅读:3757)
  9. LVS & MySQL NDB Cluster    (阅读:3718)
  10. 记一次LVS/Nginx环境下的访问控制    (阅读:3832)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1