• Centos7 Zookeeper


    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws

    一.写在前面

    ZK是一个高效的分布式协调服务,高可用的分布式管理协调框架。 朋友推荐一本书《从paxos到zookeeper》,对我帮助的确很大。 

    二.集群配置和踩坑

    java安装和环境变量配置可以参考 http://www.cnblogs.com/tdws/p/4096300.html 

    1 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz   下载
    2  
    3 tar -zxvf zookeeper-3.4.10.tar.gz   解压
    4  
    5 mv zookeeper-3.4.10 /usr/local  剪切
    6  
    7 mv zookeeper-3.4.10/ zookeeper 重命名

    下面修改配置文件命名

    1 cd /usr/local/zookeeper/conf
    2 mv zoo_sample.cfg zoo.cfg
    配置一共没几行 。指定配置中的  dataDir
    dataDir=/usr/local/zookeeper/data

    自行mkdir创建data文件夹。

    在配置文件末尾 配置集群 我是单台机器伪集群 三个节点
    1 server.1=your_ip:20881:30881
    2 server.2=your_ip:20882:30882
    3 server.3=your_ip:20883:30883
    在data文件夹中创建文件myid 来做一个标识
    nano myid 在文件中填写0 并且保存。需要注意的是刚才我们的zookeeper文件夹是不使用的,仅作为我们copy新节点的原本。
    接下来复制三份zk
    1 cp -r zookeeper/ zookeeper1
    2 cp -r zookeeper/ zookeeper2
    3 cp -r zookeeper/ zookeeper3
    分别修改三台节点 其datadir 将路径指定到自己节点之下
    分别修改其端口号和myid,是各个zoo.conf 配置的其中port 设置分别为2181 2182 2183
    各个myid内容分别为1 2 3
    下面 去三个zk bin目录下 执行zkServer.sh start
     
    第一次 出错
    Error contacting service. It is probably not running.
    哎 检查好几个小时ZK配置文件 试了十几种方法, 结果之前JAVA_HOME不小心配置错了,我是yum安装的jdk。
     
    第二次 出错与解决
    后来又出一次错误 是我stop zk所有节点之后 再次启动起不来 首先 jps命令 然后看到进程id和QuorumPeerMain
    把Quorumpeermain的进程kill -9杀死
     
    第三次 我丢雷楼某! 这个真是困扰了
    如果使用阿里云ECS 专有网络+弹性公网IP
    一般不能直接在ECS实例的程序例绑定和使用弹性公网IP地址。因为这个公网IP地址在ECS之外。所以我开了所有的端口,根本没有用,最后使用0.0.0.0解决问题。
    1 server.1=0.0.0.0:20881:30881
    2 server.2=0.0.0.0:20882:30882
    3 server.3=0.0.0.0:20883:30883

    三.应用和小结

    学习ZK一段时间,原生API比较难以使用,一般使用zkClient(dubbo依赖于此)和curator框架来操作ZK比较容易。 其典型应用场景包括以下几点:

    1.数据发布与订阅

        ZK在dubbo中作为注册中心的角色,服务方和调用方都在这里注册。举例来说明,我发布了一个dubbo service,消费者webapp引用这个服务

     <dubbo:service interface="com.s2s.service.ItemService" ref="itemServiceImpl"/>   发布的服务
     <dubbo:reference interface="com.s2s.service.ItemService" id="itemService"/>     引用服务(将使用RPC调用)

      接下来去服务器上查看数据节点,

    可以看到根目录上有dubbo节点,dubbo下有com.s2s.service.ItemService, 其节点下又有consumers和providers等。

    服务提供者启动时向/dubbo/com.s2s.service.ItemService/providers目录下写入URL

    服务消费者启动时订阅/dubbo/com.s2s.service.ItemService/providers目录下的URL。 并且向/dubbo/com.s2s.service.ItemService/consumers目录下写入自己的URL 

    监控中心启动时订阅/dubbo/com.s2s.service.ItemService/目录下的所有提供者和消费者URL。

    所以dubbo监控中心,查看到消费者和服务提供者

    2.负载均衡

    3.命名服务

    4.分布式通知和协调

    5.集群管理与Master选举

     比如SolrCloud管理。管理集群配置,监控集群状态,选举分片leader

    6.分布式锁

        有很多人用它做分布式锁 但是做法比较底层。临时节点是在一次会话内有效,保证了出现异常时,锁能得以释放。比如client1 做分布式操作 那他创建一个临时节点 然后去做一些其他数据操作 做完操作后, 再去把临时节点移除。这时c2才能去操作。如果有10个客户端 要操作同一个数据,但是这个数据,有多个复制的版本 在不同的DB当中(当然值是一致)。
    这个时候 分布式锁的作用就是同步操作。客户端1 操作 这条数据, 那就去zk立即 就create个节点 代表占用了这条数据,这时候客户端2 并发操作这条数据 先去zk上get一下这个节点,get到的话 可以等待一下,等客户端1 释放掉后,去再次create一下占领数据。

    7.分布式队列

    本文主要是安装配置,分布式理论的学习还是比较好,接下来将会继续分享实践中的收获。

  • 相关阅读:
    让 vscode 作为 SpringBoot,Java,Maven,甚至于 JavaScript,C,C++,Python,Php等多语言的开发工具吧!
    MySQL 连接错误集锦
    前端开发工具库:包含事件委托,动画处理,以及大部分常用的前端工具
    初探 Node.js 框架:eggjs (环境搭配篇)
    如何快速搭建一个 Node.JS 项目并进入开发?
    关于 JavaSrcipt 前端开发的建议:模块化开发
    Spring-Session 会话共享 -> 基于 Redis 集群,内附各大错误合集,包括配置,类寻找不到、连接错误等
    Java Email 邮件发送
    CSS 显示或隐藏子元素
    Ubuntu美化及配置,常见问题解决方案(仿 Mac 风格)
  • 原文地址:https://www.cnblogs.com/tdws/p/8282540.html
Copyright © 2020-2023  润新知