|
@@ -0,0 +1,76 @@
|
|
|
+import logging
|
|
|
+import time
|
|
|
+import docker
|
|
|
+import longvideo_config
|
|
|
+import utils
|
|
|
+from longvideo_update import server_health_check
|
|
|
+
|
|
|
+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')
|
|
|
+
|
|
|
+
|
|
|
+def server_restart(alb_client, instance_id, image_name):
|
|
|
+ try:
|
|
|
+ logging.info(f"Restarting instance: {instance_id}")
|
|
|
+
|
|
|
+ ip_address = utils.get_ip_address(client=alb_client, instance_id=instance_id)
|
|
|
+ logging.info(f"IP address: {instance_id}/{ip_address}")
|
|
|
+
|
|
|
+
|
|
|
+ utils.set_instance_weight_process_with_alb(client=alb_client,
|
|
|
+ slb_id_list=longvideo_config.server_group_id_list,
|
|
|
+ instance_id_list=instance_id,
|
|
|
+ weight_list=[(0, 15)])
|
|
|
+ logging.info(f"Set weight to 0 for instance: {instance_id}")
|
|
|
+
|
|
|
+
|
|
|
+ docker_client = docker.DockerClient(base_url=f'tcp://{ip_address}:2375', timeout=60)
|
|
|
+ container = docker_client.containers.get(image_name)
|
|
|
+ container.restart()
|
|
|
+ logging.info("Docker restart finished.")
|
|
|
+
|
|
|
+
|
|
|
+ server_health_check(alb_client, instance_id)
|
|
|
+ time.sleep(20)
|
|
|
+ logging.info("Health check finished.")
|
|
|
+
|
|
|
+
|
|
|
+ add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
|
|
|
+ utils.set_instance_weight_process_with_alb(alb_client,
|
|
|
+ longvideo_config.server_group_id_list,
|
|
|
+ instance_id,
|
|
|
+ add_weight_list)
|
|
|
+ logging.info(f"Server restart finished, instance: {instance_id}/{ip_address}")
|
|
|
+ except Exception as e:
|
|
|
+ logging.error(f"Server restart failed, instance: {instance_id}")
|
|
|
+ logging.error(e)
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ try:
|
|
|
+ alb_client = utils.connect_alb_client(
|
|
|
+ access_key_id=longvideo_config.alb_client_params['access_key_id'],
|
|
|
+ access_key_secret=longvideo_config.alb_client_params['access_key_secret']
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+ online_instance_ids = utils.get_instance_ids(client=alb_client,
|
|
|
+ server_group_id=longvideo_config.server_group_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}")
|
|
|
+
|
|
|
+
|
|
|
+ image_name = 'longvideoapi'
|
|
|
+ for i, instance_id in enumerate(online_instance_ids):
|
|
|
+ server_restart(alb_client=alb_client, instance_id=instance_id, image_name=image_name)
|
|
|
+ logging.info(f"Restart progress: {i + 1}/{online_instance_count}")
|
|
|
+ logging.info("All servers restarted successfully!")
|
|
|
+ except Exception as e:
|
|
|
+ logging.error("An error occurred during the main execution.")
|
|
|
+ logging.error(e)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|