標籤:

分散式系統架構實戰--簡易版支付系統怎麼部署?

包括運行環境與異常處理問題


一、前期準備

1、MySQL資料庫的安裝:MySQL-5.6.22,自行安裝

2、Dubbo視頻教程--基礎篇--第03節--ZooKeeper註冊中心安裝

3、Dubbo視頻教程--基礎篇--第06節--Dubbo管理控制台的安裝

4、Dubbo視頻教程--基礎篇--第10節--Dubbo監控中心的介紹與簡易監控中心的安裝

5、持續集成管理平台(SVN、Nexus、Maven、Hudson)的安裝:

Dubbo視頻教程--基礎篇--第11節至18節

6、Dubbo視頻教程--高級篇--第21節--ActiveMQ的安裝與使用

7、Dubbo視頻教程--高級篇--第22節--Redis的安裝與使用

8、Dubbo視頻教程--高級篇--第23節--FastDFS分散式文件系統的安裝與使用

二、對部署環境進行規劃

創建資料庫

資料庫編碼為:UTF-8

資料庫引擎為:InnoDB

導入「基於Dubbo的分散式系統架構視頻教程--簡易版支付系統源碼.rar」中的

「資料庫--edu_simple_pay.rar」中的「edu_simple_pay.sql」

調整公共配置文件

應用部署前期準備

1、common工程構建、發布到Maven私有庫

尤其注意pay-common-config工程的構建(配置文件修改後需要重新構建,引用處也要重新構建)

2、facade工程構建、發布到Maven私有庫

部署服務

1、規劃好服務部署目錄,準備好服務管理腳本

/home/wusc/edu/service/account/service-account.sh

#!/bin/sh

## java env

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

export JRE_HOME=$JAVA_HOME/jre

## you just need to change this param name

APP_NAME=account

SERVICE_DIR=/home/wusc/edu/service/$APP_NAME

SERVICE_NAME=pay-service-$APP_NAME

JAR_NAME=$SERVICE_NAME.jar

PID=$SERVICE_NAME.pid

cd $SERVICE_DIR

case "$1" in

start)

nohup $JRE_HOME/bin/java -Xms128m -Xmx512m -jar $JAR_NAME &>/dev/null 2&>1

echo $! &> $SERVICE_DIR/$PID

echo "=== start $SERVICE_NAME"

;;

stop)

kill `cat $SERVICE_DIR/$PID`

rm -rf $SERVICE_DIR/$PID

echo "=== stop $SERVICE_NAME"

sleep 5

P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk "{print $2}"`

if [ "$P_ID" == "" ]; then

echo "=== $SERVICE_NAME process not exists or stop success"

else

echo "=== $SERVICE_NAME process pid is:$P_ID"

echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"

kill -9 $P_ID

fi

;;

restart)

$0 stop

sleep 2

$0 start

echo "=== restart $SERVICE_NAME"

;;

*)

## restart

$0 stop

sleep 2

$0 start

;;

esac

exit 0

2、使用Hudson來自動化部署服務

3、通過Dubbo管控台檢查各服務是否都部署成功

部署Web應用

1、規劃好Web應用部署目錄、埠、腳本

bank-receive-tomcat 8081

boss-tomcat 8082

gateway-tomcat 8083

notify-receive-tomcat 8084

portal-tomcat 8085

shop-tomcat 8086

trade-tomcat 8087

/home/wusc/edu/web/bank-receive-tomcat/restart.sh

## java env

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

export JRE_HOME=$JAVA_HOME/jre

## restart tomcat

current_dir=$(cd `dirname $0`; pwd)

echo "=== current_dir is:$current_dir"

$current_dir/bin/shutdown.sh

sleep 3

rm -rf $current_dir/webapps/*/

sleep 2

$current_dir/bin/startup.sh

部署APP

/home/wusc/edu/app/queue-notify/app-queue-notify.sh

#!/bin/sh

## java env

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

export JRE_HOME=$JAVA_HOME/jre

## you only need to change next two parameters value

APP_DIR=/home/wusc/edu/app/queue-notify

APP_NAME=pay-app-queue-notify

JAR_NAME=$APP_NAME.jar

cd $APP_DIR

## check app process weather exists

process=`ps aux | grep -w "$APP_NAME" | grep -v grep`

if [ "$process" == "" ]; then

echo "=== $APP_NAME process not exists"

else

echo "=== $APP_NAME process exists"

echo "=== $APP_NAME process is : $process"

## get PID by process name

P_ID=`ps -ef | grep -w "$APP_NAME" | grep -v "grep" | awk "{print $2}"`

echo "=== $APP_NAME process PID is:$P_ID"

echo "=== begin kill $APP_NAME process"

kill $P_ID

sleep 3

P_ID=`ps -ef | grep -w "$APP_NAME" | grep -v "grep" | awk "{print $2}"`

if [ "$P_ID" == "" ]; then

echo "=== $APP_NAME process stop success"

else

echo "=== $APP_NAME process kill failed, PID is:$P_ID"

echo "=== begin kill -9 $APP_NAME process, PID is:$P_ID"

sleep 3

kill -9 $P_ID

fi

fi

sleep 2

echo "=== begin start $APP_NAME"

$JRE_HOME/bin/java -Xms128m -Xmx512m -jar $APP_DIR/$JAR_NAME &>/dev/null 2&>1

部署定時任務

定時任務的部署與調用分離

/home/wusc/edu/timer/report/timer-report.sh

#!/bin/sh

## java env

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

export JRE_HOME=$JAVA_HOME/jre

## you only need to chage next two line value

SERVICE_DIR=/home/wusc/edu/timer/report

APP_NAME=pay-timer-report

JAR_NAME=$APP_NAME.jar

sleep 1

echo "=== invoke task, please wait"

$JRE_HOME/bin/java -jar $SERVICE_DIR/$JAR_NAME &>/dev/null 2&>1

## until process stop to print log

while true

do

process=`ps aux | grep $APP_NAME | grep -v grep`;

if [ "$process" == "" ]; then

sleep 1;

echo "=== task complete";

sleep 3;

break;

else

echo "=== process is running, please wait";

sleep 10;

continue;

fi

done

分散式系統架構實戰--簡易版支付系統部署(單節點)-龍果學院


推薦閱讀:

為什麼有關MongoDB採用B樹索引,以及Mysql B+樹做索引?
python 如何連同依賴打包發布以及python的構建工具?
大家常用哪個MySQL客戶端工具,除了命令行那個mysql之外?

TAG:MySQL | dubbo |