slb_scan.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/usr/bin/python
  2. # coding: utf-8
  3. import sys
  4. from aliyunsdkcore import client
  5. from aliyunsdkcore.client import AcsClient
  6. from aliyunsdkcore.request import CommonRequest
  7. from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
  8. from aliyunsdkslb.request.v20140515.DescribeLoadBalancerAttributeRequest import DescribeLoadBalancerAttributeRequest
  9. import json
  10. import socket
  11. import time
  12. AccessKey = 'LTAIuPbTPL3LDDKN'
  13. AccessSecret = 'ORcNedKwWuwVtcq4IRFtUDZgS0b1le'
  14. RegionId = 'cn-hangzhou'
  15. # 压力测试环境 SlbId
  16. #SlbId = 'lb-bp12usgpoh04qsa6pw42r'
  17. #longvideoapi-online SlbId
  18. SlbId = 'lb-bp1d6hp2ctotgt870miav'
  19. clt = client.AcsClient (AccessKey, AccessSecret, RegionId)
  20. Host = socket.gethostname ()
  21. exit = -1
  22. def setServerWeight(BackendServers):
  23. request = CommonRequest ()
  24. request.set_accept_format ('json')
  25. request.set_domain ('slb.aliyuncs.com')
  26. request.set_version ('2014-05-15')
  27. request.set_method ('POST')
  28. request.set_action_name ('SetBackendServers')
  29. request.add_query_param ('BackendServers', BackendServers)
  30. request.add_query_param ('LoadBalancerId', SlbId)
  31. # print BackendServers
  32. response = clt.do_action (request)
  33. return json.loads (response)
  34. def get_host_ip():
  35. """
  36. 查询本机ip地址
  37. :return: ip
  38. """
  39. try:
  40. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  41. s.connect(('8.8.8.8', 80))
  42. ip = s.getsockname()[0]
  43. #ip = "192.168.201.80"
  44. finally:
  45. s.close()
  46. return ip
  47. def query_slb(instance_id):
  48. global exit
  49. request = DescribeLoadBalancerAttributeRequest ()
  50. request.set_accept_format ('json')
  51. request.set_LoadBalancerId (SlbId)
  52. times = 0
  53. while times < 300:
  54. try:
  55. response = clt.do_action_with_exception (request)
  56. res_result = json.loads(response)
  57. if res_result["BackendServers"]["BackendServer"]:
  58. for i in range(len(res_result["BackendServers"]["BackendServer"])):
  59. slb_instance_id = res_result["BackendServers"]["BackendServer"][i]["ServerId"]
  60. if instance_id == slb_instance_id :
  61. print("服务器已经挂载")
  62. exit = 1
  63. if exit == 1:
  64. break
  65. time.sleep(2)
  66. times += 1
  67. except Exception as e:
  68. print(e)
  69. print("负载均衡信息获取失败")
  70. return res_result
  71. if __name__ == "__main__":
  72. ip = get_host_ip()
  73. ##获取instarnceid
  74. ip_add = []
  75. ip_add.append(ip)
  76. request = DescribeInstancesRequest ()
  77. request.set_PrivateIpAddresses (ip_add)
  78. response = clt.do_action_with_exception (request)
  79. #print(response)
  80. result = json.loads(response)
  81. instance_id = result["Instances"]["Instance"][0]["InstanceId"]
  82. print(instance_id)
  83. back_servers = [{"ServerId": '', "Weight": ''}]
  84. back_servers[0]["ServerId"] = instance_id
  85. query_slb (instance_id)
  86. print(exit)
  87. if exit == 1 :
  88. weight = 20
  89. while weight <= 100:
  90. back_servers[0]["Weight"] = weight
  91. print(back_servers)
  92. try:
  93. res_slb = setServerWeight ( back_servers)
  94. request = DescribeLoadBalancerAttributeRequest ()
  95. request.set_accept_format ('json')
  96. request.set_LoadBalancerId (SlbId)
  97. response = clt.do_action_with_exception (request)
  98. res_result = json.loads (response)
  99. if res_result["BackendServers"]["BackendServer"]:
  100. for i in range (len (res_result["BackendServers"]["BackendServer"])):
  101. slb_instance_id = res_result["BackendServers"]["BackendServer"][i]["ServerId"]
  102. if instance_id == slb_instance_id:
  103. weight_now = res_result["BackendServers"]["BackendServer"][i]["Weight"]
  104. print (weight_now)
  105. if weight == weight_now :
  106. print("权重修改成功")
  107. else:
  108. print("权重修改失败,重试.......")
  109. res_slb = setServerWeight (back_servers)
  110. print(res_slb["BackendServers"]["BackendServer"])
  111. except:
  112. print("负载均衡权重修改失败")
  113. weight += 20
  114. time.sleep(10)
  115. else:
  116. print("服务器未挂载,请尽快查看具体情况")