zoukankan      html  css  js  c++  java
  • Shell -- 通过AWS cli 和 targets_group 做流量切换部署脚本(长连接服务)

      1 #!/bin/bash
      2 
      3 who am i
      4 # 部署jar包通过cli的形式
      5 set -x
      6 
      7 #获取线上服务端口
      8 PORT=$2
      9 
     10  15 
     16 # 负载均衡目标组ID:register-targets
     17 targets_arn="arn:aws:xxxxxxxx/elbwan-prod-mqtt-001/75dd805801b1fdce"
     18 
     19 # 获取要部署的主机IP
     20 #HOST_LIST=($(echo $HOST))
     21 
     22 #项目名
     23 REMOTE_PROJECT=$1
     24 
     25 #远程JAR包存放目录
     26 REMOTE_JARDIR=/apps/project/${REMOTE_PROJECT}
     27 
     28 
     29 #远程执行用户
     30 REMOTEUSER='co_dev'
     31 
     32 # 服务器列表新增服务器都在这里面添加,因为aws ELB network loadbalance 的目标群组是instance的形式,不能通过IP的形式挂载/摘取机器所以自己建立了对应关系表
     33 list[1]="prod1,i-0dae45bcc2d4f77ad,10.78.5.55"
     34 list[2]="prod2,i-05c517e7856ef6f76,10.78.7.172"
     35 
     36 
     37 # 查看要部署的机器
     38 echo ${list[@]} 
     39 
     40 # 函数获取进程pid
     41 jarpid () {
     42   JAR_pid=`ssh ${REMOTEUSER}@${IP} ps -ef | grep "${REMOTE_JARDIR}/${REMOTE_PROJECT}.jar" | grep -v "grep"|awk '{print $2}'`
     43   if [ -z "$JAR_pid" ] ; then break ;fi
     44 }
     45   ENV=`echo "$name"| awk -F ',' '{print $1}'`
     46   ID=`echo "$name"| awk -F ',' '{print $2}'`
     47   IP=`echo "$name"| awk -F ',' '{print $3}'`
     48 
     49   # 获取编译后的包名
     50   PACKAGE=`find ./ -name ${REMOTE_PROJECT}.jar`
     51 
     52   # 从ELB找出负载均衡机器
     53   /root/.local/bin/aws elbv2 deregister-targets --target-group-arn  $targets_arn --targets Id=$ID
     54   if [ $? -eq 0 ];then
     55         i=1
     56         while [[ $i < 5 ]]
     57         do
     58         jarpid
     59         if [[ $i -eq 4 ]];then
     60                 ssh ${REMOTEUSER}@${IP}  "kill -9 $JAR_pid"
     61                 break
     62         fi
     63 
     64         ssh ${REMOTEUSER}@${IP}  "kill -15 $JAR_pid"
     65         jarpid
     66         sleep 10
     67         let i++
     68         done
     69   else
     70         echo  “ELB 摘除机器失败,请检查”
     71         exit 4
     72   fi
     73 
     74 
     75         # 远程主机备份.jar 包跟新新版本.jar包并启动
     76         scp $PACKAGE ${REMOTEUSER}@${IP}:$REMOTE_JARDIR/${REMOTE_PROJECT}.jar
     77         if [ $? -eq 0 ];then
     78                 jar_number=`ssh ${REMOTEUSER}@${IP}  find /apps/project/${REMOTE_PROJECT} -name ${REMOTE_PROJECT}.jar | wc -l`
     79                 if [ $jar_number -ge 1 ];then
     80                         echo "${REMOTE_PROJECT}.jar 版本包已经cp 到${REMOTE_PROJECT}/bin 目录下,可以正常器启动${REMOTE_PROJECT}项目"
     81                 else
     82                         echo "${REMOTE_PROJECT}.jar No such file or directory 可能maven编译失败,请检查"
     83                         exit 2
     84                 fi
     85         else
     86                 echo "${REMOTE_PROJECT}.jar   No such file or directory 远程更新jar 失败"
     87     exit 1
     88         fi
     89 
     90 
     91         # 启动jar 服务并检查端口
     92         sleep 2
     93         echo ".......................................开始启动$REMOTE_PROJECT 服务"
     94         ssh ${REMOTEUSER}@${IP} "nohup /apps/sofe/jdk1.8.0_131/bin/java -jar -Xms13g -Xmx13g -Xss512k -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:NewSize=11g -XX:MaxNewSize=11g -XX:SurvivorRatio=18 -XX:MaxDirectMemorySize=2g -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:-CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/apps/logs/grab_cycle_mqttserver/HeapDumpOnOutOfMemoryError -Dio.netty.allocator.type=pooled -Dspring.profiles.active="$ENV" ${REMOTE_JARDIR}/${REMOTE_PROJECT}.jar  >>/apps/project/${REMOTE_PROJECT}/${REMOTE_PROJECT}.log 2>&1 &"
     95         sleep 10
     96         java_pid=`ssh $REMOTEUSER@$IP ps -ef | grep "${REMOTE_JARDIR}/$REMOTE_PROJECT" | egrep -v "grep"|wc -l`
     97         if [[  $java_pid -ge 1 ]];then
     98                         echo "${REMOTE_PROJECT} startup is successful"
     99                 else
    100                         echo "${REMOTE_PROJECT}  startup is filed"
    101                         exit 3
    102         fi
    103 
    104  # 从负载均衡器注册目标主机
    105  /root/.local/bin/aws elbv2 register-targets --target-group-arn  $targets_arn --targets Id=$ID
    106  if [ $? -eq 0 ];then
    107       echo "${IP} 服务器 ${REMOTE_PROJECT} 项目部署完毕.等待4分钟注册操作下一台机器..................................."
    108       echo -e "
    
    
    "
    109       sleep 180
    110  else
    111       echo "${IP} 主机注册负载均衡失败"
    112       exit 5
    113  fi
    114 
    115 done
  • 相关阅读:
    virtualenv
    linux基础命令:
    middleware
    scrapy-redis
    kubernetes 应用快速入门
    linux expect spawn的用法
    Linux 内存分析工具—free命令
    kubeadm安装kubenetes1.15.4集群
    kubenetes基本概念和术语
    docker-machine使用
  • 原文地址:https://www.cnblogs.com/dy11/p/9995459.html
Copyright © 2011-2022 走看看