Dubbo学习— 注册中心(Zookeeper 伪分布式集群搭建)

Dubbo再阿里内部的注册中心实现方案,并不是官方推荐的zk方式。而是采用数据库的方式实现了注册中心的功能。为什么阿里内部不用zookeeper作为服务发现呢?阿里中间件给出了答案:
http://jm.taobao.org/2018/06/13/做服务发现?/

原因大致如下:

  1. 注册中心,应该更加偏向于AP系统。注册中心不能因为自身的任何原因破环服务之间本身的可联通性。
  2. zk 不能做到当所有节点都挂了情况下,注册中心还依然能够提供服务列表的功能
  3. zk常用再大数据场景,分布式协调场景

但是针对开源项目而言,还是大家学习使用ZK作为服务发现的注册中心

Zookeeper 伪分布式集群搭建
环境配置

阿里云ecs Centos7

1. 下载对应的zk

下载好后,将程序上传至远程服务器
scp -r zookeeper-3.4.11.tar.gz root@远程服务器ip /root/zk

2. 将对应的tar.gz进行解压缩

tar -xvf zookeeper-3.4.11

3. 需要拷贝三份相同的zk程序

如下的目录结构:在这里插入图片描述
其次 还需要创建zk程序中数据的存放目录,目录结构如下:/root/zzjmay/data/zkData/
在这里插入图片描述
注意:需要注意的是data下要创建myid的文件,里面存放的节点对应的数字 例如zk1 --> 1 zk2 --> 2 zk3 -->3

4. 设置zk的配置文件 zoo.cfg
# 通信心跳时间
tickTime=2000
# 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
initLimit=10
# 集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数
syncLimit=5
# 该属性对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等
dataDir=/root/zzjmay/data/zkData/zk1/data

dataLogDir=/root/zzjmay/data/zkData/zk1/log
# 客户端链接端口
clientPort=2181
# the maximum number of client connections.
#maxClientCnxns=60

#server.x = ip:A,B
##x 代表服务器编号,和myid下的编号对应
##ip 表示服务器地址
##A 端口 表示flower和leader服务器之间的通信端口
##B 端口 表示选举的监听端口
server.1 = 127.0.0.1:2888:3888
server.2 = 127.0.0.1:2889:3889
server.3 = 127.0.0.1:2890:3890 
5. 配置好后就分别启动对应的zkServer.sh
#!/bin/bash

startZk(){

        echo "进入zk的目录"

        cd  /root/zzjmay/zkwork/$1/bin

        pwd

        sh zkServer.sh start ../conf/zoo.cfg

}


echo "开始执行...1"

startZk zookeeper1

startZk zookeeper2

startZk zookeeper3

echo "结束执行...2" 

这是用于批量启动zk的脚本文件哈哈

6. 设置阿里云的安全组策略

在这里插入图片描述

7. 使用java zkclient就可以进行连接
 ZkClient zkClient = new ZkClient(CONNECT_ADDR,5000);

        //2.创建永久节点,zkClient支持递归创建父节点,但是不能递归赋值
        zkClient.createPersistent("/test/appName",true);

        zkClient.createPersistent("/test/appVersion",true);


        //3.赋值
        zkClient.writeData("/test/appName","cpaytrade");
        zkClient.writeData("/test/appVersion","1.0.0");


        //4.获取节点信息
        List<String> childrenList = zkClient.getChildren("/test");

        for (String p:childrenList) {
            System.out.println("当前节点p:"+p);
            String rp = "/test/"+p;
            String data = zkClient.readData(rp);
            System.out.println("当前节点为:"+rp+",内容为:"+data);
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值