Dubbo+Zookeeper架构—基础篇6—在Linux操作系统上手工部署Dubbo服务

1、环境变量配置

 Java环境变量

$ vi /etc/profile


## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/li/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

# 是配置生效
$ source /etc/profile

2、部署目录规范

目的是为了便于管理,后续的迁移或者改变都很好管理。命名冲突的问题也不会出现

3:部署Dubbo服务的方式有两种

将Dubbo服务的jar包上传到服务器,并且Dubbo所应用的lib下的依赖上传到服务器。

  • 在Linux操作系统上手工部署Dubbo服务

手工维护Dubbo服务是最简单的,只需要将Dubbo服务的jar包上传到服务器,使用命令 java -jar xxx.jar 启动jar包就可以。

  • 自定义Dubbo服务维护的Shell脚本 (建议使用)

脚本命名规范:

/home/studyDemo/wusc/edu/service/XXX/service-XXX.sh

例如:

/home/studyDemo/wusc/edu/service/user/service-user.sh

编写xshell脚本

#!/bin/sh
## java env
export JAVA_HOME=/opt/jdk/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
 
## service name 脚本规范通用性,服务后面的一段名称
APP_NAME=user
 
SERVICE_DIR=/home/studyDemo/wusc/edu/service/$APP_NAME
SERVICE_NAME=edu-service-$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
 
cd $SERVICE_DIR
 
case "$1" in
 
# 启动脚本
    start)
        # (nohup XXX &)守护进程,启动jar包,相当于java -jar XXX一样效果   
        #(-Xms256m -Xmx512m)内存调优
        # (>/dev/null)因为项目已经有输出日志了,/dev/null相当于linux的黑洞什么都可以往里面放,这里等于把再一次输出的日志放里面,就保证了只有一份日志输出,没有这个的话,就多处一个nohup.out日志输出文件,就变成两份日志输出了
        nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
        echo $! > $SERVICE_DIR/$PID
        echo "=== start $SERVICE_NAME"
        ;;
 
# 关闭脚本
    stop)
        # 删除进程 通过上面生成的pid
        kill `cat $SERVICE_DIR/$PID`
        # 杀掉进程后,再把这个pid文件删除
        rm -rf $SERVICE_DIR/$PID
        # 输出=== stop XXX
        echo "=== stop $SERVICE_NAME"
         # 睡几秒
        sleep 5
		## -w代表全匹配,不加则代表模糊匹配,这样就不会出现杀错的情况
		## edu-service-aa.jar
		## edu-service-aa-bb.jar
        P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            # 如果那个pid为空,杀掉了,则打印成功杀掉的log日志
            echo "=== $SERVICE_NAME process not exists or stop success"
        else
            # 如果还没有杀掉,则输出log日志提示,然后进行强杀kill
            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

上面的脚本里面加了一些注释说明,使用的时候有报错的话可能是注释的问题,注释格式错了。

  • 启动脚本
# 执行脚本start模块启动jar包
[root@edu-procider-01 user]# ./service-user.sh start
=== start edu-service-user

如果提示权限不够,则解决方法是先使用chmod命令对shell脚本赋予权限,再执行

# 运行脚本提示权限不够
[root@edu-procider-01 user]# ./service-user.sh start
-bash: ./service-user.sh: 权限不够

# 使用chmod命令
[root@edu-procider-01 user]# chmod 777 ./service-user.sh 

# 再启动
[root@edu-procider-01 user]# ./service-user.sh start
=== start edu-service-user

再次查看,发现多了一个pid文件,就是进程的id,等stop的时候,就通过这个pid去杀掉这个进程。

[root@edu-procider-01 user]# ls
edu-service-user.jar  edu-service-user.pid  lib  logs  service-user.sh

查看控制台,服务已经启动

  • 关闭进程
[root@edu-procider-01 user]# ./service-user.sh stop

=== stop edu-service-user
=== edu-service-user process not exists or stop success

查看控制台,发现没有该服务了

服务提供者已经启动,我们把服务消费者,打成war包,放在linux中的tomcat运行起来。

打包的时候要注意:web过程所依赖的其他项目,要先构建成jar在本地,再打包的时候才不能出错。

上传到服务器tomcat下面webapps中。

两个服务器:

centOS1:服务提供者、zookeeper注册中心、dubbo控制台

centOS2:服务消费者

注意:如果只启动了zookeeper注册中心、控制台、服务消费者,那么再控制台是看不到服务消费者的信息的,需要启动服务提供者才能看到。

1:启动所以东西:有些不清楚的东西可以看之前的文章,比如服务提供者jar包脚本启动

centOS1:服务提供者、zookeeper注册中心、dubbo控制台都要启动

centOS2:服务消费者启动

消费者启动

然后查看控制台:

效果:

猜你喜欢

转载自blog.csdn.net/weixin_40663800/article/details/83014264
今日推荐