1vip = "10.10.0.1" 2ss = [ 3 "172.18.1.3", 4 "172.18.1.4", 5 "172.18.1.5", 6] 7 8# iptables -t nat -A myservice -d 10.10.0.1 -m statistic --mode random --probability 0.3333 -j DNAT --to-destination 172.18.1.3 9x, n = 0, 10000 10def build(s, e, p): 11 n = e-s+1 12 if n<=16: 13 m = n 14 for i in range(s, e): 15 pp = 1.0/m 16 print "iptables -t nat -A %s -d %s -m statistic --mode random --probability %.16f -j DNAT --to-destination %s" % (p, vip, pp, ss[i%len(ss)]) 17 m-=1 18 print "iptables -t nat -A %s -d %s -j DNAT --to-destination %s" % (p, vip, ss[i%len(ss)]) 19 else: 20 # split 21 m = (s+e)/2 22 x = "myservice%d_%d" % (s, m) 23 print "iptables -t nat -N %s" % x 24 pp = (m-s+1)*1.0/n 25 print "iptables -t nat -A %s -m statistic --mode random --probability %.16f -j %s" % (p, pp, x) 26 build(s, m, x) 27 x = "myservice%d_%d" % (m+1, e) 28 print "iptables -t nat -N %s" % x 29 print "iptables -t nat -A %s -j %s" % (p, x) 30 build(m+1, e, x) 31 32build(0, n-1, "myservice") 33