传统基于 Zookeeper、Nacos 的注册中心部署架构,部署 Dubbo 应用到虚拟机环境
传统基于 Zookeeper、Nacos 的注册中心部署架构,部署 Dubbo 应用到虚拟机环境
下图是使用 Nacos、Zookeeper 作为注册中心的典型 Dubbo 微服务部署架构。
安装 Nacos
请参考以下文档了解如何在本地 安装 Nacos。
部署应用
我们仍然以 快速开始 中的项目为例,演示应用打包部署的具体步骤。
克隆示例项目到本地:
$ git clone -b main --depth 1 https://github.com/apache/dubbo-samples
切换到示例目录:
$ cd dubbo-samples/11-quickstart
以下是两种打包部署模式:
方式一:本地进程
本地打包进程:
$ mvn clean package
启动 Dubbo 进程:
$ java -jar ./quickstart-service/target/quickstart-service-0.0.1-SNAPSHOT.jar
提示
为了程序正常运行,请确保 application.yml
文件中的注册中心地址已经正确指向你想要的注册中心。
方式二:docker容器
$ docker build -f ./Dockerfile -t quickstart
$ docker run quickstart -p port1:port2
# 对于一些端口或连接注册中心的细节要写清楚
提示
Docker 容器环境下,不同容器间用于网络通信的地址需要特别关注,因此你可能需要设置 Dubbo 进程监听或者注册到注册中心的地址,请参考以下链接了解更多内容。
有些部署场景需要动态指定服务注册的地址,如 docker bridge 网络模式下要指定注册宿主机 ip 以实现外网通信。dubbo 提供了两对启动阶段的系统属性,用于设置对外通信的ip、port地址。
- DUBBO_IP_TO_REGISTRY:注册到注册中心的 ip 地址
- DUBBO_PORT_TO_REGISTRY:注册到注册中心的 port 端口
- DUBBO_IP_TO_BIND:监听 ip 地址
- DUBBO_PORT_TO_BIND:监听 port 端口
以上四个配置项均为可选项,如不配置 dubbo 会自动获取 ip 与端口,请根据具体的部署场景灵活选择配置。 dubbo 支持多协议,如果一个应用同时暴露多个不同协议服务,且需要为每个服务单独指定 ip 或 port,请分别在以上属性前加协议前缀。 如:
- HESSIAN_DUBBO_PORT_TO_BIND:hessian 协议绑定的 port
- DUBBO_DUBBO_PORT_TO_BIND:dubbo 协议绑定的 port
- HESSIAN_DUBBO_IP_TO_REGISTRY:hessian 协议注册的 ip
- DUBBO_DUBBO_IP_TO_REGISTRY:dubbo 协议注册的 ip
PORT_TO_REGISTRY 或 IP_TO_REGISTRY 不会用作默认 PORT_TO_BIND 或 IP_TO_BIND,但是反过来是成立的。如:
- 设置
PORT_TO_REGISTRY=20881
和IP_TO_REGISTRY=30.5.97.6
,则PORT_TO_BIND
和IP_TO_BIND
不受影响 - 设置
PORT_TO_BIND=20881
和IP_TO_BIND=30.5.97.6
,则默认PORT_TO_REGISTRY=20881
且IP_TO_REGISTRY=30.5.97.6
查看部署状态
安装并运行 dubbo-control-plane,查看本地服务部署状态:
下载安装包
$ curl -L https://raw.githubusercontent.com/apache/dubbo-kubernetes/master/release/downloadDubbo.sh | sh -
$ cd dubbo-$version/bin
运行以下命令,启动 dubbo-control-plane 进程
$ ./dubbo-cp run
提示
为了 dubbo-control-plane 正常运行,请修改 conf/dubbo-cp.yml
以确保其指向你想要的注册中心。
访问 http://xxx
查看服务部署详情。
优雅上下线
在使用传统注册中心的情况下,我们需要控制实例发布到注册中心、实例从注册中心摘除的时机,以实现优雅上下线:
- 上线阶段,通过 延迟发布 机制控制实例注册到注册中心的时机,通过开启 消费端预热 确保流量缓慢的被转发到新节点上。
- 下线阶段,通过配置
prestop
确保先从注册中心摘除实例注册信息,之后再进入进程销毁过程。
在下线之前,建议调用以下 http 端口,先从注册中心摘除实例,然后再尝试停止进程
$ curl http://offline
$ sleep 10
$ kill dubbo-pid
最后修改 November 7, 2024: fix multi-protocols docs (#3058) (de52c77177a)