dubbo-zookeeper 单机以及集群搭建

项目做大了,开始使用分布式部署,学习了下dubbo的使用,dubbo版本使用的2.8.4, zookeeper版本是3.4.6

安装zookeeper3.4.6(单机)


下载zookeeper : http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/ 

在/usr目录下创建zookeeper文件夹, 解压zookeeper并移动到/usr/zookeeper/目录下

tar -zxvf ./zookeeper-3.4.6.tar.gz
mv ./zookeeper-3.4.6 /usr/zookeeper/zookeeper-3.4.6/

设置环境变量

export PATH=/usr/zookeeper/zookeeper-3.4.6/bin:$PATH

zookeeper的配置文件是zoo.cfg, 所以进入conf目录下, 复制zoo_sample.cfg 改名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

dubbo-zookeeper 单机以及集群搭建_第1张图片

到这里就配置完成了, 很简单吧

启动zookeeper

/usr/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start 

 

安装dubbo管理控制台 dubbo-admin

下载地址:https://github.com/dangdangdotcom/dubbox

需要自己使用maven打包,

我这里有打包好的war,下载直接使用

修改下WEB-INF/dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181

把war包放在tomcat/webapps中,启动tomcat,

浏览器访问地址: http://192.168.106.19:8080/dubbo-admin

默认账号: root

默认密码: root

dubbo-zookeeper 单机以及集群搭建_第2张图片

安装dubbo监控 dubbo-monitor

下载地址:https://github.com/dangdangdotcom/dubbox

需要自己使用maven打包, 

我这里有改良后打包好的war,下载直接使用

修改下 application.properties

dubbo.application.name=dubbo-monitor
dubbo.application.owner=
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=7070

放在tomcat中启动tomcat

浏览器访问: http://192.168.106.19:8080/dubbo-monitor/

默认账号: admin

默认密码: admin

dubbo-zookeeper 单机以及集群搭建_第3张图片

 

配置完成.

下面是代码部分

代码使用springboot 无xml配置方式.

代码目录结构

dubbo-zookeeper 单机以及集群搭建_第4张图片

 

maven分模块这里就不细说了, 如果不会可以先去学习下.

服务提供者 dubbo-provider

maven依赖


        
            io.dubbo.springboot
            spring-boot-starter-dubbo
            1.0.0
        

        
        
            com.alibaba
            dubbo
            2.8.4
            
                
                    log4j
                    log4j
                
            
        

        
        
            org.apache.zookeeper
            zookeeper
            3.4.6
        

        
        
            com.bwton
            dubbo-interface
            0.0.1-SNAPSHOT
        

application.yml 配置

server:
  port: 8081

## Dubbo 配置
spring:
  dubbo:
    application:            #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
      name: dubbo-provider
      monitor:  # 添加monitor监控
        protocol: registry
    registry:                 #注册中心配置,用于配置连接注册中心相关信息。
      address: zookeeper://192.168.106.19:2181
    protocol:     #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
      name: dubbo
      port: 20880
    scan: com.bwton.dubbo.provider.service.impl  #服务暴露与发现消费所在的package

service实现类

package com.bwton.dubbo.provider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.bwton.dubbo.pojo.Do.UserDO;
import com.bwton.dubbo.pojo.vo.UserVO;
import com.bwton.dubbo.service.TestService;
import org.springframework.beans.BeanUtils;

/**
 * @author XueXianlei
 * @Description:
 * @date 2018/10/8 14:51
 */
@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {

    @Override
    public UserVO getUser(String userName) {
        if (null == userName) {
            return null;
        }
        UserDO userDO = new UserDO();
        userDO.setId(1);
        userDO.setUserName(userName);
        UserVO userVO = new UserVO();
        BeanUtils.copyProperties(userDO, userVO);
        return userVO;
    }
}

 

服务消费者 dubbo-consumer

maven依赖和提供者一样

application.yml配置

server:
  port: 8082

spring:
  dubbo:
    application:            #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
      name: dubbo-consumer
      monitor:  # 添加monitor监控
        protocol: registry
    registry:                 #注册中心配置,用于配置连接注册中心相关信息。
      address: zookeeper://192.168.106.19:2181
    protocol:     #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
      name: dubbo
      port: 20880
    scan: com.bwton.dubbo.consumer.controller  #服务暴露与发现消费所在的package
    consumer:
      check: false

代码实现

package com.bwton.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.bwton.dubbo.pojo.vo.UserVO;
import com.bwton.dubbo.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author XueXianlei
 * @Description:
 * @date 2018/10/8 15:06
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @Reference(version = "1.0.0")
    private TestService testService;

    @RequestMapping("/getUser")
    public UserVO getUser(String userName) {
        UserVO user = testService.getUser(userName);
        return user;
    }
}

启动服务提供者, 再启动服务消费者, 就可以调用了

dubbo-zookeeper 单机以及集群搭建_第5张图片

 

下面说下集群搭建

安装zookeeper3.4.6(集群)

这里使用的伪集群, 即在一个服务器中(服务器有限)

复制zookeeper-3.4.6 3分, 分别为

zookeeper-3.4.6-server1

zookeeper-3.4.6-server2

zookeeper-3.4.6-server3

拿zookeeper-3.4.6-server1距离

进入目录, 创建data和logs两个文件夹

cd zookeeper-3.4.6-server1
mkdir data
mkdir logs

修改zoo.cfg文件

zookeeper-3.4.6-server1

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.6-server1/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6-server1/logs
clientPort=2181
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

zookeeper-3.4.6-server2

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.6-server2/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6-server2/logs
clientPort=2182
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

zookeeper-3.4.6-server3

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.6-server3/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6-server3/logs
clientPort=2183
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

 

 参数描述

initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s.

syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.

server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.

创建ServerID标识  

除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid,这个文件在dataDir目录下,这个文件里面就有一个数据就是A的值,在上面配置文件中zoo.cfg中配置的dataDir路径中创建myid文件

echo "1" > /usr/zookeeper/zookeeper-3.4.6-server1/data/myid
echo "2" > /usr/zookeeper/zookeeper-3.4.6-server2/data/myid
echo "3" > /usr/zookeeper/zookeeper-3.4.6-server3/data/myid

启动zookeeper

/usr/zookeeper/zookeeper-3.4.6-server1/bin/zkServer.sh start 
/usr/zookeeper/zookeeper-3.4.6-server2/bin/zkServer.sh start 
/usr/zookeeper/zookeeper-3.4.6-server3/bin/zkServer.sh start 

 

dubbo-admin 修改 dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181|zookeeper://127.0.0.1:2182|zookeeper://127.0.0.1:2183

dubbo-monitor 修改 application.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181|zookeeper://127.0.0.1:2182|zookeeper://127.0.0.1:218

重启tomcat

dubbo-zookeeper 单机以及集群搭建_第6张图片

dubbo-zookeeper 单机以及集群搭建_第7张图片

 

代码注册中心地址修改, 改为zookeeper集群配置, 提供者和消费者都要改

server:
  port: 8082

spring:
  dubbo:
    application:            #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
      name: dubbo-consumer
      registries[0]: #注册中心配置,用于配置连接注册中心相关信息。
        address: zookeeper://192.168.106.19:2181
      registries[1]:
        address: zookeeper://192.168.106.19:2182
      registries[2]:
        address: zookeeper://192.168.106.19:2183
      monitor:  # 添加monitor监控
        protocol: registry
    protocol:     #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
      name: dubbo
      port: 20880
    scan: com.bwton.dubbo.consumer.controller  #服务暴露与发现消费所在的package
    consumer:
      check: false

集群搭建也完成了.

 

 

你可能感兴趣的:(后端)