panwang 2 年之前
父節點
當前提交
b1c1928927

+ 4 - 0
longvideoapi/server/clear_nginx_log.sh

@@ -0,0 +1,4 @@
+#!/bin/sh
+echo  " "> /datalog/nginx/access_log.log
+rm  -rf  /datalog/nginx/longvideoapi.log
+rm  -rf  /datalog/nginx/longvideopai.log

+ 42 - 0
longvideoapi/server/docker.service

@@ -0,0 +1,42 @@
+[Unit]
+Description=Docker Application Container Engine
+Documentation=http://docs.docker.com
+After=network.target
+Wants=docker-storage-setup.service
+Requires=docker-cleanup.timer
+
+[Service]
+Type=notify
+NotifyAccess=main
+EnvironmentFile=-/run/containers/registries.conf
+EnvironmentFile=-/etc/sysconfig/docker
+EnvironmentFile=-/etc/sysconfig/docker-storage
+EnvironmentFile=-/etc/sysconfig/docker-network
+Environment=GOTRACEBACK=crash
+Environment=DOCKER_HTTP_HOST_COMPAT=1
+Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
+ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
+          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
+          --default-runtime=docker-runc \
+          --exec-opt native.cgroupdriver=systemd \
+          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
+          --init-path=/usr/libexec/docker/docker-init-current \
+          --seccomp-profile=/etc/docker/seccomp.json \
+          --graph  /datalog/docker  \
+          $OPTIONS \
+          $DOCKER_STORAGE_OPTIONS \
+          $DOCKER_NETWORK_OPTIONS \
+          $ADD_REGISTRY \
+          $BLOCK_REGISTRY \
+          $INSECURE_REGISTRY \
+	  $REGISTRIES
+ExecReload=/bin/kill -s HUP $MAINPID
+LimitNOFILE=1048576
+LimitNPROC=1048576
+LimitCORE=infinity
+TimeoutStartSec=0
+Restart=on-abnormal
+KillMode=process
+
+[Install]
+WantedBy=multi-user.target

+ 6 - 3
longvideoapi/server/ess-instance-vlogapi.py

@@ -1,6 +1,6 @@
 # #!/usr/bin/env python
 # #!/usr/bin/env python
 # #coding=utf-8
 # #coding=utf-8
-# 扩容
+#
 import  json
 import  json
 import logging
 import logging
 import time
 import time
@@ -138,7 +138,7 @@ def build_request():
       {
       {
         "Key": "ecs",
         "Key": "ecs",
         "Value": "vlogapi.prod"
         "Value": "vlogapi.prod"
-      }
+      } 
     ])
     ])
     return request
     return request
 
 
@@ -167,4 +167,7 @@ def _send_request(request):
 if __name__ == '__main__':
 if __name__ == '__main__':
     print ("Start Create Instances")
     print ("Start Create Instances")
     # 创建ECS实例并启动。
     # 创建ECS实例并启动。
-    create_multiple_instances()
+    create_multiple_instances()
+
+
+

+ 100 - 0
longvideoapi/server/longvideoapi_docker.sh

@@ -0,0 +1,100 @@
+#/bin/bash
+cid=0
+httpcode=000
+check_docker(){
+	echo "-----------------------------"
+   	echo "检查Docker安装环境......"
+	echo "-----------------------------"
+  	 docker -v
+	if [ $? -eq  0 ]; then
+		echo "检查到Docker已安装!"
+		echo "-----------------------------"
+		service docker restart
+		sleep  5
+	else
+		echo "安装docker环境..."
+		echo "-----------------------------"
+		yum install  docker     -y
+		echo "安装docker环境...安装完成!"
+		echo "-----------------------------"
+    service docker start
+		sleep  5
+	fi
+}
+check_up(){
+	echo "-----------------------------"
+	echo "正在确认服务是否完成启动!"
+	while  [ $httpcode != 200 ]
+	do
+		httpcode=`curl -I -m 10 -o /dev/null -s -w %{http_code}  http://localhost:8182/longvideoapi/test`
+       		echo  -en  ". "
+       		sleep 2
+   	 done
+	echo  " "
+	echo   “请求返回值:  $httpcode  服务器启动完成”
+	echo "-----------------------------"  
+
+
+
+}
+
+
+
+stop(){
+         python  /home/sh/update_longvideoapi.py  0
+	echo "-----------------------------"
+	echo "检查vlogapi容器是否存在"
+	echo "-----------------------------"
+
+      
+        docker  stop  $(docker ps -a|grep -v IMAGE|awk  '{print $1}')
+        docker  rm  -f $(docker ps -a|grep -v IMAGE|awk  '{print $1}')
+        docker  rmi  registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/vlogapi:latest
+}
+start(){
+	cid=`docker ps |grep  "vlogapi:latest"|grep -v grep|awk  '{print $1}'`
+	if [ $cid  ];then
+		echo "vlogapi already started !"
+		echo "-----------------------------"
+	else
+
+		docker login --username=stuuudys --password=Qingqu@2019   registry-vpc.cn-hangzhou.aliyuncs.com
+		#docker run --cap-add=SYS_PTRACE  -d -it  -p 8080:8185 --restart=always  registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/longvideoapi:latest
+                docker run --cap-add=SYS_PTRACE  -d -it   --name  vlogapi   --restart=always --network host    registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/vlogapi:latest
+	       check_up
+               python  /home/sh/slb_scan.py
+	
+	fi
+
+}
+
+
+
+  case "$1" in
+   'start')
+      start
+      ;;
+   'stop')
+     stop
+     ;;
+   'restart')
+     stop
+     start
+     ;;
+   'rollback')
+     rollback
+     ;;
+   'deploy')
+     deploy
+     ;;
+   'status')
+     check_up
+     ;;
+   'info')
+     info
+     ;;
+  *)
+     echo "Usage: $0 {start|stop|restart|rollback|deploy|status|info}"
+     exit 1
+;;
+esac

+ 181 - 0
longvideoapi/server/longvideoapi_update.py

@@ -0,0 +1,181 @@
+#!/u:sr/bin/env python
+#coding=utf-8
+#edite  panwang
+import docker
+import sys
+import  requests
+import json
+import queue
+import threading
+from aliyunsdkcore import client
+from aliyunsdkess.request.v20140828.DescribeScalingInstancesRequest import DescribeScalingInstancesRequest
+from aliyunsdkecs.request.v20140526.DescribeNetworkInterfacesRequest import DescribeNetworkInterfacesRequest
+from aliyunsdkcore.request import CommonRequest
+from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
+from aliyunsdkslb.request.v20140515.DescribeLoadBalancerAttributeRequest import DescribeLoadBalancerAttributeRequest
+import time
+
+
+AccessKey = 'LTAIuPbTPL3LDDKN'
+AccessSecret = 'ORcNedKwWuwVtcq4IRFtUDZgS0b1le'
+RegionId = 'cn-hangzhou'
+clt = client.AcsClient (AccessKey, AccessSecret, RegionId)
+#stress
+#slb_id = 'lb-bp12usgpoh04qsa6pw42r'
+#longvidleoapi
+#id_2 = 'lb-bp1lktzqe3mksoj8whjdf'
+id_2 = 'lb-bp1qk9mkvjtundlzz7owm'
+id_3 = 'lb-bp1by407qxe4y7bkvye27'
+id_4 = 'lb-bp1akia6vlguiwg4znaq8'
+id_5 = 'lb-bp1pj2v06ladvgftgxcp0'
+class MyThread (threading.Thread):
+    def __init__(self, func):
+        threading.Thread.__init__ (self)
+        
+        self.func = func
+
+    def run(self):
+        self.func ()
+
+#健康检查
+def  checkHealth(ipadd):
+    while  True:
+        health_url = 'http://%s:8080/longvideoapi/test' %(ipadd)
+        header = {"Content-Type":"application/json"}
+        try:
+            health_code = requests.get(health_url).status_code
+        except  Exception  as  e:
+           continue
+        if  health_code == 200:
+            return  False
+            
+#服务更新完之后逐步修改服务器的权重值,直接加载100会出现502。权重值每次增加10,每2s修改一次
+def setInstanceWeightProcess(instance_id):
+    for  i in range(1,6):
+        weight = i*20
+        setWeight(id_2,instance_id,weight)
+        setWeight(id_3,instance_id,weight)
+        setWeight(id_4,instance_id,weight)
+        setWeight(id_5,instance_id,weight)
+        time.sleep(5)
+
+#设置权重 instance_id :服务器id,weight:权重值
+def setWeight(slb_id,instance_id ,weight):
+
+    BackendServers = [{"ServerId": instance_id, "Weight": weight}]
+
+    request = CommonRequest ()
+    request.set_accept_format ('json')
+    request.set_domain ('slb.aliyuncs.com')
+    request.set_version ('2014-05-15')
+    request.set_method ('POST')
+    request.set_action_name ('SetBackendServers')
+    request.add_query_param ('BackendServers', BackendServers)
+    request.add_query_param ('LoadBalancerId', slb_id)
+    try:
+        response = clt.do_action (request)
+    except Exception as e:
+        print (e)
+#获取slb下所有服务器信息
+def  getInstanceId(slb_id):
+    request = DescribeLoadBalancerAttributeRequest()
+    request.set_accept_format('json')
+    request.set_LoadBalancerId(slb_id)
+    response = clt.do_action_with_exception(request)
+    return json.loads (response)
+
+#获取实例IP地址
+def  getIpadd(instance_id):
+    request = DescribeNetworkInterfacesRequest()
+    request.set_accept_format('json')
+    request.set_InstanceId(instance_id)
+    response = clt.do_action_with_exception(request)
+    request_content = json.loads(response)
+    IpAddr  = request_content['NetworkInterfaceSets']['NetworkInterfaceSet'][0]['PrivateIpAddress']
+    return  IpAddr
+
+#更新服务
+def  update():
+    time.sleep(10)
+    global success_count
+    apps = 'vlogapi'
+    version = sys.argv[1]
+    registry = 'registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/vlogapi:{}'.format(version)
+    while  not q2.empty():
+        instance_id = q2.get()
+        ipadd = getIpadd(instance_id)
+        print("服务器信息:" + "%s/%s" %(instance_id, ipadd))
+        client = docker.DockerClient(base_url='tcp://%s:2375'  %(ipadd),timeout=60 )
+        try:
+        #更新前移除旧的容器
+            id = client.containers.get(apps)
+            id.remove(force = True)
+
+        except Exception as e:
+            print("容器不存在或者无法删除当前容器")
+        try:
+            #更新前删除旧的镜像
+            images = client.images.list(all)
+            
+            for  i in range(len(images)):
+              if images[i]:
+                 client.images.remove(force=True, image=images[i].tags[0])
+                 time.sleep(2)
+            #images = client.images.get(registry)
+            #client.images.remove(force=True, image=registry)
+        except Exception as e:
+            print(e)
+            print("镜像不存在,无法获取到镜像ID")
+            sys.exit(0)
+        try:
+            #登录镜像仓库
+            client.login(username='stuuudys' ,password='Qingqu@2019', registry='registry-vpc.cn-hangzhou.aliyuncs.com')
+            #启动一个容器
+            client.containers.run(registry, detach = True, cap_add = 'SYS_PTRACE', network_mode = 'host', name = apps,volumes={'/datalog/': {'bind': '/datalog/', 'mode': 'rw'}})
+            checkHealth(ipadd)
+            print("%s :权重修改中......" %(ipadd))
+
+            setInstanceWeightProcess(instance_id)
+            success_count = success_count + 1
+            print("更新进度" + "%s/%s"  %(success_count, total))
+        except Exception as e:
+            raise e
+            sys.exit()#容器启动失败立即退出更新
+
+if __name__ == '__main__':
+
+
+    #更新完成计数
+    success_count = 0
+    threads = []
+    thread_num = 1
+    res = getInstanceId (id_2)
+    #slb下服务器总数
+    total = len(res["BackendServers"]["BackendServer"])
+    q1 = queue.Queue()
+    q2 = queue.Queue()
+    if res["BackendServers"]["BackendServer"]:
+        for i in range ((len (res["BackendServers"]["BackendServer"]))):
+            instance_id = res["BackendServers"]["BackendServer"][i]["ServerId"]
+            q1.put(instance_id)            
+
+    while not  q1.empty():
+        for i in range (thread_num ):
+            if q1.empty():
+               break
+            instance_id = q1.get ()
+            setWeight (id_2,instance_id, 0)
+            setWeight (id_3,instance_id, 0)
+            setWeight (id_4,instance_id, 0)
+            setWeight (id_5,instance_id, 0)
+
+            q2.put(instance_id)
+        for i in range (thread_num ):
+        # 开启线程
+            thread = MyThread (update)
+            thread.start ()
+            threads.append(thread)
+        for thread in threads:
+            thread.join ()
+    
+

+ 19 - 0
longvideoapi/server/python3_install.sh

@@ -0,0 +1,19 @@
+
+#bin/bash!
+yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel -y
+cd /usr/local/src
+wget https://test-art-h5.oss-cn-hangzhou.aliyuncs.com/Python-3.7.3.tgz
+tar -zxf /usr/local/src/Python-3.7.3.tgz
+cd Python-3.7.3
+./configure
+make  && make install
+mv /usr/bin/python /usr/bin/python.bak
+ln -s /usr/local/bin/python3 /usr/bin/python
+mv /usr/bin/pip /usr/bin/pip.bak
+ln -s /usr/local/bin/pip3 /usr/bin/pip
+sed -i  '1c  #! /usr/bin/python2.7'    /usr/libexec/urlgrabber-ext-down
+sed -i  '1c  #! /usr/bin/python2.7'    /usr/bin/yum
+
+pip install aliyun-python-sdk-core-v3
+pip install aliyun-python-sdk-ecs
+pip install aliyun-python-sdk-slb

+ 4 - 0
longvideoapi/server/restart-vlogapi.sh

@@ -0,0 +1,4 @@
+#/bin/bash
+cid=`docker ps   -a |grep vlogapi|grep -v grep|awk  '{print $1}'`
+docker  stop  $cid
+docker  start $cid

+ 138 - 0
longvideoapi/server/slb_scan.py

@@ -0,0 +1,138 @@
+#!/usr/bin/python
+# coding: utf-8
+import sys
+from aliyunsdkcore import client
+from aliyunsdkcore.client import AcsClient
+from aliyunsdkcore.request import CommonRequest
+from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
+from aliyunsdkslb.request.v20140515.DescribeLoadBalancerAttributeRequest import DescribeLoadBalancerAttributeRequest
+import json
+import socket
+import  time
+
+AccessKey = 'LTAIuPbTPL3LDDKN'
+AccessSecret = 'ORcNedKwWuwVtcq4IRFtUDZgS0b1le'
+RegionId = 'cn-hangzhou'
+# 压力测试环境   SlbId
+#SlbId = 'lb-bp12usgpoh04qsa6pw42r'
+#longvideoapi-online  SlbId
+SlbId = 'lb-bp1d6hp2ctotgt870miav'
+
+clt = client.AcsClient (AccessKey, AccessSecret, RegionId)
+Host = socket.gethostname ()
+
+
+exit = -1
+def setServerWeight(BackendServers):
+    request = CommonRequest ()
+    request.set_accept_format ('json')
+    request.set_domain ('slb.aliyuncs.com')
+    request.set_version ('2014-05-15')
+    request.set_method ('POST')
+    request.set_action_name ('SetBackendServers')
+    request.add_query_param ('BackendServers', BackendServers)
+    request.add_query_param ('LoadBalancerId', SlbId)
+    # print   BackendServers
+    response = clt.do_action (request)
+    return json.loads (response)
+
+
+def get_host_ip():
+    """
+    查询本机ip地址
+    :return: ip
+    """
+    try:
+        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        s.connect(('8.8.8.8', 80))
+        ip = s.getsockname()[0]
+        #ip = "192.168.201.80"
+    finally:
+        s.close()
+        return ip
+
+
+def  query_slb(instance_id):
+    global exit
+    request = DescribeLoadBalancerAttributeRequest ()
+    request.set_accept_format ('json')
+    request.set_LoadBalancerId (SlbId)
+    times = 0
+    while  times < 300:
+        try:
+            response = clt.do_action_with_exception (request)
+            res_result = json.loads(response)
+
+            if  res_result["BackendServers"]["BackendServer"]:
+                for  i  in range(len(res_result["BackendServers"]["BackendServer"])):
+                    slb_instance_id = res_result["BackendServers"]["BackendServer"][i]["ServerId"]
+                    if  instance_id == slb_instance_id :
+                        print("服务器已经挂载")
+                        exit = 1
+            if  exit == 1:
+                break
+            time.sleep(2)
+            times += 1
+        except Exception as e:
+            print(e)
+            print("负载均衡信息获取失败")
+
+    return   res_result
+
+
+if __name__ == "__main__":
+
+    ip = get_host_ip()
+
+    ##获取instarnceid
+    ip_add = []
+    ip_add.append(ip)
+    request = DescribeInstancesRequest ()
+    request.set_PrivateIpAddresses (ip_add)
+    response = clt.do_action_with_exception (request)
+    #print(response)
+    result = json.loads(response)
+    instance_id = result["Instances"]["Instance"][0]["InstanceId"]
+    print(instance_id)
+    back_servers = [{"ServerId": '', "Weight": ''}]
+    back_servers[0]["ServerId"] = instance_id
+    query_slb (instance_id)
+    print(exit)
+
+
+    if  exit == 1 :
+        weight = 20
+        while weight <= 100:
+            back_servers[0]["Weight"] = weight
+            print(back_servers)
+            try:
+                res_slb = setServerWeight ( back_servers)
+                request = DescribeLoadBalancerAttributeRequest ()
+                request.set_accept_format ('json')
+                request.set_LoadBalancerId (SlbId)
+                response = clt.do_action_with_exception (request)
+                res_result = json.loads (response)
+
+                if res_result["BackendServers"]["BackendServer"]:
+                    for i in range (len (res_result["BackendServers"]["BackendServer"])):
+                        slb_instance_id = res_result["BackendServers"]["BackendServer"][i]["ServerId"]
+                        if instance_id == slb_instance_id:
+                            weight_now = res_result["BackendServers"]["BackendServer"][i]["Weight"]
+                            print (weight_now)
+                if  weight == weight_now :
+                    print("权重修改成功")
+                else:
+                    print("权重修改失败,重试.......")
+                    res_slb = setServerWeight (back_servers)
+                print(res_slb["BackendServers"]["BackendServer"])
+            except:
+                print("负载均衡权重修改失败")
+            weight += 20
+            time.sleep(10)
+    else:
+        print("服务器未挂载,请尽快查看具体情况")
+
+
+
+
+

+ 82 - 0
longvideoapi/server/update_longvideoapi.py

@@ -0,0 +1,82 @@
+#!/usr/bin/python
+# coding: utf-8
+import sys
+from aliyunsdkcore import client
+from aliyunsdkcore.request import CommonRequest
+from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
+from aliyunsdkslb.request.v20140515.DescribeLoadBalancerAttributeRequest import DescribeLoadBalancerAttributeRequest
+import json
+import socket
+
+AccessKey = 'LTAIuPbTPL3LDDKN'
+AccessSecret = 'ORcNedKwWuwVtcq4IRFtUDZgS0b1le'
+RegionId = 'cn-hangzhou'
+slb_id= 'lb-bp1d6hp2ctotgt870miav'
+weight_instance = 0
+# slb_id= 'lb-bp12usgpoh04qsa6pw42r'
+
+clt = client.AcsClient (AccessKey, AccessSecret, RegionId)
+Host = socket.gethostname ()
+
+def setServerWeight(BackendServers):
+    request = CommonRequest ()
+    request.set_accept_format ('json')
+    request.set_domain ('slb.aliyuncs.com')
+    request.set_version ('2014-05-15')
+    request.set_method ('POST')
+    request.set_action_name ('SetBackendServers')
+    request.add_query_param ('BackendServers', BackendServers)
+    request.add_query_param ('LoadBalancerId', slb_id)
+    response = clt.do_action (request)
+    return json.loads (response)
+
+def get_host_ip():
+    try:
+        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        s.connect(('8.8.8.8', 80))
+        ip = s.getsockname()[0]
+        # ip = '192.168.204.111'
+    finally:
+        s.close()
+        return ip
+
+
+def  check_slb_weight(instance_id):
+    global   weight_instance
+    request = DescribeLoadBalancerAttributeRequest ()
+    request.set_accept_format ('json')
+    request.set_LoadBalancerId (slb_id)
+    response = clt.do_action_with_exception (request)
+    result= json.loads (response)
+    if  result["BackendServers"]["BackendServer"]:
+        for i  in  range(len( result["BackendServers"]["BackendServer"])):
+            if   instance_id == result["BackendServers"]["BackendServer"][i]["ServerId"]:
+                weight_instance =  result["BackendServers"]["BackendServer"][i]["Weight"]
+    return weight_instance
+if __name__ == "__main__":
+
+    ip_add = []
+    ip_add.append(get_host_ip())
+    request = DescribeInstancesRequest ()
+    #request.set_PublicIpAddresses (ip_add)
+    request.set_PrivateIpAddresses (ip_add)
+
+
+    response = clt.do_action_with_exception (request)
+    result = json.loads(response)
+    
+    instance_id = result["Instances"]["Instance"][0]["InstanceId"]
+    print(instance_id)
+    back_servers = [{"ServerId": '', "Weight": ''}]
+    back_servers[0]["ServerId"] = instance_id
+    back_servers[0]["Weight"] = sys.argv[1]
+    print(back_servers)
+
+    setServerWeight ( back_servers)
+    weight_instance = check_slb_weight(instance_id)
+    if weight_instance != back_servers[0]["Weight"]:
+        setServerWeight ( back_servers)
+
+
+
+