123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import docker
- import sys
- import requests
- import json
- import queue
- import threading
- from aliyunsdkcore import client
- from aliyunsdkcore.request import CommonRequest
- from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
- from aliyunsdkslb.request.v20140515.DescribeLoadBalancerAttributeRequest import DescribeLoadBalancerAttributeRequest
- from aliyunsdkecs.request.v20140526.DescribeNetworkInterfacesRequest import DescribeNetworkInterfacesRequest
- import time
- AccessKey = 'LTAIuPbTPL3LDDKN'
- AccessSecret = 'ORcNedKwWuwVtcq4IRFtUDZgS0b1le'
- RegionId = 'cn-hangzhou'
- clt = client.AcsClient (AccessKey, AccessSecret, RegionId)
- slbIds = ["lb-bp1qk9mkvjtundlzz7owm", "lb-bp1by407qxe4y7bkvye27", "lb-bp1y63rnrb2e64whryghz"]
- def checkHealth(ipadd):
- while True:
- health_url = 'http://%s:8080/longvideoapi/test' %(ipadd)
- header = {"Content-Type":"application/json"}
- try:
- health_code = requests.get(health_url).status_code
- except Exception as e:
- continue
- if health_code == 200:
- return False
- def setInstanceWeightProcess(instance_id):
- for i in range(1,6):
- weight = i*20
- for slbId in slbIds:
- setWeight(slbId, instance_id, weight)
- time.sleep(5)
- def setWeight(slb_id,instance_id ,weight):
- BackendServers = [{"ServerId": instance_id, "Weight": weight}]
- request = CommonRequest ()
- request.set_accept_format ('json')
- request.set_domain ('slb.aliyuncs.com')
- request.set_version ('2014-05-15')
- request.set_method ('POST')
- request.set_action_name ('SetBackendServers')
- request.add_query_param ('BackendServers', BackendServers)
- request.add_query_param ('LoadBalancerId', slb_id)
- try:
- response = clt.do_action (request)
- except Exception as e:
- raise e
- sys.exit()
- def getInstanceId(slb_id):
- request = DescribeLoadBalancerAttributeRequest()
- request.set_accept_format('json')
- request.set_LoadBalancerId(slb_id)
- try:
- response = clt.do_action_with_exception(request)
- except Exception as e:
- raise e
- sys.exit()
- return json.loads (response)
- def getIpadd(instance_id):
- request = DescribeNetworkInterfacesRequest()
- request.set_accept_format('json')
- request.set_InstanceId(instance_id)
- try:
- response = clt.do_action_with_exception(request)
- request_content = json.loads(response)
- IpAddr = request_content['NetworkInterfaceSets']['NetworkInterfaceSet'][0]['PrivateIpAddress']
- except Exception as e:
- raise e
- sys.exit()
- return IpAddr
- def restart(instance_id):
- time.sleep(10)
- global success_count
- apps = 'vlogapi'
- ipadd = getIpadd(instance_id)
- print("服务器信息:" + "%s/%s" %(instance_id, ipadd))
- client = docker.DockerClient(base_url='tcp://%s:2375' %(ipadd),timeout=60 )
- try:
-
- id = client.containers.get(apps)
- id.restart()
- checkHealth(ipadd)
- print("%s :权重修改中......" %(ipadd))
- setInstanceWeightProcess(instance_id)
- success_count = success_count + 1
- print("重启进度" + "%s/%s" %(success_count, total))
- except Exception as e:
- raise e
- sys.exit()
- if __name__ == '__main__':
-
- success_count = 0
- threads = []
- thread_num = 1
- res = getInstanceId (slbIds[0])
-
- total = len(res["BackendServers"]["BackendServer"])
- if res["BackendServers"]["BackendServer"]:
- for i in range ((len (res["BackendServers"]["BackendServer"]))):
- instance_id = res["BackendServers"]["BackendServer"][i]["ServerId"]
- for slbId in slbIds:
- setWeight(slbId, instance_id, 0)
- restart(instance_id)
|