<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[运维进行时]]></title> 
<link>https://blog.liuts.com/index.php</link> 
<description><![CDATA[互联网运维与架构]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[运维进行时]]></copyright>
<item>
<link>https://blog.liuts.com/post/227/</link>
<title><![CDATA[常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 09 May 2011 14:11:15 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在我们日常运维工作中，经常会碰到负载均衡器后端应用代码更新、临时剔除后端服务器、排查一主机应用故障等，往往我们会选择比较粗鲁的做法，直接停止或重启应用服务，让负载均衡器探测服务不可用将其剔除。这样带来的坏处是用户与服务器已经建立的连接会被中止，开发人员无法对已经停止服务的主机进行调试。现介绍一种较为温柔的做法，即通过禁用/启用成员的方式来达到目的。本文针对目前最为流行的负载均衡器逐一进行介绍。包括LVS、Haproxy、F5在命令行模式下的实现(方便与其它管理平台对接，实现自动化维护)。当然，Haproxy与F5都提供了人性化管理界面，不过只依赖手工来进行操作。<br/><br/><strong><span style="font-size: 18px;">一、LVS负载均衡器</span></strong><br/><strong>原理</strong><br/>使用LVS自带的管理工具来实现。<br/><br/><strong>环境说明</strong><br/>Disable VIP:192.168.100.11:80<br/>Disable REAL SERVER:192.168.100.78<br/><br/><strong>实施步骤</strong><br/>1、初始状态<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -Ln</span></strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>IP Virtual Server version 1.2.1 (size=4096)<br/>Prot LocalAddress:Port Scheduler Flags<br/>&nbsp;&nbsp;-> RemoteAddress:Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward Weight ActiveConn InActConn<br/>TCP&nbsp;&nbsp;192.168.100.11:80 rr persistent 60<br/>&nbsp;&nbsp;-> 192.168.100.74:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;-> 192.168.100.75:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;-> 192.168.100.76:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;400<br/>&nbsp;&nbsp;-> 192.168.100.77:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432<br/>&nbsp;&nbsp;-> 192.168.100.78:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;438<br/></div></div><br/>2、禁用成员<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -d -t 192.168.100.11:80 -r 192.168.100.78</span></strong><br/><br/>3、当前状态<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -Ln</span></strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>IP Virtual Server version 1.2.1 (size=4096)<br/>Prot LocalAddress:Port Scheduler Flags<br/>&nbsp;&nbsp;-> RemoteAddress:Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward Weight ActiveConn InActConn<br/>TCP&nbsp;&nbsp;192.168.100.11:80 rr persistent 60<br/>&nbsp;&nbsp;-> 192.168.100.74:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;-> 192.168.100.75:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;-> 192.168.100.76:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;400<br/>&nbsp;&nbsp;-> 192.168.100.77:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432<br/></div></div><br/>4、启用成员<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]#ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.78</span></strong><br/><br/>5、当前状态<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -Ln</span></strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>IP Virtual Server version 1.2.1 (size=4096)<br/>Prot LocalAddress:Port Scheduler Flags<br/>&nbsp;&nbsp;-> RemoteAddress:Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward Weight ActiveConn InActConn<br/>TCP&nbsp;&nbsp;192.168.100.11:80 rr persistent 60<br/>&nbsp;&nbsp;-> 192.168.100.74:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;-> 192.168.100.75:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;-> 192.168.100.76:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;400<br/>&nbsp;&nbsp;-> 192.168.100.77:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432<br/>&nbsp;&nbsp;-> 192.168.100.78:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;438<br/></div></div><br/><br/><span style="font-size: 18px;"><strong>二、Haproxy负载均衡器</strong></span><br/><strong>原理</strong><br/>使用Haproxy的socket admin通道来实现。<br/><br/><strong>环境说明</strong><br/>Disable backend:test.tianya.cn<br/>Disable REAL SERVER:192.168.100.78<br/><br/><strong>实施步骤</strong><br/>1、修改haproxy.cfg配置<br/><strong><span style="color: #008080;">#vi /usr/local/haproxy/etc/haproxy.cfg</span></strong><br/>在global域添加socket admin支持并重启Haproxy服务<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>global<br/>... ...<br/>&nbsp;&nbsp; stats socket /usr/local/haproxy/HaproxySocket level admin<br/>... ...<br/></div></div><strong><span style="color: #008080;">#service haproxy restart</span></strong><br/><br/>2、安装socat(在任意的两个socket管道之间建立一个通道，在该通道中交换两端的数据。)<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b3.tar.gz<br/>./configure --disable-fips<br/>make;make install<br/></div></div><br/>注：disable OpenSSL FIPS support&nbsp;&nbsp;"--disable-fips"，在没有安装fips包的情况下make时会提示：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>FIPSLD_CC=gcc fipsld -O -D_GNU_SOURCE&nbsp;&nbsp;-Wall -Wno-parentheses -DHAVE_CONFIG_H -I.&nbsp;&nbsp;-I.&nbsp;&nbsp; -c -o socat.o socat.c<br/>/bin/sh: fipsld: command not found<br/>make: *** [socat.o] Error 127<br/></div></div><br/><br/>3、禁用成员<br/><strong><span style="color: #008080;">#echo "disable server test.tianya.cn/192.168.100.78" &#124; socat stdio /usr/local/haproxy/HaproxySocket</span></strong><br/><a href="https://blog.liuts.com/attachment.php?fid=311" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=311" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>4、启用成员<br/><strong><span style="color: #008080;">#echo "enable server test.tianya.cn/192.168.100.78" &#124; socat stdio /usr/local/haproxy/HaproxySocket</span></strong><br/><a href="https://blog.liuts.com/attachment.php?fid=312" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=312" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><strong>三、F5-LTM负载均衡器</strong></span><br/><strong>原理</strong><br/>使用F5-iControl开发包Pycontrol对F5设备进行管理。<br/><br/><strong>环境说明</strong><br/>Disable POOL:test.tianya.cn<br/>Disable SERVER:192.168.100.42:80 192.168.100.43:80 192.168.100.44:80<br/><br/><strong>实施步骤</strong><br/>1、部署运行环境<br/><strong><span style="color: #008080;">#mkdir -p /home/install;cd /home/install</span></strong><br/>安装python环境(略)，要求py2.5或以上。<br/>1.1、安装SUDS模块<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.3.8.tar.gz<br/>#tar xvfz python-suds-0.3.8.tar.gz<br/>#cd python-suds-0.3.8<br/>#python setup.py install<br/></div></div><br/>1.2、安装PYCONTROL模块<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#wget http://trungale.net/pycontrol.tar.gz<br/>#tar xvfz pycontrol.tar.gz<br/>#cd trunk<br/>#python setup.py install<br/></div></div><br/>1.3、校验安装结果<br/>#python<br/><textarea name="code" class="python" rows="15" cols="100">
>>> import suds
>>> import pycontrol.pycontrol as pc
>>> suds.__version__
'0.4'
>>> suds.__build__
'GA R699-20100913'
>>> pc.__version__
'2.0.1'
>>> pc.__build__
'r83'
>>>
</textarea><br/>2、编写LB_member.py代码<br/><textarea name="code" class="python" rows="15" cols="100">
# -*- coding: utf-8 -*-
"""
----------------------------------------------------------------------------
 Disable/Enable F5-LTM POOL member 
 Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LB_member.py
 Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Liu tian si 
 Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liutiansi@gamil.com
 Created:&nbsp;&nbsp;&nbsp;&nbsp; 2011/05/08
 Version:&nbsp;&nbsp;&nbsp;&nbsp; 1.0
 Blog:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://blog.liuts.com
 Copyright:&nbsp;&nbsp; (c) 2011
----------------------------------------------------------------------------
"""

import sys
import time
import string
import pycontrol.pycontrol as pc

"""
----------------------------------------------------------------------------
 F5-LTM Disable/Enable Pool member Class
----------------------------------------------------------------------------
__init__() -Initialization F5-BIG object
set_pool_member() -Initialization pool and member object
member_factory() -Create a pool member object (Common.IPPortDefinition)
session_state_factory() -Create a session state object (LocalLB.PoolMember.MemberSessionState)
disable_member() -Disable menber methods
enable_member() -Enable menber methods
----------------------------------------------------------------------------
"""

class F5_LB_menber():

&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self,_hostname,_username,_password):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.b = pc.BIGIP(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hostname = _hostname,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username = _username,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password = _password,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fromurl = True,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wsdls = ['LocalLB.PoolMember'])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.sstate_seq = self.b.LocalLB.PoolMember.typefactory.create('LocalLB.PoolMember.MemberSessionStateSequence')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;def set_pool_member(self,pool,members):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.POOL=pool
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.members=members
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.sstate_seq.item = self.session_state_factory()

&nbsp;&nbsp;&nbsp;&nbsp;def member_factory(self, member):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip,port = member.split(':')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmem = self.b.LocalLB.PoolMember.typefactory.create('Common.IPPortDefinition')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmem.address = ip
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmem.port = int(port)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pmem


&nbsp;&nbsp;&nbsp;&nbsp;def session_state_factory(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_states = []
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self.members:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sstate = self.b.LocalLB.PoolMember.typefactory.create('LocalLB.PoolMember.MemberSessionState')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sstate.member = self.member_factory(x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_states.append(sstate)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return session_states

&nbsp;&nbsp;&nbsp;&nbsp;def disable_member(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self.sstate_seq.item:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.session_state = 'STATE_DISABLED'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.b.LocalLB.PoolMember.set_session_enabled_state(pool_names =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self.POOL], session_states = [self.sstate_seq])
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except Exception, e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print e

&nbsp;&nbsp;&nbsp;&nbsp;def enable_member(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self.sstate_seq.item:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.session_state = 'STATE_ENABLED'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.b.LocalLB.PoolMember.set_session_enabled_state(pool_names = [self.POOL],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_states = [self.sstate_seq])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except Exception, e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print e

if __name__ == "__main__":
&nbsp;&nbsp;&nbsp;&nbsp;if len(sys.argv) < 4:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "Usage %s POOL MEMBER:port[,member1:80,member2:80,member3:80] enable&#124;disable" % sys.argv[0]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "Examples: python LB_member.py app.domain.com 192.168.0.10:80,192.168.0.11:80,192.168.0.12:80 disable"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()

&nbsp;&nbsp;&nbsp;&nbsp;#F5 administrator info
&nbsp;&nbsp;&nbsp;&nbsp;hostname="192.168.100.2"
&nbsp;&nbsp;&nbsp;&nbsp;username="adminuser"
&nbsp;&nbsp;&nbsp;&nbsp;password="adminpass"

&nbsp;&nbsp;&nbsp;&nbsp;App=F5_LB_menber(hostname,username,password)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;#init F5 pool and member
&nbsp;&nbsp;&nbsp;&nbsp;CommandParameters = sys.argv[1:]
&nbsp;&nbsp;&nbsp;&nbsp;pool=CommandParameters[0]
&nbsp;&nbsp;&nbsp;&nbsp;members=string.split(CommandParameters[1],',')
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;App.set_pool_member(pool,members)
&nbsp;&nbsp;&nbsp;&nbsp;if CommandParameters[2]=="enable":
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;App.enable_member()
&nbsp;&nbsp;&nbsp;&nbsp;elif CommandParameters[2]=="disable":
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;App.disable_member()
&nbsp;&nbsp;&nbsp;&nbsp;else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "opt parameters error!"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()
</textarea><br/><br/>3、源码分析：<br/> 3.1、创建一个池成员对象，将用户传入的成员列表转成规范的pool成员，见member_factory()方法;<br/> 3.2、创建一个会话状态对象，追加成员对象到会话状态当中，见session_state_factory()方法;<br/> 3.3、创建一个队列，将会话状态对象添加到队列子项中，同时修改所处状态，见__init__()、set_pool_member()、disable_member()/enable_member()方法。<br/><br/>4、禁用成员<br/><strong><span style="color: #008080;">#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 disable</span></strong><br/><a href="https://blog.liuts.com/attachment.php?fid=313" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=313" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>5、启用成员<br/><strong><span style="color: #008080;">#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 enable</span></strong><br/><a href="https://blog.liuts.com/attachment.php?fid=314" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=314" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/><br/><strong>参考文章</strong><br/><a href="http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare" target="_blank">http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare</a><br/>Tags - <a href="https://blog.liuts.com/tags/%25E8%25B4%259F%25E8%25BD%25BD%25E5%259D%2587%25E8%25A1%25A1%25E5%2599%25A8/" rel="tag">负载均衡器</a> , <a href="https://blog.liuts.com/tags/%25E7%25A6%2581%25E7%2594%25A8/" rel="tag">禁用</a> , <a href="https://blog.liuts.com/tags/%25E5%2590%25AF%25E7%2594%25A8/" rel="tag">启用</a> , <a href="https://blog.liuts.com/tags/lvs/" rel="tag">lvs</a> , <a href="https://blog.liuts.com/tags/haproxy/" rel="tag">haproxy</a> , <a href="https://blog.liuts.com/tags/f5/" rel="tag">f5</a> , <a href="https://blog.liuts.com/tags/python/" rel="tag">python</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment691</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>higkoo &lt;higkoo@tom.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 10 May 2011 00:45:49 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment691</guid> 
<description>
<![CDATA[ 
	真牛B啊，天斯兄！
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment692</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>Sudu &lt;sudu@sudu.us&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 10 May 2011 00:57:57 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment692</guid> 
<description>
<![CDATA[ 
	牛叉的天斯。先回复然后慢慢品味。
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment693</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>newyue &lt;LYJ_216@163.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 10 May 2011 01:15:35 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment693</guid> 
<description>
<![CDATA[ 
	太牛X了。。好好学习下
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment694</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>飞仔 &lt;oosyf-1@163.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 10 May 2011 01:17:48 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment694</guid> 
<description>
<![CDATA[ 
	老大的文档确实编辑的很干净&nbsp;&nbsp;思路清晰&nbsp;&nbsp;赞~！
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment695</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>im@sorry.com &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 10 May 2011 03:43:54 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment695</guid> 
<description>
<![CDATA[ 
	如果是tcp mode，haproxy和LVS比，有什么优势呢？
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment696</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>relei &lt;relei1999@qq.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 10 May 2011 08:48:09 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment696</guid> 
<description>
<![CDATA[ 
	看刘哥的文章很舒服，学到很多东西。
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment702</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>可乐 &lt;solihai@gmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Wed, 11 May 2011 14:08:51 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment702</guid> 
<description>
<![CDATA[ 
	这方面的资料太少了，收藏以后备用。呵呵...
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment718</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>salamen &lt;sala_1999@163.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sun, 15 May 2011 14:11:39 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment718</guid> 
<description>
<![CDATA[ 
	一直在关注刘老大的博客，都非常经典。向刘老大学习哈。
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment721</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>诺菲尼 &lt;yialmen@163.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 17 May 2011 09:04:42 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment721</guid> 
<description>
<![CDATA[ 
	比较专业，有点难懂
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/227/#blogcomment743</link>
<title><![CDATA[[评论] 常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>宁波废铁回收 &lt;pop45677@163.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Mon, 30 May 2011 06:53:19 +0000</pubDate> 
<guid>https://blog.liuts.com/post/227/#blogcomment743</guid> 
<description>
<![CDATA[ 
	学习了，谢谢博主的文章。
]]>
</description>
</item>
</channel>
</rss>