liqian 2 år sedan
förälder
incheckning
99a0400e19
1 ändrade filer med 35 tillägg och 4 borttagningar
  1. 35 4
      rov_server_update.py

+ 35 - 4
rov_server_update.py

@@ -108,6 +108,37 @@ def set_instance_weight_process(client, instance_id_list, weight_list):
                 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):
     """
     扩容机器并运行新服务
@@ -124,8 +155,10 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
         **instance_config,
     )
     time.sleep(60)
+
     # 2. 发送启动脚本到机器上
     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. 启动服务
     server_start_sh = os.path.join(start_sh['target_dir'], start_sh['name'])
     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)
     logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
-    # 挂载流量
+    # 5. 挂载流量
     if len(health_instances) == len(ess_instance_ids):
         # 所有机器探活成功
         time.sleep(60)
@@ -236,7 +269,7 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers):
         ]
         await asyncio.wait(tasks)
         logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
-        # 挂载流量
+        # 6. 挂载流量
         if len(health_instances) == len(instance_id_list):
             # 所有机器探活成功
             time.sleep(60)
@@ -249,8 +282,6 @@ async def update_instance(create_client, slb_client, instance_ids, max_workers):
             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'],