基于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
本文来自博客园,作者:PunchLinux,转载请注明原文链接:https://www.cnblogs.com/punchlinux/p/16603424.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)