|
@@ -11,6 +11,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|
|
|
|
|
|
|
|
health_instances = []
|
|
|
+ess_instances = []
|
|
|
|
|
|
slb_id = 'lb-bp1werfophtsjzfr76njm'
|
|
|
# 修改负载均衡权限
|
|
@@ -180,6 +181,8 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
|
|
|
time.sleep(60)
|
|
|
add_weight_list = [(10, 30), (20, 20), (40, 10), (60, 10), (80, 10), (100, 10)]
|
|
|
set_instance_weight_process(client=slb_client, instance_id_list=ess_instance_ids, weight_list=add_weight_list)
|
|
|
+ global ess_instances
|
|
|
+ ess_instances.extend(ess_instance_ids)
|
|
|
logging.info(f"ess count: {ess_count}, "
|
|
|
f"create count: {len(ess_instance_ids)}, "
|
|
|
f"finished count: {len(health_instances)}")
|
|
@@ -282,6 +285,44 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers):
|
|
|
sys.exit()
|
|
|
|
|
|
|
|
|
+def remove_instances(create_client, slb_client, instance_ids):
|
|
|
+ """
|
|
|
+ 停止并释放机器
|
|
|
+ :param create_client:
|
|
|
+ :param slb_client:
|
|
|
+ :param instance_ids: instanceId type-list
|
|
|
+ :return: None
|
|
|
+ """
|
|
|
+ # 1. 摘流量
|
|
|
+ set_instance_weight_process(client=slb_client, instance_id_list=instance_ids, weight_list=[(0, 60)])
|
|
|
+ logging.info(f"set weight = 0 finished, instances: {instance_ids}")
|
|
|
+ time.sleep(10)
|
|
|
+ # 2. 停止机器
|
|
|
+ utils.stop_instances(client=create_client, instance_ids=instance_ids)
|
|
|
+ logging.info(f"instances stop finished, instances: {instance_ids}")
|
|
|
+ # 3. 判断机器运行状态是否为Stopped
|
|
|
+ response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
|
|
|
+ if response.get('Code') is None:
|
|
|
+ instances_list = response.get('InstanceStatuses').get('InstanceStatus')
|
|
|
+ stopped_instances = [instance.get('InstanceId') for instance in instances_list
|
|
|
+ if instance.get('Status') == 'Stopped']
|
|
|
+ if len(stopped_instances) == len(instance_ids):
|
|
|
+ logging.info(f"instances stopped status set success, instances: {stopped_instances}")
|
|
|
+ else:
|
|
|
+ logging.info(f"stopped instances count = {len(instance_ids)}, instances: {stopped_instances}")
|
|
|
+ sys.exit()
|
|
|
+ else:
|
|
|
+ logging.error(response)
|
|
|
+ sys.exit()
|
|
|
+ # 4. 释放机器
|
|
|
+ response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
|
|
|
+ if response.get('Code') is None:
|
|
|
+ logging.info(f"release instances finished, instances: {stopped_instances}")
|
|
|
+ else:
|
|
|
+ logging.error(f"release instances fail!!!")
|
|
|
+ sys.exit()
|
|
|
+
|
|
|
+
|
|
|
def main():
|
|
|
slb_client = utils.connect_client(access_key_id=slb_client_params['access_key_id'],
|
|
|
access_key_secret=slb_client_params['access_key_secret'],
|
|
@@ -297,9 +338,21 @@ def main():
|
|
|
logging.info(f"online instance ids: {online_instance_ids}")
|
|
|
|
|
|
# 2. 扩容机器并启动新服务 扩容数量:线上机器数量/2
|
|
|
+ logging.info(f"ess instances start ...")
|
|
|
ess_instance_count = online_instance_count / 2
|
|
|
logging.info(f"ess instance count: {ess_instance_count}")
|
|
|
asyncio.run(ess_instance(create_client=create_client, slb_client=slb_client,
|
|
|
ess_count=ess_instance_count, max_workers=2))
|
|
|
+ logging.info(f"ess instances end!")
|
|
|
|
|
|
# 3. 原有机器进行更新
|
|
|
+ logging.info(f"update online instances start ...")
|
|
|
+ asyncio.run(update_instance(create_client=create_client, slb_client=slb_client,
|
|
|
+ instance_ids=online_instance_ids, max_workers=2))
|
|
|
+ logging.info(f"update online instances end!")
|
|
|
+
|
|
|
+ # 4. 停止并释放扩容机器
|
|
|
+ logging.info(f"stop & release instances start ...")
|
|
|
+ remove_instances(create_client=create_client, slb_client=slb_client, instance_ids=ess_instances)
|
|
|
+ logging.info(f"stop & release instances end!")
|
|
|
+
|