|
@@ -108,6 +108,37 @@ def set_instance_weight_process(client, instance_id_list, weight_list):
|
|
continue
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
+async def run_server(create_client, slb_client, instance_ids, max_workers):
|
|
|
|
+ # 1. 发送启动脚本到机器上
|
|
|
|
+ utils.send_file_to_ecs(client=create_client, instance_id_list=instance_ids, **start_sh)
|
|
|
|
+ logging.info(f"send start shell file finished, instances: {instance_ids}")
|
|
|
|
+ # 2. 启动服务
|
|
|
|
+ server_start_sh = os.path.join(start_sh['target_dir'], start_sh['name'])
|
|
|
|
+ server_start_commend = f"sh {server_start_sh}"
|
|
|
|
+ utils.run_command(client=create_client, instance_ids=instance_ids, command=server_start_commend)
|
|
|
|
+ # 3. 异步探活
|
|
|
|
+ global health_instances
|
|
|
|
+ health_instances = []
|
|
|
|
+ loop = asyncio.get_running_loop()
|
|
|
|
+ executor = ThreadPoolExecutor(max_workers=max_workers)
|
|
|
|
+ tasks = [
|
|
|
|
+ loop.run_in_executor(executor, server_health_check, *args) for args in
|
|
|
|
+ [(slb_client, instance_id) for instance_id in instance_ids]
|
|
|
|
+ ]
|
|
|
|
+ await asyncio.wait(tasks)
|
|
|
|
+ logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
|
|
|
|
+ # 4. 挂载流量
|
|
|
|
+ if len(health_instances) == len(instance_ids):
|
|
|
|
+ # 所有机器探活成功
|
|
|
|
+ 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=instance_ids, weight_list=add_weight_list)
|
|
|
|
+ logging.info(f"add weight instances count: {len(health_instances)}")
|
|
|
|
+ else:
|
|
|
|
+ logging.info(f"instances count: {len(instance_ids)},\nhealth instances count: {len(health_instances)}")
|
|
|
|
+ sys.exit()
|
|
|
|
+
|
|
|
|
+
|
|
async def ess_instance(create_client, slb_client, ess_count, max_workers):
|
|
async def ess_instance(create_client, slb_client, ess_count, max_workers):
|
|
"""
|
|
"""
|
|
扩容机器并运行新服务
|
|
扩容机器并运行新服务
|
|
@@ -124,8 +155,10 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
|
|
**instance_config,
|
|
**instance_config,
|
|
)
|
|
)
|
|
time.sleep(60)
|
|
time.sleep(60)
|
|
|
|
+
|
|
# 2. 发送启动脚本到机器上
|
|
# 2. 发送启动脚本到机器上
|
|
utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **start_sh)
|
|
utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **start_sh)
|
|
|
|
+ logging.info(f"send start shell file finished, instances: {ess_instance_ids}")
|
|
# 3. 启动服务
|
|
# 3. 启动服务
|
|
server_start_sh = os.path.join(start_sh['target_dir'], start_sh['name'])
|
|
server_start_sh = os.path.join(start_sh['target_dir'], start_sh['name'])
|
|
server_start_commend = f"sh {server_start_sh}"
|
|
server_start_commend = f"sh {server_start_sh}"
|
|
@@ -141,7 +174,7 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
|
|
]
|
|
]
|
|
await asyncio.wait(tasks)
|
|
await asyncio.wait(tasks)
|
|
logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
|
|
logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
|
|
- # 挂载流量
|
|
|
|
|
|
+ # 5. 挂载流量
|
|
if len(health_instances) == len(ess_instance_ids):
|
|
if len(health_instances) == len(ess_instance_ids):
|
|
# 所有机器探活成功
|
|
# 所有机器探活成功
|
|
time.sleep(60)
|
|
time.sleep(60)
|
|
@@ -236,7 +269,7 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers):
|
|
]
|
|
]
|
|
await asyncio.wait(tasks)
|
|
await asyncio.wait(tasks)
|
|
logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
|
|
logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
|
|
- # 挂载流量
|
|
|
|
|
|
+ # 6. 挂载流量
|
|
if len(health_instances) == len(instance_id_list):
|
|
if len(health_instances) == len(instance_id_list):
|
|
# 所有机器探活成功
|
|
# 所有机器探活成功
|
|
time.sleep(60)
|
|
time.sleep(60)
|
|
@@ -249,8 +282,6 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers):
|
|
sys.exit()
|
|
sys.exit()
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
def main():
|
|
def main():
|
|
slb_client = utils.connect_client(access_key_id=slb_client_params['access_key_id'],
|
|
slb_client = utils.connect_client(access_key_id=slb_client_params['access_key_id'],
|
|
access_key_secret=slb_client_params['access_key_secret'],
|
|
access_key_secret=slb_client_params['access_key_secret'],
|