常见负载均衡器禁(启)用成员汇总[原创] 不指定

刘天斯 , 2011/05/09 22:11 , Linux , 评论(18) , 阅读(51641) , Via 本站原创 | |
       在我们日常运维工作中,经常会碰到负载均衡器后端应用代码更新、临时剔除后端服务器、排查一主机应用故障等,往往我们会选择比较粗鲁的做法,直接停止或重启应用服务,让负载均衡器探测服务不可用将其剔除。这样带来的坏处是用户与服务器已经建立的连接会被中止,开发人员无法对已经停止服务的主机进行调试。现介绍一种较为温柔的做法,即通过禁用/启用成员的方式来达到目的。本文针对目前最为流行的负载均衡器逐一进行介绍。包括LVS、Haproxy、F5在命令行模式下的实现(方便与其它管理平台对接,实现自动化维护)。当然,Haproxy与F5都提供了人性化管理界面,不过只依赖手工来进行操作。

一、LVS负载均衡器
原理
使用LVS自带的管理工具来实现。

环境说明
Disable VIP:192.168.100.11:80
Disable REAL SERVER:192.168.100.78

实施步骤
1、初始状态
[devuser@lvsserver ~]# ipvsadm -Ln
引用

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.11:80 rr persistent 60
  -> 192.168.100.74:80            Route   3      462        464        
  -> 192.168.100.75:80            Route   3      420        440      
  -> 192.168.100.76:80            Route   3      431        400
  -> 192.168.100.77:80            Route   3      430        432
  -> 192.168.100.78:80            Route   3      435        438

2、禁用成员
[devuser@lvsserver ~]# ipvsadm -d -t 192.168.100.11:80 -r 192.168.100.78

3、当前状态
[devuser@lvsserver ~]# ipvsadm -Ln
引用

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.11:80 rr persistent 60
  -> 192.168.100.74:80            Route   3      462        464        
  -> 192.168.100.75:80            Route   3      420        440      
  -> 192.168.100.76:80            Route   3      431        400
  -> 192.168.100.77:80            Route   3      430        432

4、启用成员
[devuser@lvsserver ~]#ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.78

5、当前状态
[devuser@lvsserver ~]# ipvsadm -Ln
引用

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.11:80 rr persistent 60
  -> 192.168.100.74:80            Route   3      462        464        
  -> 192.168.100.75:80            Route   3      420        440      
  -> 192.168.100.76:80            Route   3      431        400
  -> 192.168.100.77:80            Route   3      430        432
  -> 192.168.100.78:80            Route   3      435        438


二、Haproxy负载均衡器
原理
使用Haproxy的socket admin通道来实现。

环境说明
Disable backend:test.tianya.cn
Disable REAL SERVER:192.168.100.78

实施步骤
1、修改haproxy.cfg配置
#vi /usr/local/haproxy/etc/haproxy.cfg
在global域添加socket admin支持并重启Haproxy服务
引用

global
... ...
   stats socket /usr/local/haproxy/HaproxySocket level admin
... ...
#service haproxy restart

2、安装socat(在任意的两个socket管道之间建立一个通道,在该通道中交换两端的数据。)
引用

wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b3.tar.gz
./configure --disable-fips
make;make install

注:disable OpenSSL FIPS support  "--disable-fips",在没有安装fips包的情况下make时会提示:
引用

FIPSLD_CC=gcc fipsld -O -D_GNU_SOURCE  -Wall -Wno-parentheses -DHAVE_CONFIG_H -I.  -I.   -c -o socat.o socat.c
/bin/sh: fipsld: command not found
make: *** [socat.o] Error 127


3、禁用成员
#echo "disable server test.tianya.cn/192.168.100.78" | socat stdio /usr/local/haproxy/HaproxySocket
点击在新窗口中浏览此图片

4、启用成员
#echo "enable server test.tianya.cn/192.168.100.78" | socat stdio /usr/local/haproxy/HaproxySocket
点击在新窗口中浏览此图片

三、F5-LTM负载均衡器
原理
使用F5-iControl开发包Pycontrol对F5设备进行管理。

环境说明
Disable POOL:test.tianya.cn
Disable SERVER:192.168.100.42:80 192.168.100.43:80 192.168.100.44:80

实施步骤
1、部署运行环境
#mkdir -p /home/install;cd /home/install
安装python环境(略),要求py2.5或以上。
1.1、安装SUDS模块
引用

#wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.3.8.tar.gz
#tar xvfz python-suds-0.3.8.tar.gz
#cd python-suds-0.3.8
#python setup.py install

1.2、安装PYCONTROL模块
引用

#wget http://trungale.net/pycontrol.tar.gz
#tar xvfz pycontrol.tar.gz
#cd trunk
#python setup.py install

1.3、校验安装结果
#python

2、编写LB_member.py代码


3、源码分析:
3.1、创建一个池成员对象,将用户传入的成员列表转成规范的pool成员,见member_factory()方法;
3.2、创建一个会话状态对象,追加成员对象到会话状态当中,见session_state_factory()方法;
3.3、创建一个队列,将会话状态对象添加到队列子项中,同时修改所处状态,见__init__()、set_pool_member()、disable_member()/enable_member()方法。

4、禁用成员
#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 disable
点击在新窗口中浏览此图片

5、启用成员
#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 enable
点击在新窗口中浏览此图片

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu

参考文章
http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare
gaowei Email
2015/01/12 10:30
您好,请问nginx proxy的话,有禁用/启用成员的接口吗?
尘烟 Homepage
2014/10/18 19:48
呵呵,看不懂,纯支持下哈。
天津汽车维修 Homepage
2014/03/04 09:09
确实很有这个必要的啊
不懂 Email Homepage
2013/05/11 16:29
呵呵。。确实很niubi
百丽 Homepage
2012/04/11 16:01
呵呵,有个这样的师傅的就好。
全讯网 Email Homepage
2011/08/30 13:15
这原创详细啊。。 给力
风起 Homepage
2011/08/26 13:54
不错, mark
canj00 Email
2011/06/16 13:28
博主您好,haporxy 启用多个proc , 采用socket的来关闭,只能禁用当前socket的那个proc,并不能将所有的proc的server禁用。有没有其他办法。
刘天斯 回复于 2011/06/16 14:49
stats socket /usr/local/haproxy/HaproxySocket level admin 在此处修改成不同的socket入口文件。
宁波废铁回收 Email Homepage
2011/05/30 14:53
学习了,谢谢博主的文章。
诺菲尼 Email Homepage
2011/05/17 17:04
比较专业,有点难懂
salamen Email
2011/05/15 22:11
一直在关注刘老大的博客,都非常经典。向刘老大学习哈。
可乐 Email
2011/05/11 22:08
这方面的资料太少了,收藏以后备用。呵呵...
relei Email
2011/05/10 16:48
看刘哥的文章很舒服,学到很多东西。
im@sorry.com Homepage
2011/05/10 11:43
如果是tcp mode,haproxy和LVS比,有什么优势呢?
刘天斯 回复于 2011/05/10 14:43
tcp mode模式下Haproxy实现了四层TCP包的转发,而LVS可以对包进行处理。在特定的场合各自都能发挥出各自优势。
飞仔 Email
2011/05/10 09:17
老大的文档确实编辑的很干净  思路清晰  赞~!
newyue Email Homepage
2011/05/10 09:15
太牛X了。。好好学习下
Sudu Email Homepage
2011/05/10 08:57
牛叉的天斯。先回复然后慢慢品味。
higkoo Email Homepage
2011/05/10 08:45
真牛B啊,天斯兄!
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]