Browse Source

add k region

supeng 7 months ago
parent
commit
09c69ba814

+ 0 - 132
ess_longvideo_f.py

@@ -1,132 +0,0 @@
-import sys
-import os
-import asyncio
-import logging
-import time
-import requests
-
-import utils
-import longvideo_config
-
-from concurrent.futures import ThreadPoolExecutor
-
-
-health_instances = []
-
-
-def longvideo_health_check(client, instance_id, max_wait_time=None):
-    """
-    服务健康检查
-    :param client: 客户端连接
-    :param instance_id: instanceId
-    :param max_wait_time: 最长等待时间,单位:s
-    :return:
-    """
-    global health_instances
-    start_time = time.time()
-    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
-    while True:
-        health_check_url = f"http://{ip_address}:8080/longvideoapi/test"
-        try:
-            http_code = requests.get(health_check_url).status_code
-        except:
-            logging.info(f"images is downloading ip: {ip_address}")
-            http_code = 0
-
-        if http_code == 200:
-            health_instances.append((instance_id, ip_address))
-            logging.info(f"health check success, instance: {instance_id}/{ip_address}")
-            break
-        elif max_wait_time is not None:
-            now = time.time()
-            if (now - start_time) >= max_wait_time:
-                logging.info(f"health check error, instance: {instance_id}/{ip_address}")
-                break
-            else:
-                time.sleep(10)
-        else:
-            time.sleep(10)
-
-
-async def ess_instance(create_client, slb_client, ess_count, max_workers):
-    """
-    扩容机器并运行新服务
-    :param create_client: 购买机器客户端连接
-    :param slb_client: 修改负载均衡权限
-    :param ess_count: 扩容数量
-    :param max_workers: 线程数
-    :return:
-    """
-    # 1. 购买机器并启动
-    ess_instance_ids = utils.create_multiple_instances(
-        amount=ess_count,
-        client=create_client,
-        **longvideo_config.instance_config_f,
-    )
-    time.sleep(60)
-
-    # 2. 发送启动脚本到机器上
-    utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **longvideo_config.start_sh)
-    logging.info(f"send start shell file finished, instances: {ess_instance_ids}")
-    # 3. 启动服务
-    start_sh_param = "latest"
-    server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
-    server_start_commend = f"sh {server_start_sh} {start_sh_param}"
-    utils.run_command(client=create_client, instance_ids=ess_instance_ids, command=server_start_commend)
-    # 4. 异步探活
-    global health_instances
-    health_instances = []
-    max_wait_time = 180
-    loop = asyncio.get_running_loop()
-    executor = ThreadPoolExecutor(max_workers=max_workers)
-    tasks = [
-        loop.run_in_executor(executor, longvideo_health_check, *args) for args in
-        [(slb_client, instance_id, max_wait_time) for instance_id in ess_instance_ids]
-    ]
-    await asyncio.wait(tasks)
-    logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
-    # 5. 挂载流量
-    if len(health_instances) > 0:
-        # 所有机器探活成功
-        time.sleep(20)
-        utils.add_backend_servers_with_slbs(client=slb_client,
-                                            slb_id_list=longvideo_config.slb_id_list,
-                                            instances=health_instances)
-        add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
-        health_instance_ids = [instance_id for instance_id, _ in health_instances]
-        utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                    slb_id_list=longvideo_config.slb_id_list,
-                                                    instance_id_list=health_instance_ids,
-                                                    weight_list=add_weight_list)
-        logging.info(f"ess count: {ess_count}, "
-                     f"create count: {len(ess_instance_ids)}, "
-                     f"finished count: {len(health_instance_ids)}")
-    else:
-        logging.info(f"ess count: {ess_count}, "
-                     f"create count: {len(ess_instance_ids)}, "
-                     f"health count: {len(health_instances)}")
-        sys.exit()
-
-
-def main():
-    try:
-        slb_client = utils.connect_client(access_key_id=longvideo_config.slb_client_params['access_key_id'],
-                                          access_key_secret=longvideo_config.slb_client_params['access_key_secret'],
-                                          region_id=longvideo_config.slb_client_params['region_id'])
-        create_client = utils.connect_client(access_key_id=longvideo_config.create_client_params['access_key_id'],
-                                             access_key_secret=longvideo_config.create_client_params['access_key_secret'],
-                                             region_id=longvideo_config.create_client_params['region_id'])
-        # 获取批量创建ECS实例的数量
-        ess_instance_count = int(sys.argv[1])
-        # 扩容机器并启动服务
-        logging.info(f"ess instances start ...")
-        logging.info(f"ess instance count: {ess_instance_count}")
-        asyncio.run(ess_instance(create_client=create_client, slb_client=slb_client,
-                                 ess_count=ess_instance_count, max_workers=2))
-        logging.info(f"ess instances end!")
-    except Exception as e:
-        logging.error(e)
-
-
-if __name__ == '__main__':
-    main()

+ 1 - 1
ess_longvideo_e.py → ess_longvideo_k.py

@@ -61,7 +61,7 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
     ess_instance_ids = utils.create_multiple_instances(
         amount=ess_count,
         client=create_client,
-        **longvideo_config.instance_config_e,
+        **longvideo_config.instance_config_k,
     )
     time.sleep(60)
 

+ 12 - 36
longvideo_config.py

@@ -67,38 +67,14 @@ instance_config_i = {
     'tags': [{"Key": "ecs", "Value": "longvideoapi.prod"}]
 }
 
-# 机器配置_hangzhou_e
-instance_config_e = {
-    # 使用的镜像信息
-    'image_id': 'm-bp12bkuvg20k6ueqmb4v',
-    # 设置实例规格
-    'instance_type': 'ecs.c6.2xlarge',
-    # 选择的交换机
-    'vswitch_id': 'vsw-bp1048kli0b3lyxu17eqi',
-    # 当前VPC类型的安全组
-    'security_group_id': 'sg-bp1irhrkr4vfj272hk4y',
-    # 硬盘的大小,单位:G
-    'disk_size': '200',
-    # 服务器命名
-    'instance_name': 'ESS-vlogapi-[1,2]',
-    # 服务器所在区域
-    'zone_id': 'cn-hangzhou-e',
-    # 磁盘类型:云盘
-    'disk_category': 'cloud_efficiency',
-    # 密钥
-    'key_pair_name': 'stuuudy',
-    # tag
-    'tags': [{"Key": "ecs", "Value": "longvideoapi.prod"}]
-}
-
-# 机器配置_hangzhou_f
-instance_config_f = {
+# 机器配置_hangzhou_g
+instance_config_g = {
     # 使用的镜像信息
     'image_id': 'm-bp12bkuvg20k6ueqmb4v',
     # 设置实例规格
     'instance_type': 'ecs.c6.2xlarge',
     # 选择的交换机
-    'vswitch_id': 'vsw-bp1l7qotu3lu6bqhbiep2',
+    'vswitch_id': 'vsw-bp10m69sb9ydfa64jdrn3',
     # 当前VPC类型的安全组
     'security_group_id': 'sg-bp1irhrkr4vfj272hk4y',
     # 硬盘的大小,单位:G
@@ -106,7 +82,7 @@ instance_config_f = {
     # 服务器命名
     'instance_name': 'ESS-vlogapi-[1,2]',
     # 服务器所在区域
-    'zone_id': 'cn-hangzhou-f',
+    'zone_id': 'cn-hangzhou-g',
     # 磁盘类型:云盘
     'disk_category': 'cloud_efficiency',
     # 密钥
@@ -115,14 +91,14 @@ instance_config_f = {
     'tags': [{"Key": "ecs", "Value": "longvideoapi.prod"}]
 }
 
-# 机器配置_hangzhou_g
-instance_config_g = {
+# 机器配置_hangzhou_j
+instance_config_j = {
     # 使用的镜像信息
     'image_id': 'm-bp12bkuvg20k6ueqmb4v',
     # 设置实例规格
     'instance_type': 'ecs.c6.2xlarge',
     # 选择的交换机
-    'vswitch_id': 'vsw-bp10m69sb9ydfa64jdrn3',
+    'vswitch_id': 'vsw-bp1ssuwxyrt0p17ceeir0',
     # 当前VPC类型的安全组
     'security_group_id': 'sg-bp1irhrkr4vfj272hk4y',
     # 硬盘的大小,单位:G
@@ -130,7 +106,7 @@ instance_config_g = {
     # 服务器命名
     'instance_name': 'ESS-vlogapi-[1,2]',
     # 服务器所在区域
-    'zone_id': 'cn-hangzhou-g',
+    'zone_id': 'cn-hangzhou-j',
     # 磁盘类型:云盘
     'disk_category': 'cloud_efficiency',
     # 密钥
@@ -139,14 +115,14 @@ instance_config_g = {
     'tags': [{"Key": "ecs", "Value": "longvideoapi.prod"}]
 }
 
-# 机器配置_hangzhou_j
-instance_config_j = {
+# 机器配置_hangzhou_k
+instance_config_k = {
     # 使用的镜像信息
     'image_id': 'm-bp12bkuvg20k6ueqmb4v',
     # 设置实例规格
     'instance_type': 'ecs.c6.2xlarge',
     # 选择的交换机
-    'vswitch_id': 'vsw-bp1ssuwxyrt0p17ceeir0',
+    'vswitch_id': 'vsw-bp14e4xu6uzte9nyn6nvr',
     # 当前VPC类型的安全组
     'security_group_id': 'sg-bp1irhrkr4vfj272hk4y',
     # 硬盘的大小,单位:G
@@ -154,7 +130,7 @@ instance_config_j = {
     # 服务器命名
     'instance_name': 'ESS-vlogapi-[1,2]',
     # 服务器所在区域
-    'zone_id': 'cn-hangzhou-j',
+    'zone_id': 'cn-hangzhou-k',
     # 磁盘类型:云盘
     'disk_category': 'cloud_efficiency',
     # 密钥

+ 0 - 251
longvideo_quick_restart_with_ess_f.py

@@ -1,251 +0,0 @@
-import logging
-import requests
-import time
-import docker
-import asyncio
-import sys
-import os
-
-import longvideo_config
-import utils
-
-from concurrent.futures import ThreadPoolExecutor
-
-logging.basicConfig(level=logging.INFO,
-                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
-                    datefmt='%a, %d %b %Y %H:%M:%S')
-
-health_instances = []
-ess_instances = []
-
-
-def server_health_check(client, instance_id):
-    """
-    服务健康检查
-    :param client: 客户端连接
-    :param instance_id: instanceId
-    :return:
-    """
-    global health_instances
-    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
-    while True:
-        health_check_url = f"http://{ip_address}:8080/longvideoapi/test"
-        try:
-            http_code = requests.get(health_check_url).status_code
-        except:
-            logging.info("images is downloading")
-            http_code = 0
-
-        if http_code == 200:
-            health_instances.append((instance_id, ip_address))
-            break
-        else:
-            time.sleep(10)
-
-
-def restart(slb_client, instance_id, image_name):
-    """重启容器并探活"""
-    # 1. 获取ip
-    ip_address = utils.get_ip_address(client=slb_client, instance_id=instance_id)
-    logging.info(f"ip address:{instance_id}/{ip_address}")
-    # 3. 重启容器
-    docker_client = docker.DockerClient(base_url=f'tcp://{ip_address}:2375', timeout=60)
-    image_id = docker_client.containers.get(image_name)
-    image_id.restart()
-    logging.info(f"docker restart finished, ip address:{instance_id}/{ip_address}")
-    time.sleep(5)
-    # 4. 探活
-    server_health_check(slb_client, instance_id)
-    logging.info(f"health check finished, ip address:{instance_id}/{ip_address}")
-
-
-async def server_restart_all(slb_client, instance_id_list, image_name, max_workers):
-    try:
-        # 1. 摘流量
-        utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                    slb_id_list=longvideo_config.slb_id_list,
-                                                    instance_id_list=instance_id_list,
-                                                    weight_list=[(0, 15)])
-        logging.info(f"set weight with 0 finished.")
-
-        # 2. 异步重启 & 探活
-        global health_instances
-        loop = asyncio.get_running_loop()
-        executor = ThreadPoolExecutor(max_workers=max_workers)
-        tasks = [
-            loop.run_in_executor(executor, restart, *args) for args in
-            [(slb_client, instance_id, image_name) for instance_id in instance_id_list]
-        ]
-        await asyncio.wait(tasks)
-        logging.info(f"health instances count: {len(health_instances)}, {health_instances}")
-
-        # 3. 挂载流量
-        if len(health_instances) == len(instance_id_list):
-            time.sleep(10)
-            add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
-            utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                        slb_id_list=longvideo_config.slb_id_list,
-                                                        instance_id_list=[instance[0] for instance in health_instances],
-                                                        weight_list=add_weight_list)
-            logging.info(f"set weight finished instance count: {len(health_instances)}, {health_instances}")
-        else:
-            logging.info(f"ess count: {len(instance_id_list)}, "
-                         f"health count: {len(health_instances)}")
-            sys.exit()
-
-    except Exception as e:
-        logging.error(f"server restart fail!")
-        logging.error(e)
-
-
-async def ess_instance(create_client, slb_client, ess_count, max_workers, version):
-    """
-    扩容机器并运行新服务
-    :param create_client: 购买机器客户端连接
-    :param slb_client: 修改负载均衡权限
-    :param ess_count: 扩容数量
-    :param max_workers: 线程数
-    :param version: 版本标记
-    :return:
-    """
-    # 1. 购买机器并启动
-    ess_instance_ids = utils.create_multiple_instances(
-        amount=ess_count,
-        client=create_client,
-        **longvideo_config.instance_config_f,
-    )
-    time.sleep(60)
-
-    # 2. 发送启动脚本到机器上
-    utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **longvideo_config.start_sh)
-    logging.info(f"send start shell file finished, instances: {ess_instance_ids}")
-    # 3. 启动服务
-    server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
-    server_start_commend = f"sh {server_start_sh} {version}"
-    utils.run_command(client=create_client, instance_ids=ess_instance_ids, command=server_start_commend)
-    # 4. 异步探活
-    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 ess_instance_ids]
-    ]
-    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(10)
-        utils.add_backend_servers_with_slbs(client=slb_client,
-                                            slb_id_list=longvideo_config.slb_id_list,
-                                            instances=health_instances)
-        health_instance_ids = [instance_id for instance_id, _ in health_instances]
-        add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
-        utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                    slb_id_list=longvideo_config.slb_id_list,
-                                                    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}, "
-                     f"create count: {len(ess_instance_ids)}, "
-                     f"finished count: {len(health_instance_ids)}")
-    else:
-        logging.info(f"ess count: {ess_count}, "
-                     f"create count: {len(ess_instance_ids)}, "
-                     f"health count: {len(health_instances)}")
-        sys.exit()
-
-
-def remove_instances(create_client, slb_client, instance_ids):
-    """
-    停止并释放机器
-    :param create_client:
-    :param slb_client:
-    :param instance_ids: instanceId type-list
-    :return: None
-    """
-    # 1. 摘流量
-    utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                slb_id_list=longvideo_config.slb_id_list,
-                                                instance_id_list=instance_ids,
-                                                weight_list=[(0, 20)])
-    logging.info(f"set weight = 0 finished, instances: {instance_ids}")
-    time.sleep(10)
-    # 2.移除slb
-    utils.remove_backend_servers_with_slbs(client=slb_client,
-                                           slb_id_list=longvideo_config.slb_id_list,
-                                           instances=instance_ids)
-    # 3. 停止机器
-    utils.stop_instances(client=create_client, instance_ids=instance_ids)
-    logging.info(f"instances stop finished, instances: {instance_ids}")
-    # 4. 判断机器运行状态是否为Stopped
-    while True:
-        response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
-        if response.get('Code') is None:
-            instances_list = response.get('InstanceStatuses').get('InstanceStatus')
-            # logging.info(instances_list)
-            stopped_instances = [instance.get('InstanceId') for instance in instances_list
-                                 if instance.get('Status') == 'Stopped']
-            if len(stopped_instances) == len(instance_ids):
-                logging.info(f"instances stopped status set success, instances: {stopped_instances}")
-                break
-            else:
-                logging.info(f"stopped instances count = {len(stopped_instances)}, instances: {stopped_instances}")
-                time.sleep(5)
-        else:
-            logging.error(response)
-            sys.exit()
-    # 5. 释放机器
-    response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
-    if response.get('Code') is None:
-        logging.info(f"release instances finished, instances: {stopped_instances}")
-    else:
-        logging.error(f"release instances fail!!!")
-        sys.exit()
-
-
-def main():
-    try:
-        slb_client = utils.connect_client(access_key_id=longvideo_config.slb_client_params['access_key_id'],
-                                          access_key_secret=longvideo_config.slb_client_params['access_key_secret'],
-                                          region_id=longvideo_config.slb_client_params['region_id'])
-        create_client = utils.connect_client(access_key_id=longvideo_config.create_client_params['access_key_id'],
-                                             access_key_secret=longvideo_config.create_client_params[
-                                                 'access_key_secret'],
-                                             region_id=longvideo_config.create_client_params['region_id'])
-
-        # 1. 获取slb下所有机器
-        online_instance_ids = utils.get_instance_ids(client=slb_client, slb_id=longvideo_config.slb_id_list[0])
-        online_instance_count = len(online_instance_ids)
-        logging.info(f"online instance count: {online_instance_count}.")
-        logging.info(f"online instance ids: {online_instance_ids}")
-
-        # 2. 扩容机器并启动新服务 扩容数量:线上机器数量
-        logging.info(f"ess instances start ...")
-        ess_instance_count = online_instance_count
-        if ess_instance_count > 100:
-            ess_instance_count = 100
-        logging.info(f"ess instance count: {ess_instance_count}")
-        asyncio.run(ess_instance(create_client=create_client, slb_client=slb_client,
-                                 ess_count=ess_instance_count, max_workers=ess_instance_count, version='latest'))
-        logging.info(f"ess instances end!")
-
-        # 3. 重启线上原有服务器
-        # image_name = 'longvideoapi'
-        # asyncio.run(server_restart_all(slb_client=slb_client, instance_id_list=online_instance_ids,
-        #                                image_name=image_name, max_workers=online_instance_count))
-        # logging.info(f"server restart finished!")
-
-        # 4. 停止并释放扩容机器
-        logging.info(f"stop & release instances start ...")
-        remove_instances(create_client=create_client, slb_client=slb_client, instance_ids=ess_instances)
-        logging.info(f"stop & release instances end!")
-    except Exception as e:
-        logging.error(e)
-
-
-if __name__ == '__main__':
-    main()

+ 1 - 1
longvideo_quick_restart_with_ess_e.py → longvideo_quick_restart_with_ess_k.py

@@ -112,7 +112,7 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers, versio
     ess_instance_ids = utils.create_multiple_instances(
         amount=ess_count,
         client=create_client,
-        **longvideo_config.instance_config_e,
+        **longvideo_config.instance_config_k,
     )
     time.sleep(60)
 

+ 0 - 325
longvideo_update_f.py

@@ -1,325 +0,0 @@
-import asyncio
-import sys
-import time
-import requests
-import utils
-import logging
-import os
-import docker
-import longvideo_config
-
-from concurrent.futures import ThreadPoolExecutor
-
-
-health_instances = []
-ess_instances = []
-remove_container_instances = []
-
-
-def server_health_check(client, instance_id):
-    """
-    服务健康检查
-    :param client: 客户端连接
-    :param instance_id: instanceId
-    :return:
-    """
-    global health_instances
-    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
-    while True:
-        health_check_url = f"http://{ip_address}:8080/longvideoapi/test"
-        try:
-            http_code = requests.get(health_check_url).status_code
-        except:
-            logging.info(f"images is downloading ip:{ip_address}")
-            http_code = 0
-
-        if http_code == 200:
-            health_instances.append((instance_id, ip_address))
-            logging.info(f"health check success, instance: {instance_id}/{ip_address}")
-            break
-        else:
-            time.sleep(10)
-
-
-async def ess_instance(create_client, slb_client, ess_count, max_workers, version):
-    """
-    扩容机器并运行新服务
-    :param create_client: 购买机器客户端连接
-    :param slb_client: 修改负载均衡权限
-    :param ess_count: 扩容数量
-    :param max_workers: 线程数
-    :param version: 版本标记
-    :return:
-    """
-    # 1. 购买机器并启动
-    ess_instance_ids = utils.create_multiple_instances(
-        amount=ess_count,
-        client=create_client,
-        **longvideo_config.instance_config_f,
-    )
-    time.sleep(60)
-
-    # 2. 发送启动脚本到机器上
-    utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **longvideo_config.start_sh)
-    logging.info(f"send start shell file finished, instances: {ess_instance_ids}")
-    # 3. 启动服务
-    server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
-    server_start_commend = f"sh {server_start_sh} {version}"
-    utils.run_command(client=create_client, instance_ids=ess_instance_ids, command=server_start_commend)
-    # 4. 异步探活
-    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 ess_instance_ids]
-    ]
-    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(10)
-        utils.add_backend_servers_with_slbs(client=slb_client,
-                                            slb_id_list=longvideo_config.slb_id_list,
-                                            instances=health_instances)
-        health_instance_ids = [instance_id for instance_id, _ in health_instances]
-        add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
-        utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                    slb_id_list=longvideo_config.slb_id_list,
-                                                    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}, "
-                     f"create count: {len(ess_instance_ids)}, "
-                     f"finished count: {len(health_instance_ids)}")
-    else:
-        logging.info(f"ess count: {ess_count}, "
-                     f"create count: {len(ess_instance_ids)}, "
-                     f"health count: {len(health_instances)}")
-        sys.exit()
-
-
-def remove_container_image(client, instance_id, container_name_list):
-    """
-    移除旧容器并删除旧镜像
-    :param client: 客户端连接
-    :param instance_id: instanceId type-string
-    :param container_name: 容器名称 type-string
-    :return:
-    """
-    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
-    logging.info(f"服务器信息:{instance_id}/{ip_address}")
-    client = docker.DockerClient(base_url=f'tcp://{ip_address}:2375', timeout=60)
-    # 移除旧的容器
-    container_remove_retry = 3
-    i = 0
-    while True:
-        if i >= container_remove_retry:
-            logging.error(f"容器不存在或者无法删除当前容器, instance = {instance_id}/{ip_address}")
-            sys.exit()
-        try:
-            flag = False
-            for container_name in container_name_list:
-                try:
-                    container_id = client.containers.get(container_name)
-                    container_id.remove(force=True)
-                    flag = True
-                    break
-                except:
-                    continue
-            if flag:
-                break
-        except Exception as e:
-            i += 1
-
-    # 删除旧镜像
-    images_remove_retry = 3
-    j = 0
-    while True:
-        if j >= images_remove_retry:
-            logging.error(f"镜像不存在,无法获取到镜像ID, instance = {instance_id}/{ip_address}")
-            sys.exit()
-        try:
-            images = client.images.list()
-            for image in images:
-                client.images.remove(force=True, image=image.tags[0])
-                time.sleep(2)
-            global remove_container_instances
-            remove_container_instances.append(instance_id)
-            break
-        except Exception as e:
-            i += 1
-
-
-async def update_instance(create_client, slb_client, instance_ids, max_workers, version):
-    """
-    线上机器更新
-    :param create_client:
-    :param slb_client: slb客户端连接
-    :param instance_ids: instanceId type-list
-    :param max_workers:
-    :param version: 版本标记
-    :return:
-    """
-    media_index = len(instance_ids)//2
-    instance_ids_group = [instance_ids[:media_index], instance_ids[media_index:]]
-    update_finished_count = 0
-    for instance_id_list in instance_ids_group:
-        logging.info(f"update instances: {instance_id_list}")
-        # 1. 摘流量
-        utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                    slb_id_list=longvideo_config.slb_id_list,
-                                                    instance_id_list=instance_id_list,
-                                                    weight_list=[(0, 15)])
-        logging.info(f"set weight with 0 finished, instances: {instance_id_list}")
-        # 2. 异步移除旧容器并删除旧镜像
-        global remove_container_instances
-        remove_container_instances = []
-        # container_name = 'longvideoapi'
-        container_name_list = ['vlogapi', 'longvideoapi']
-        loop = asyncio.get_running_loop()
-        executor = ThreadPoolExecutor(max_workers=max_workers)
-        tasks = [
-            loop.run_in_executor(executor, remove_container_image, *args) for args in
-            [(slb_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},"
-                     f" count: {len(remove_container_instances)}")
-        if len(remove_container_instances) < len(instance_id_list):
-            logging.error(f"remove container image failed| "
-                          f"request count: {len(instance_id_list)}, removed count: {len(remove_container_instances)}")
-            sys.exit()
-        # 3. 发送启动脚本到机器上
-        utils.send_file_to_ecs(client=create_client, instance_id_list=instance_id_list, **longvideo_config.start_sh)
-        logging.info(f"send start shell file finished, instances: {instance_id_list}, count: {len(instance_id_list)}")
-        # 4. 启动服务
-        server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
-        server_start_commend = f"sh {server_start_sh} {version}"
-        utils.run_command(client=create_client, instance_ids=instance_id_list, command=server_start_commend)
-        # 5. 异步探活
-        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_id_list]
-        ]
-        await asyncio.wait(tasks)
-        logging.info(f"health instances: {health_instances}, count: {len(health_instances)}")
-        # 6. 挂载流量
-        if len(health_instances) == len(instance_id_list):
-            # 所有机器探活成功
-            time.sleep(10)
-            utils.add_backend_servers_with_slbs(client=slb_client,
-                                                slb_id_list=longvideo_config.slb_id_list,
-                                                instances=health_instances)
-            health_instance_ids = [instance_id for instance_id, _ in health_instances]
-            add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
-            utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                        slb_id_list=longvideo_config.slb_id_list,
-                                                        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)}")
-        else:
-            logging.info(f"health instances: {health_instances}, count: {len(health_instances)}")
-            sys.exit()
-
-
-def remove_instances(create_client, slb_client, instance_ids):
-    """
-    停止并释放机器
-    :param create_client:
-    :param slb_client:
-    :param instance_ids: instanceId type-list
-    :return: None
-    """
-    # 1. 摘流量
-    utils.set_instance_weight_process_with_slbs(client=slb_client,
-                                                slb_id_list=longvideo_config.slb_id_list,
-                                                instance_id_list=instance_ids,
-                                                weight_list=[(0, 20)])
-    logging.info(f"set weight = 0 finished, instances: {instance_ids}")
-    time.sleep(10)
-    # 2.移除slb
-    utils.remove_backend_servers_with_slbs(client=slb_client,
-                                           slb_id_list=longvideo_config.slb_id_list,
-                                           instances=instance_ids)
-    # 3. 停止机器
-    utils.stop_instances(client=create_client, instance_ids=instance_ids)
-    logging.info(f"instances stop finished, instances: {instance_ids}")
-    # 4. 判断机器运行状态是否为Stopped
-    while True:
-        response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
-        if response.get('Code') is None:
-            instances_list = response.get('InstanceStatuses').get('InstanceStatus')
-            # logging.info(instances_list)
-            stopped_instances = [instance.get('InstanceId') for instance in instances_list
-                                 if instance.get('Status') == 'Stopped']
-            if len(stopped_instances) == len(instance_ids):
-                logging.info(f"instances stopped status set success, instances: {stopped_instances}")
-                break
-            else:
-                logging.info(f"stopped instances count = {len(stopped_instances)}, instances: {stopped_instances}")
-                time.sleep(5)
-        else:
-            logging.error(response)
-            sys.exit()
-    # 5. 释放机器
-    response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
-    if response.get('Code') is None:
-        logging.info(f"release instances finished, instances: {stopped_instances}")
-    else:
-        logging.error(f"release instances fail!!!")
-        sys.exit()
-
-
-def main():
-    try:
-        version = sys.argv[1]
-        slb_client = utils.connect_client(access_key_id=longvideo_config.slb_client_params['access_key_id'],
-                                          access_key_secret=longvideo_config.slb_client_params['access_key_secret'],
-                                          region_id=longvideo_config.slb_client_params['region_id'])
-        create_client = utils.connect_client(access_key_id=longvideo_config.create_client_params['access_key_id'],
-                                             access_key_secret=longvideo_config.create_client_params['access_key_secret'],
-                                             region_id=longvideo_config.create_client_params['region_id'])
-
-        # 1. 获取slb下所有机器
-        online_instance_ids = utils.get_instance_ids(client=slb_client, slb_id=longvideo_config.slb_id_list[0])
-        # online_instance_ids = online_instance_ids[:2]
-        # online_instance_ids = online_instance_ids[2:]
-        online_instance_count = len(online_instance_ids)
-        logging.info(f"online instance count: {online_instance_count}.")
-        logging.info(f"online instance ids: {online_instance_ids}")
-
-        # 2. 扩容机器并启动新服务 扩容数量:线上机器数量//2
-        logging.info(f"ess instances start ...")
-        ess_instance_count = online_instance_count // 2
-        logging.info(f"ess instance count: {ess_instance_count}")
-        asyncio.run(ess_instance(create_client=create_client, slb_client=slb_client,
-                                 ess_count=ess_instance_count, max_workers=2, version=version))
-        logging.info(f"ess instances end!")
-
-        # 3. 原有机器进行更新
-        logging.info(f"update online instances start ...")
-        asyncio.run(update_instance(create_client=create_client, slb_client=slb_client,
-                                    instance_ids=online_instance_ids, max_workers=8, version=version))
-        logging.info(f"update online instances end!")
-
-        # 4. 停止并释放扩容机器
-        logging.info(f"stop & release instances start ...")
-        remove_instances(create_client=create_client, slb_client=slb_client, instance_ids=ess_instances)
-        logging.info(f"stop & release instances end!")
-    except Exception as e:
-        logging.error(e)
-        sys.exit()
-
-
-if __name__ == '__main__':
-    main()

+ 1 - 1
longvideo_update_e.py → longvideo_update_k.py

@@ -55,7 +55,7 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers, versio
     ess_instance_ids = utils.create_multiple_instances(
         amount=ess_count,
         client=create_client,
-        **longvideo_config.instance_config_e,
+        **longvideo_config.instance_config_k,
     )
     time.sleep(60)