123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #!/u:sr/bin/env python
- #coding=utf-8
- #edite panwang
- 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)
- #id_2 = "lb-bp1qk9mkvjtundlzz7owm"
- #id_3 = "lb-bp1by407qxe4y7bkvye27"
- #id_4 = "lb-bp1akia6vlguiwg4znaq8"
- # slbIds = ["lb-bp1qk9mkvjtundlzz7owm", "lb-bp1by407qxe4y7bkvye27", "lb-bp1akia6vlguiwg4znaq8"]
- # slbIds = ["lb-bp1qk9mkvjtundlzz7owm", "lb-bp1by407qxe4y7bkvye27", "lb-bp1akia6vlguiwg4znaq8", "lb-bp1y63rnrb2e64whryghz"]
- 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
- #服务更新完之后逐步修改服务器的权重值,直接加载100会出现502。权重值每次增加10,每2s修改一次
- 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)
- #设置权重 instance_id :服务器id,weight:权重值
- 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()#容器启动失败立即退出更新
- #获取slb下所有服务器信息
- 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)
- #获取实例IP地址
- 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])
- #slb下服务器总数
- 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)
|