瀏覽代碼

update weight

xuekailun 4 月之前
父節點
當前提交
6e26802898

+ 4 - 4
longvideoapi/longvideoapi_grayscale_update.py

@@ -102,11 +102,11 @@ def update_instance(ecs_client, alb_client, instance_id, version, port):
     logging.info(f"update instance: {instance_id}")
     # 1. 摘流量,将权重降为0
     # health_instance_ids = [instance_id]
-    weight_list = [(0, 20)]  # 设置权重为0,等待20秒
-    utils.update_server_group_servers_attribute(alb_client,
-                                                longvideoapi_config.server_group_id_list,
+    # weight_list = [(0, 20)]  # 设置权重为0,等待20秒
+    utils.update_server_group_servers_attribute(alb_client=alb_client,
+                                                server_group_id_list=longvideoapi_config.server_group_id_list,
                                                 instance_id_list=instance_id,
-                                                weight_list=weight_list,
+                                                weight_list=[(0, 20)],
                                                 port=port)
     logging.info(f"Set weight to 0 for instance: {instance_id}")
 

+ 0 - 2
longvideoapi/longvideoapi_scaling_k_count.py

@@ -71,14 +71,12 @@ async def ess_instance(ecs_client, alb_client, ess_count, max_workers, port):
     server_start_sh = os.path.join(longvideoapi_config.start_sh['target_dir'], longvideoapi_config.start_sh['name'])
     server_start_commend = f"sh {server_start_sh} {start_sh_param}"
     utils.run_command(ecs_client=ecs_client, instance_ids=ess_instance_ids, command=server_start_commend)
-    print(44444444444444444444)
     # 4. 异步探活
     global health_instances
     health_instances = []
     max_wait_time = 180
     loop = asyncio.get_running_loop()
     executor = ThreadPoolExecutor(max_workers=max_workers)
-    print(55555555555555555555)
     tasks = [
         loop.run_in_executor(executor, longvideoapi_health_check, *args) for args in
         [(ecs_client, instance_id, max_wait_time) for instance_id in ess_instance_ids]

+ 4 - 4
longvideoapi/longvideoapi_update_k.py

@@ -73,7 +73,7 @@ async def ess_instance(ecs_client, alb_client, ess_count, max_workers, version,
     executor = ThreadPoolExecutor(max_workers=max_workers)
     tasks = [
         loop.run_in_executor(executor, server_health_check, *args) for args in
-        [(alb_client, instance_id) for instance_id in ess_instance_ids]
+        [(ecs_client, instance_id) for instance_id in ess_instance_ids]
     ]
     await asyncio.wait(tasks)
     logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
@@ -189,7 +189,7 @@ async def update_instance(ecs_client, alb_client, instance_ids, max_workers, ver
         executor = ThreadPoolExecutor(max_workers=max_workers)
         tasks = [
             loop.run_in_executor(executor, remove_container_image, *args) for args in
-            [(alb_client, instance_id, container_name_list) for instance_id in instance_id_list]
+            [(ecs_client, instance_id, container_name_list) for instance_id in instance_id_list]
         ]
         await asyncio.wait(tasks)
         logging.info(f"remove container & images finished, instances: {remove_container_instances},"
@@ -212,7 +212,7 @@ async def update_instance(ecs_client, alb_client, instance_ids, max_workers, ver
         executor = ThreadPoolExecutor(max_workers=max_workers)
         tasks = [
             loop.run_in_executor(executor, server_health_check, *args) for args in
-            [(alb_client, instance_id) for instance_id in instance_id_list]
+            [(ecs_client, instance_id) for instance_id in instance_id_list]
         ]
         await asyncio.wait(tasks)
         logging.info(f"health instances: {health_instances}, count: {len(health_instances)}")
@@ -248,7 +248,7 @@ def remove_instances(ecs_client, alb_client, instance_ids, port):
     # 1. 摘流量
     weight_list = [(0, 20)]  # 设置权重为0,等待20秒
     try:
-        utils.update_server_group_servers_attribute(alb_client,
+        utils.update_server_group_servers_attribute(alb_client=alb_client,
                                                     server_group_id_list=longvideoapi_config.server_group_id_list,
                                                     instance_id_list=instance_ids,
                                                     weight_list=weight_list,

+ 39 - 28
util/utils.py

@@ -283,8 +283,6 @@ def send_request(ecs_client, request):
     :param request: 请求配置
     :return: response
     """
-    print(ecs_client, request)
-    print(2222222222)
     request.set_accept_format('json')
     try:
         response = ecs_client.do_action_with_exception(request)
@@ -455,32 +453,37 @@ async def list_server_group_servers_async(alb_client, server_group_id):
         return []
 
 
-def update_server_group_server_weight(alb_client, server_group_id, instance_id, weight, port):
+def update_server_group_server_weight(alb_client, server_group_id, instance_id_list, weight, port):
     """
     更指定服务器在服务器组中的权重
     :param alb_client: ALB客户端
     :param server_group_id: 服务器组ID
-    :param instance_id: 实例ID
+    :param instance_id_list: 实例ID
     :param weight: 权重值
     :param port: 后端服务器使用的端口
     """
-    server = alb_20200616_models.UpdateServerGroupServersAttributeRequestServers(
-        server_type='Ecs',
-        server_id=instance_id,
-        weight=weight,
-        port=port
-    )
-    request = alb_20200616_models.UpdateServerGroupServersAttributeRequest(
-        servers=[server],
-        server_group_id=server_group_id
-    )
-    runtime = util_models.RuntimeOptions()
-    try:
-        alb_client.update_server_group_servers_attribute_with_options(request, runtime)
-        print(f"Successfully updated server {instance_id} in group {server_group_id} to weight {weight}.")
-    except Exception as error:
-        print(str(error))
-        UtilClient.assert_as_string(str(error))
+    # for i in range(0, len(instance_id_list), 20):
+    #     instances_list = instance_id_list[i * 20:(i + 1) * 20]
+    #     if not instances_list:
+    #         return
+    print(instance_id_list)
+    for server_id in instance_id_list:
+        server = alb_20200616_models.UpdateServerGroupServersAttributeRequestServers(
+            server_type='Ecs',
+            server_id=server_id,
+            weight=weight,
+            port=port
+        )
+        request = alb_20200616_models.UpdateServerGroupServersAttributeRequest(
+            servers=[server],
+            server_group_id=server_group_id
+        )
+        runtime = util_models.RuntimeOptions()
+        try:
+            alb_client.update_server_group_servers_attribute_with_options(request, runtime)
+            logging.info(f"Successfully updated server {server_id} in group {server_group_id} to weight {weight}.")
+        except Exception as error:
+            logging.error(f"Failed to update server {server_id}: {str(error)}")
 
 def update_server_group_servers_attribute(alb_client, server_group_id_list, instance_id_list, weight_list, port):
     """
@@ -491,13 +494,21 @@ def update_server_group_servers_attribute(alb_client, server_group_id_list, inst
     :param weight_list: 权重修改列表 type-list [(weight, sleep_time), ...]
     :param port: 后端服务器使用的端口
     """
-    for server_group_id in server_group_id_list:
-        for instance_id in instance_id_list:
-            for weight, sleep_time in weight_list:
-                update_server_group_server_weight(alb_client, server_group_id, instance_id, weight, port)
-                time.sleep(sleep_time)
-
-
+    for weight, sleep_time in weight_list:
+        logging.info(f"修改权重中: weight = {weight}")
+        for server_group_id in server_group_id_list:
+            flag = True
+            while flag:
+                try:
+                    update_server_group_server_weight(alb_client=alb_client, server_group_id=server_group_id, instance_id_list=instance_id_list,
+                                             weight=weight, port=port)
+                    logging.info(f"alb: {server_group_id} finished!")
+                    flag = False
+                except Exception as e:
+                    logging.warning(f"Error updating group {server_group_id}, retrying in 10 seconds: {str(e)}")
+                    time.sleep(10)
+                    continue
+        time.sleep(sleep_time)
 
 
 async def update_server_group_server_weight_async(alb_client, server_group_id, instance_id, weight, port):