zookeeper服务注册和服务发现

zookeeper docker单机安装使用和连接

拉取镜像

docker pull zookeeper

在这里插入图片描述

启动容器并添加映射

docker run --privileged=true -d --name zookeeper --publish 2181:2181  -d zookeeper:latest

在这里插入图片描述

客户端命令连接zookeeper服务端

docker run -it --rm --link zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper 

在这里插入图片描述

客户端操作zookeeper

# 指定路径创建节点
create path
# 创建临时节点:临时节点在客户端断开连接后节点会消失
create -e path
# 创建顺序节点,序号自动累加
create -s path+seq
# 指定枯井删除节点
delete path
# 修改节点内容
set path data
# 查看path下的节点
ls path
# 获取指定节点下的数据和更新信息
get path
# 获取节点的更新信息
stat path
# watch通知事件,当path发生变化时就会触发watch通知机制
stat path watch

在这里插入图片描述
在这里插入图片描述

  • cZxid :创建节点的id
  • ctime : 节点的创建时间
  • mZxid :修改节点的id
  • mtime :修改节点的时间
  • pZxid :子节点的id
  • cversion : 子节点的版本
  • dataVersion : 当前节点数据的版本
  • aclVersion :权限的版本
  • ephemeralOwner :判断是否是临时节点
  • dataLength : 数据的长度
  • numChildren :子节点的数量

在这里插入图片描述

java连接zookeeper

依赖

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>

java简单连接

@Slf4j
public class TestZoo implements Watcher{

    private ZooKeeper zookeeper;
    public void connect() {
        try {
            zookeeper = new ZooKeeper("47.103.95.233", 2000, this);
            log.info("连接成功");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void process(WatchedEvent watchedEvent) {
        if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
            log.info("Watch received event");
        }
    }
    
    public static void main(String[] args){
        TestZoo testZoo = new TestZoo();
        testZoo.connect();
    }
}

zookeeper数据结构

zookeeper是以节点作为单位,整体是一种类似文件系统的目录树结构的数据模型,最顶层的是zookeeper节点(默认)

但是zookeeper中的数据并不是存放在操作系统的文件中的,而是存放在内存中,所以zookeeper可以实现高吞吐量和低延迟

zookeeper集群模式

经典集群模式:

  • 主从复制(master/slave)
    • 主服务器提供写服务
    • 从服务器通过异步复制的方式同步主服务器的数据,提供读服务

zookeeper集群模式没有选择传统的主从复制模式,而是引入了leader。follower和observer三种角色。

zookeeper集群中的所有机器通过一个leader选举过程来选定一台称为leader的机器,leader既可以为客户端提供写服务又能为客户端提供读服务,除了leader外,follower和observer都只能提供读服务,他们唯一区别在于observer机器不参与leader选举的过程,也不参与写操作的过半写成功策略,所以observer机器可以在不影响写性能的情况下提升集群的读性能

springcloud整合zookeeper作为注册中心

引入依赖

        <!--SpringBoot整合Zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>

修改配置文件

server:
  port: 8104

spring:
  application:
    name: zookeeper8104
  cloud:
    zookeeper:
      connect-string: 47.103.95.233:2181 # zookeeper地址

主类:

@SpringBootApplication
@EnableDiscoveryClient  //zookeeper和后期的consul都是这个注解
public class Zookeeper8104 {

    public static void main(String[] args) {
        SpringApplication.run(Zookeeper8104.class,args);
    }
}

测试:

在这里插入图片描述

注意,这个节点的名称就是服务名,节点是临时节点,服务一停掉,过一会zookeeper就会将该节点剔除

猜你喜欢

转载自blog.csdn.net/weixin_41922289/article/details/106644597