zookeeper选举master了解

本文介绍了Zookeeper在分布式服务中的应用,特别是选举Master的角色。文章详细阐述了选举的基本概念,包括集群监听、节点创建和服务注册等步骤。针对可能出现的惊群效应问题,提出了使用临时顺序节点的改进方案。接着,探讨了Zookeeper Recipes提供的LeaderLatch和LeaderSelector两种选举实现方式,它们都带有相应的监听回调机制,使得当选Leader后可以执行特定操作。
摘要由CSDN通过智能技术生成

zookeeper广泛用于分布式服务中,比如选举。这里简单介绍下,算是入门。

基本概念

我们知道zookeeper的结构是树形结构

1.集群host启动后的监听/master节点的删除事件
2.各服务器host尝试创建master,成功则把自己的信息存在master上,失败则读取master节点信息
3.服务注册:各服务器host在/serverList节点下创建子节点,并把自己的信息存在节点上
4.服务发现:服务消费者方查询/serverList子节点列表,获取服务提供方各个host信息

这个就是利用zookeeper选举的基本思路。

不过上边的方案还是有问题的:即惊群效应。当服务的机器数量比较多的时候,触发了选举,此时大量的请求进入zookeeper会产生比较大的压力。

改进思路还是用zookeeper的临时顺序节点:多个机器同时向该根路径下创建临时顺序节点,没抢到Leader的节点都监听前一个节点的删除事件,这样在前一个节点删除后进行重新抢主。这样一般只会有一个机器去选举成为leader,如果多个机器同时挂掉,参与选主的机器也不会太多。

recipes实现

基于这个思路,recipes提供了两种实现选举的方案:LeaderLatch与LeaderSelector。成为leader后都有对应的Listener回调。

LeaderLatch

LeaderLatch配合LeaderLatchListener使用

示例:

public class LeadLatchMain {
    public static void main(String[] args) throws Exception {

        List<LeaderLatch> leaders = new ArrayList<LeaderLatch>();
        for (int i = 0; i < 10; i++) {
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
            CuratorFramework client = CuratorFrameworkFactory.builder()
                    .connectString("172.16.59.154:2181").sessionTimeoutMs(5000).connectionTimeoutMs(5000).retryPolicy(retryPolicy)
                    .namespace("base")
                    .build();

            String name = "client" + i;

            // 指定客户端和选举路径
            L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值