|
@@ -40,59 +40,28 @@ def server_health_check(client, instance_id):
|
|
|
time.sleep(10)
|
|
|
|
|
|
|
|
|
-def set_instance_weight_process(client, instance_id_list, weight_list):
|
|
|
- """
|
|
|
- 修改服务器的权重值
|
|
|
- :param client: slb客户端连接
|
|
|
- :param instance_id_list: instance id list
|
|
|
- :param weight_list: 权重修改列表 type-list [(weight, sleep_time), ...]
|
|
|
- :return:
|
|
|
- """
|
|
|
- for weight, sleep_time in weight_list:
|
|
|
- logging.info(f"修改权重中: weight = {weight}")
|
|
|
- flag = True
|
|
|
- while flag:
|
|
|
- try:
|
|
|
- utils.set_weight_for_instances(client=client,
|
|
|
- slb_id=rov_server_config.slb_id,
|
|
|
- instance_id_list=instance_id_list,
|
|
|
- weight=weight)
|
|
|
- time.sleep(sleep_time)
|
|
|
- flag = False
|
|
|
- except Exception as e:
|
|
|
- time.sleep(10)
|
|
|
- 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, **rov_server_config.start_sh)
|
|
|
- logging.info(f"send start shell file finished, instances: {instance_ids}")
|
|
|
- # 2. 启动服务
|
|
|
- server_start_sh = os.path.join(rov_server_config.start_sh['target_dir'], rov_server_config.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()
|
|
|
+# def set_instance_weight_process(client, instance_id_list, weight_list):
|
|
|
+# """
|
|
|
+# 修改服务器的权重值
|
|
|
+# :param client: slb客户端连接
|
|
|
+# :param instance_id_list: instance id list
|
|
|
+# :param weight_list: 权重修改列表 type-list [(weight, sleep_time), ...]
|
|
|
+# :return:
|
|
|
+# """
|
|
|
+# for weight, sleep_time in weight_list:
|
|
|
+# logging.info(f"修改权重中: weight = {weight}")
|
|
|
+# flag = True
|
|
|
+# while flag:
|
|
|
+# try:
|
|
|
+# utils.set_weight_for_instances(client=client,
|
|
|
+# slb_id=rov_server_config.slb_id,
|
|
|
+# instance_id_list=instance_id_list,
|
|
|
+# weight=weight)
|
|
|
+# time.sleep(sleep_time)
|
|
|
+# flag = False
|
|
|
+# except Exception as e:
|
|
|
+# time.sleep(10)
|
|
|
+# continue
|
|
|
|
|
|
|
|
|
async def ess_instance(create_client, slb_client, ess_count, max_workers, version):
|
|
@@ -138,7 +107,10 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers, versio
|
|
|
utils.add_backend_servers(client=slb_client, slb_id=rov_server_config.slb_id, instances=health_instances)
|
|
|
health_instance_ids = [instance_id for instance_id, _ in health_instances]
|
|
|
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=health_instance_ids, weight_list=add_weight_list)
|
|
|
+ utils.set_instance_weight_process(client=slb_client,
|
|
|
+ slb_id=rov_server_config.slb_id,
|
|
|
+ instance_id_list=health_instance_ids,
|
|
|
+ weight_list=add_weight_list)
|
|
|
global ess_instances
|
|
|
ess_instances.extend(health_instance_ids)
|
|
|
logging.info(f"ess count: {ess_count}, "
|
|
@@ -211,7 +183,10 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers,
|
|
|
for instance_id_list in instance_ids_group:
|
|
|
logging.info(f"update instances: {instance_id_list}")
|
|
|
# 1. 摘流量
|
|
|
- set_instance_weight_process(client=slb_client, instance_id_list=instance_id_list, weight_list=[(0, 60)])
|
|
|
+ utils.set_instance_weight_process(client=slb_client,
|
|
|
+ slb_id=rov_server_config.slb_id,
|
|
|
+ instance_id_list=instance_id_list,
|
|
|
+ weight_list=[(0, 60)])
|
|
|
logging.info(f"set weight with 0 finished, instances: {instance_id_list}")
|
|
|
# 2. 异步移除旧容器并删除旧镜像
|
|
|
global remove_container_instances
|
|
@@ -255,8 +230,10 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers,
|
|
|
utils.add_backend_servers(client=slb_client, slb_id=rov_server_config.slb_id, instances=health_instances)
|
|
|
health_instance_ids = [instance_id for instance_id, _ in health_instances]
|
|
|
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=health_instance_ids,
|
|
|
- weight_list=add_weight_list)
|
|
|
+ utils.set_instance_weight_process(client=slb_client,
|
|
|
+ slb_id=rov_server_config.slb_id,
|
|
|
+ instance_id_list=health_instance_ids,
|
|
|
+ weight_list=add_weight_list)
|
|
|
logging.info(f"finished instances: {health_instances}, count: {len(health_instances)}")
|
|
|
update_finished_count += len(health_instances)
|
|
|
logging.info(f"update finished: {update_finished_count}/{len(instance_ids)}")
|
|
@@ -274,7 +251,10 @@ def remove_instances(create_client, slb_client, instance_ids):
|
|
|
:return: None
|
|
|
"""
|
|
|
# 1. 摘流量
|
|
|
- set_instance_weight_process(client=slb_client, instance_id_list=instance_ids, weight_list=[(0, 60)])
|
|
|
+ utils.set_instance_weight_process(client=slb_client,
|
|
|
+ slb_id=rov_server_config.slb_id,
|
|
|
+ instance_id_list=instance_ids,
|
|
|
+ weight_list=[(0, 60)])
|
|
|
logging.info(f"set weight = 0 finished, instances: {instance_ids}")
|
|
|
time.sleep(10)
|
|
|
# 2. 停止机器
|