基于Zookeeper案例实现微服务动态注册和发现案例

zookeeper+dubbo微服务架构

 

创建provider资源

       创建dubbo provider生产者Dockerfile

root@deploy:/dockerfile/project/dubbo# cat Dockerfile
#Dubbo provider
FROM harbor.cncf.net/web/jdk:1.8.191
RUN useradd nginx
RUN apt install file netcat-traditional -y
RUN mkdir -p /usr/local/dubbo/provider
ADD dubbo-demo-provider-2.1.5/ /usr/local/dubbo/provider
ADD run_java.sh /usr/local/dubbo/provider/bin
RUN chown nginx.nginx /usr/local/dubbo -R
RUN chmod a+x /usr/local/dubbo/provider/bin/*.sh
CMD ["/usr/local/dubbo/provider/bin/run_java.sh"]

 

       配置provider生产者配置文件,填写zookeeper pod的dns地址。

       Zookeeper使用deployment控制器部署则地址为pod名称.名称空间.svc.集群名称

root@deploy:/dockerfile/project/dubbo# cat dubbo-demo-provider-2.1.5/conf/dubbo.properties
##
# Copyright 1999-2011 Alibaba Group.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##
dubbo.container=log4j,spring
dubbo.application.name=demo-provider
dubbo.application.owner=
#dubbo.registry.address=multicast://224.5.6.7:1234
dubbo.registry.address=zookeeper://zookeeper1.test.svc.cluster.local:2181 | zookeeper://zookeeper2.test.svc.cluster.local:2181 | zookeeper://zookeeper3.test.svc.cluster.local:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.monitor.protocol=registry
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.log4j.file=logs/dubbo-demo-provider.log
dubbo.log4j.level=WARN

 

       创建dubbo-provider容器运行脚本

root@deploy:/dockerfile/project/dubbo# cat run_java.sh
#!/bin/bash
su - nginx -c "/usr/local/dubbo/provider/bin/start.sh"
tail -f /usr/local/dubbo/provider/logs/dubbo-demo-provider.log

 

       创建镜像构建脚本

root@deploy:/dockerfile/project/dubbo# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.cncf.net/project/dubbo-demo-provider:${TAG} .
docker push harbor.cncf.net/project/dubbo-demo-provider:${TAG}

 

       创建生产者k8s资源清单文件

root@deploy:/dockerfile/project/dubbo# cat provider.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
app: dubbo-provider
name: dubbo-provider-deployment
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: dubbo-provider
template:
metadata:
labels:
app: dubbo-provider
spec:
containers:
- name: dubbo-provider-container
image: harbor.cncf.net/project/dubbo-demo-provider:1.0.3
imagePullPolicy: Always
ports:
- containerPort: 20880
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
labels:
app: dubbo-provider
name: dubbo-provider-spec
namespace: test
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 20880
#nodePort: 30001
selector:
app: dubbo-provider

 

  查看运行状态

  

  查看运行日志

root@deploy:/dockerfile/project/dubbo# kubectl logs -f dubbo-provider-deployment-579df8dd57-m8znm

      

查看在zookeeper注册

 

创建consumer资源

       创建consumer dockerfile镜像

root@deploy:/dockerfile/project/dubbo/consumer# cat Dockerfile
FROM harbor.cncf.net/web/jdk:1.8.191
RUN useradd nginx
RUN apt install file -y
RUN mkdir -p /usr/local/dubbo/consumer
ADD dubbo-demo-consumer-2.1.5 /usr/local/dubbo/consumer
ADD run_java.sh /usr/local/dubbo/consumer/bin
RUN chown nginx.nginx /usr/local/dubbo -R
RUN chmod a+x /usr/local/dubbo/consumer/bin/*.sh
CMD ["/usr/local/dubbo/consumer/bin/run_java.sh"]

 

创建镜像构建脚本

root@deploy:/dockerfile/project/dubbo/consumer# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.cncf.net/project/dubbo-demo-consumer:${TAG} .
docker push harbor.cncf.net/project/dubbo-demo-consumer:${TAG}

 

配置dubbo consumer配置文件

root@deploy:/dockerfile/project/dubbo/consumer# cat dubbo-demo-consumer-2.1.5/conf/dubbo.properties
##
# Copyright 1999-2011 Alibaba Group.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##
dubbo.container=log4j,spring
dubbo.application.name=demo-consumer
dubbo.application.owner=
#dubbo.registry.address=multicast://224.5.6.7:1234
dubbo.registry.address=zookeeper://zookeeper1.test.svc.cluster.local:2181 | zookeeper://zookeeper2.test.svc.cluster.local:2181 | zookeeper://zookeeper3.test.svc.cluster.local:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.monitor.protocol=registry
dubbo.log4j.file=logs/dubbo-demo-consumer.log
dubbo.log4j.level=WARN

 

创建dubbo consumer启动脚本

root@deploy:/dockerfile/project/dubbo/consumer# cat run_java.sh
#!/bin/bash
su - nginx -c "/usr/local/dubbo/consumer/bin/start.sh"
tail -f /usr/local/dubbo/consumer/logs/dubbo-demo-consumer.log

 

创建consumer k8s yaml资源清单

kind: Deployment
apiVersion: apps/v1
metadata:
labels:
app: dubbo-consumer
name: dubbo-consumer-deployment
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: dubbo-consumer
template:
metadata:
labels:
app: dubbo-consumer
spec:
containers:
- name: dubbo-consumer-container
image: harbor.cncf.net/project/dubbo-demo-consumer:1.0
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
labels:
app: dubbo-consumer
name: dubbo-consumer-server
namespace: test
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
#nodePort: 30001
selector:
app: dubbo-consumer

 

在provider生产者查看日志消息验证,consumer消费者调用成功

      

  查看dubbo consumer成功在zookeeper注册

 

      

  扩充consumer和provider节点

root@deploy:/dockerfile/project/dubbo/consumer# kubectl scale deployment dubbo-consumer-deployment --replicas 3
deployment.apps/dubbo-consumer-deployment scaled
root@deploy:/dockerfile/project/dubbo/consumer# kubectl scale deployment dubbo-provider-deployment --replicas 3
deployment.apps/dubbo-provider-deployment scaled
root@deploy:/dockerfile/project/dubbo/consumer# kubectl exec -it dubbo-provider-deployment-579df8dd57-rrhcr -- bash

 

  查看provider日志消息,查看多个consumer调用provider

 

部署dubbo admin控制台

       创建dubbo-admin Dockerfile

root@deploy:/dockerfile/project/dubbo/dubbo-admin# cat Dockerfile
FROM harbor.cncf.net/web/tomcat:8.5.79
RUN apt install unzip -y
ADD server.xml /usr/local/tomcat/conf/server.xml
ADD logging.properties /usr/local/tomcat/conf/logging.properties
ADD catalina.sh /usr/local/tomcat/bin/catalina.sh
ADD run_tomcat.sh /usr/local/tomcat/bin/run_tomcat.sh
ADD dubboadmin /usr/local/tomcat/webapps/dubboadmin
EXPOSE 8080 8443
CMD ["/usr/local/tomcat/bin/run_tomcat.sh"]

 

       创建镜像构建脚本

root@deploy:/dockerfile/project/dubbo/dubbo-admin# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.cncf.net/project/dubboadmin:${TAG} .
docker push harbor.cncf.net/project/dubboadmin:${TAG}

 

       配置catalina.sh,修改tocmat java启动参数

root@deploy:/dockerfile/project/dubbo/dubbo-admin# vim catalina.sh
JAVA_OPTS="-server -Xms512m -Xmx512m -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+Us
eFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuri
ngThreshold=10 -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermS
ize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC
-XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSize
InBytes=128m -XX:+UseFastAccessorMethods"

 

  修改tomcat的日志路径

root@deploy:/dockerfile/project/dubbo/dubbo-admin# vim logging.properties
3manager.org.apache.juli.AsyncFileHandler.directory = /usr/local/tomcat/logs

 

  修改tomcat服务配置文件,设置项目路径和名称

root@deploy:/dockerfile/project/dubbo/dubbo-admin# vim server.xml

      

  修改tomcat 服务启动脚本

root@deploy:/dockerfile/project/dubbo/dubbo-admin# vim run_tomcat.sh
#!/bin/bash
/usr/local/tomcat/bin/catalina.sh start
tail -f /usr/local/tomcat/logs/catalina.out

 

       修改dubbo-admin配置文件

       修改zookeeper pod服务地址,root和guest用户密码

root@deploy:/dockerfile/project/dubbo/dubbo-admin# unzip dubboadmin.war
root@deploy:/dockerfile/project/dubbo/dubbo-admin# vim dubboadmin/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://zookeeper1.test.svc.cluster.local:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

 

       创建dubbo-admin k8s yaml资源文件

root@deploy:/dockerfile/project/dubbo/dubbo-admin# cat dubboadmin.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
app: dubboadmin
name: dubboadmin-deployment
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: dubboadmin
template:
metadata:
labels:
app: dubboadmin
spec:
containers:
- name: dubboadmin-container
image: harbor.cncf.net/project/dubboadmin:1.0.5
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
labels:
app: dubboadmin
name: dubboadmin-service
namespace: test
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
nodePort: 30080
selector:
app: dubboadmin

 

  验证pod

  

  验证dubboadmin svc:

  

  浏览器访问:k8s节点ip:30080

  用户名密码输入:root/root

 

       进入首页

      

  查看provider

 

posted @   PunchLinux  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
  1. 1 Get Lucky Daft Punnk
  2. 2 烦恼歌 张学友
  3. 3 Way Back Home Conor Maynard
  4. 4 Put A Little Love In Your Heart Jackie DeShannon
  5. 5 菊次郎的夏天 久石譲
  6. 6 一丝不挂 陈奕迅
  7. 7 日落大道 梁博
  8. 8 Rage your dream m.o.v.e
  9. 9 Don't Be So Shy Imany
  10. 10 芒种 腾格尔
Don't Be So Shy - Imany
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available

点击右上角即可分享
微信分享提示