博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 调用 lvs 脚本 [备忘]
阅读量:4078 次
发布时间:2019-05-25

本文共 7936 字,大约阅读时间需要 26 分钟。

软件环境

操作系统 CentOS运行环境:python 2.7工具:/sbin/ipvsadm

参数说明

[root@gd02-zabbix-db-research python_api]# ./lvs.pyusage: ./lvs.py --help or --example[root@gd02-zabbix-db-research python_api]# ./lvs.py --helpusage: lvs.py [-h] [-A] [-D] [-F] [-L] [-t] [-u] [-s SCHEDULER]              [-p PERSISTENT] [-r REALSERVER] [-f FLOAPINGIP] [-g] [-m]              [-P SRCPORT] [-R DESTPORT] [--example]optional arguments:  -h, --help            show this help message and exit  -A, --add             add LVS rules  -D, --delete          delete LVS rules  -F, --fresh           clean all LVS rules  -L, --show            show LVS status  -t, --tcp             tcp service  -u, --udp             udp service  -s SCHEDULER, --scheduler SCHEDULER                        one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the                        default scheduler is wlc  -p PERSISTENT, --persistent PERSISTENT                        persistent service, default:1500  -r REALSERVER, --realserver REALSERVER                        server-address is host (and port) Example: -r '1.1.1.1                        2.2.2.2 3.3.3.3'  -f FLOAPINGIP, --floapingip FLOAPINGIP                        vip address of lvs  -g, --gatewaying      gatewaying (direct routing)  -m, --masquerading    masquerading (NAT)  -P SRCPORT, --srcport SRCPORT                        listen on floapip port  -R DESTPORT, --destport DESTPORT                        listen on realserver port  --example             show create LVS rule example

python 脚本

#!/apps/svr/python/python#coding:utf-8# Terry zeng 
## 2014 04 10## lvs 调用接口## 脚本主要功能:# 1. 参数输入判定# 2. 查询, 添加, 删除, 清空 lvs 规则# 3. 帮助语法: ./lvs.py --help # 4. 添加规则语法:## 添加 udp 53 端口调度例子# ./lvs.py --add --udp --scheduler wlc --persistent 1500 --floapingip 61.1.1.1 --srcport 53 --realserver "192.168.1.1 172.16.14.1 10.1.1.1" --destport 53 --gatewaying# ./lvs.py -A -u -s wlc -p 1500 -f 61.1.1.1 -P 53 -r "192.168.1.1 172.16.14.1 10.1.1.1" -R 53 -g### 添加 tcp 80 端口调度例子# ./lvs.py --add --tcp --scheduler rr --persistent 1500 --floapingip 202.1.1.1 --srcport 80 --realserver "192.168.1.1 172.16.14.1 10.1.1.1 10.3.4.1" --destport 8080 --masquerading# ./lvs.py -A -t -s rr -p 1500 -f 202.1.1.1 -P 80 -r "192.168.1.1 172.16.14.1 10.1.1.1 10.3.4.1" -R 8080 -m### 删除某个规则方法# ./lvs.py --delete --tcp --scheduler rr --persistent 1500 --floapingip 202.1.1.1 --srcport 80 --realserver "192.168.1.1 172.16.14.1 10.1.1.1 10.3.4.1" --destport 8080 --masquerading## 清空所有规则# ./lvs.py --fresh# 显示规则方法# ./lvs.py --show#import argparseimport sysimport socketimport osimport re### 判断 ipvsadm 是否可用if os.path.exists('/sbin/ipvsadm') == False: print "install ipvsadm pckage first" print "contact administrator or rum command: yum install -y ipvsadm" exit()## ip 地址可用性判断def valid_ip(address): try: socket.inet_aton(address) return True except: return Falsedef usage(): print 'usage: ' + __file__ + ' --help or --example' sys.exit(2)#### 参数调用说明parser = argparse.ArgumentParser()parser.add_argument('-A','--add', help='add LVS rules', action='store_true')parser.add_argument('-D','--delete', help='delete LVS rules', action='store_true')parser.add_argument('-F','--fresh', help='clean all LVS rules', action='store_true')parser.add_argument('-L','--show', help='show LVS status', action='store_true')parser.add_argument('-t','--tcp', help='tcp service',action='store_true')parser.add_argument('-u', '--udp', help='udp service', action='store_true')parser.add_argument('-s', '--scheduler', help='one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc')parser.add_argument('-p', '--persistent', help='persistent service, default:1500', type = int)parser.add_argument('-r', '--realserver', help="server-address is host (and port) Example: -r '1.1.1.1 2.2.2.2 3.3.3.3'", type = str )parser.add_argument('-f', '--floapingip', help='vip address of lvs' )parser.add_argument('-g', '--gatewaying', help='gatewaying (direct routing)',action='store_true')parser.add_argument('-m','--masquerading', help='masquerading (NAT)', action='store_true')parser.add_argument('-P','--srcport', help='listen on floapip port', type = int )parser.add_argument('-R','--destport', help='listen on realserver port', type = int )parser.add_argument('--example', help='show create LVS rule example', action='store_true' )args = parser.parse_args()## 对参数进行空值判断, add delete fresh show example 重复,可用性判断if args.example == True: print __file__ + ' --add --tcp --scheduler wlc --persistent 1500 --floapingip 61.1.1.1 --srcport 80 --realserver "192.168.1.1 172.16.14.1 10.1.1.1" --destport 8080 --gatewaying' print __file__ + ' --delete --tcp --scheduler wlc --persistent 1500 --floapingip 61.1.1.1 --srcport 80 --realserver "192.168.1.1 172.16.14.1 10.1.1.1" --destport 8080 --gatewaying' print __file__ + ' --fresh' print __file__ + ' --show' sys.exit()rule = Falseif args.add == True: if True in [ args.delete, args.fresh, args.show ]: usage() else: rule = "add"if args.delete == True: if True in [ args.add, args.fresh, args.show ]: usage() else: rule = "delete"if args.fresh == True: if True in [ args.add, args.delete, args.show ]: usage() else: os.system('/sbin/ipvsadm -C') os.system('/etc/init.d/ipvsadm save') exit()if args.show == True: if True in [ args.add, args.delete, args.add ]: usage() else: os.system('/sbin/ipvsadm -L -n') exit()if rule == False: usage()## 对参数进行空值判断, tcp, udp || DR, NAT 重复判断if args.tcp == args.udp: usage()if args.gatewaying == args.masquerading: usage()### 判断 persistent 值是否正确 startif args.persistent == None: persistent = "1500"else: persistent = str(args.persistent)### 判断 persistent 值是否正确 end### 判断 scheduler startif args.scheduler == None: scheduler = 'wlc'else: scheduler = args.schedulerif scheduler not in ('rr', 'wrr', 'lc', 'wlc', 'lblc', 'lblcr', 'dh', 'sh', 'sed', 'nq'): print 'scheduler must one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc' usage()### 判断 scheduler end### 判断 realserver 及 ip 地址 start### 解决参数中包含多个空格问题### 解决 IP 地址验证问题if args.realserver == None: print "--realserver is needed, example: -r '1.1.1.1 2.2.2.2 3.3.3.3'" usage()else: realip = re.sub(r'\s+', ' ',args.realserver) realserver = realip.split(' ') for address in realserver: if valid_ip(address) == False: print "--realserver ip error, example: -r '1.1.1.1 2.2.2.2 3.3.3.3'" usage()### 判断 realserver 及 ip 地址 end### 判断 floading ip startif args.floapingip == None: print "--floapingip is needed, example: -f '1.1.1.1'" usage()else: floapingip = args.floapingip if valid_ip(floapingip) == False: print "--realserver ip error, example: -f '1.1.1.1'" usage()### 判断 floading ip end### 判断 vip port startif args.srcport == None: print "--srcport is needed, example: -S '80'" usage()else: srcport = str(args.srcport)### 判断 vip port start### 判断 realserver port start, 切记类型转换if args.destport == None: print "--destport is needed, example: -R '80'" usage()else: destport = str(args.destport)### 判断 realserver port end###lvs 语法if args.tcp == False: protocal = "-u"else: protocal = "-t"if args.gatewaying == None: gateway = "-m"else: gateway = "-g"if rule == "add": main_rule = "/sbin/ipvsadm -A " + protocal + " " + floapingip + ":" + srcport + " -s " + scheduler + " -p " + persistent os.system(main_rule) for ip in realserver: sub_rule = "/sbin/ipvsadm -a " + protocal + " " + floapingip + ":" + srcport + " -r " + ip + ":" + srcport + " " + gateway os.system(sub_rule)elif rule == "delete": main_rule = "/sbin/ipvsadm -D " + protocal + " " + floapingip + ":" + srcport os.system(main_rule)os.system('/etc/init.d/ipvsadm save')

转载地址:http://jlnni.baihongyu.com/

你可能感兴趣的文章
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
在mc中直接加aswing组件,该组件还需最后用validate()方法
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>
谈谈加密和混淆吧[转]
查看>>
TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
查看>>
网络游戏客户端的日志输出
查看>>
关于按钮的mouseOver和rollOver
查看>>
《多线程服务器的适用场合》例释与答疑
查看>>
Netty框架
查看>>
Socket经验记录
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
Flex4的可视化显示对象
查看>>