首页 > 其他分享 >基于Zookeeper案例实现微服务动态注册和发现案例

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

时间:2022-08-19 22:12:35浏览次数:42  
标签:dubbo local Zookeeper project 案例 注册 provider root consumer

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

 

标签:dubbo,local,Zookeeper,project,案例,注册,provider,root,consumer
From: https://www.cnblogs.com/punchlinux/p/16603424.html

相关文章