liqian преди 2 години
родител
ревизия
a89e491f19
променени са 2 файла, в които са добавени 22 реда и са изтрити 4 реда
  1. 1 3
      ess_instance_rov_server.py
  2. 21 1
      utils.py

+ 1 - 3
ess_instance_rov_server.py

@@ -12,7 +12,6 @@ from concurrent.futures import ThreadPoolExecutor
 
 
 health_instances = []
-ess_instances = []
 
 
 def rov_server_health_check(client, instance_id, max_wait_time=None):
@@ -90,14 +89,13 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
     if len(health_instances) > 0:
         # 所有机器探活成功
         time.sleep(60)
+        utils.add_backend_servers(client=slb_client, slb_id=rov_server_config.slb_id, instances=health_instances)
         add_weight_list = [(10, 30), (20, 20), (40, 10), (60, 10), (80, 10), (100, 10)]
         health_instance_ids = [instance_id for instance_id, _ in health_instances]
         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(ess_instance_ids)
         logging.info(f"ess count: {ess_count}, "
                      f"create count: {len(ess_instance_ids)}, "
                      f"finished count: {len(health_instances)}")

+ 21 - 1
utils.py

@@ -6,6 +6,7 @@ import requests
 import asyncio
 
 from aliyunsdkcore.client import AcsClient
+from aliyunsdkslb.request.v20140515.AddBackendServersRequest import AddBackendServersRequest
 from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest
 from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
 from aliyunsdkecs.request.v20140526.DescribeNetworkInterfacesRequest import DescribeNetworkInterfacesRequest
@@ -324,13 +325,32 @@ def set_instance_weight_process(client, slb_id, instance_id_list, weight_list):
     :return:
     """
     for weight, sleep_time in weight_list:
+        logging.info(f"weight = {weight}")
         flag = True
         while flag:
             try:
                 set_weight_for_instances(client=client, slb_id=slb_id, instance_id_list=instance_id_list, weight=weight)
-                logging.info(f"weight = {weight}")
                 time.sleep(sleep_time)
                 flag = False
             except Exception as e:
                 time.sleep(10)
                 continue
+
+
+def add_backend_servers(client, slb_id, instances):
+    """
+    服务器挂载到负载均衡
+    :param client:
+    :param slb_id:
+    :param instances: 实例列表 [(instance_id, ip), ...]
+    :return:
+    """
+    request = AddBackendServersRequest()
+    request.set_accept_format('json')
+    request.set_LoadBalancerId(slb_id)
+    backend_servers = [
+        {"ServerId": instance_id, "Weight": "0", "Type": "ecs", "ServerIp": ip_address}
+        for instance_id, ip_address in instances]
+    request.set_BackendServers(backend_servers)
+    response = client.do_action_with_exception(request)
+    return response