zookeeper集群

Docker下dubbo开发三部曲之三:java开发

可紊 提交于 2019-11-29 23:34:54
在前两章 《Docker下dubbo开发,三部曲之一:极速体验》 和 《Docker下dubbo开发,三部曲之二:本地环境搭建》 中,我们体验了dubbo环境搭建以及服务的发布和消费,对dubbo有了初步认识,本章我们来实战dubbo服务的发布和消费代码的编写,实战后的我们能将自己的服务发布到dubbo环境供别人调用,也能让自己的工程去调用dubbo环境中的已有服务; 源码下载 本次实战一共有两个工程,分别是服务的提供者和消费者,都是web工程,代码在github上,地址是https://github.com/zq2599/blog_demos ,这里面有多个工程,本章所需的代码如下: 服务提供者的代码在目录dubbo_service_provider下,如下图红框所示: 服务消费者的代码在目录dubbo_service_consumer下,如下图红框所示: 接下来我们逐个分析,实战开发; 服务提供者开发 首先是pom中的依赖关系,除了常用的spring相关的,我们还要加入dubbo和zookeeper的依赖,如下所示: <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions>

分布式架构理论篇

拟墨画扇 提交于 2019-11-29 23:11:25
大型分布式系统原理概述 分布式系统三要素 ​ CPU:处理器 ​ Memory:内存 ​ IO:外存 ​ MultiCore:多核心 ​ LocalDisk:本地磁盘 ​ Networker:网络,网络存储 ​ RDMA:远程内存直接访问 ​ NUMA:分布式系统CPU和内存进行整合,对内存进行捆绑,是硬件层级的,(相似与ThreadLocal,将数据和实时运行线程绑定到一起),网卡直接绕过CPU共享内存,速度非常快 ​ 分布式系统三要素的进化 ​ 桌面级八核心十六线程CPU于2014年诞生,2015年Intel预计发布18核心桌面级CPU ​ NUMA在大中型系统上一直非常盛行,NUMA能很好提升系统吞吐能力,特别对于Java以及数据这样占用大内存的系统,但一直以来没有得到 DBA 们足够的重视、 Java领域也很少有人研究 ​ RDMA(远程内存直接访问,网络传输协议,类似TCP,更低延迟)是超高性能计算UHPC的重要基础之一,而Direct Socket Protocol (SDP)作为RDMA的传输协议已经在很多关键领域取代了TCP,Java7也正式开始支持SDP,跨入了UHPC的领地。 ​ IO方面,万兆网正在崛起,万兆网的ISCSI存储, 单通道可达到500MB/s, 每秒500,000个IO能力,而目前主流的SSD硬盘的速度是400-550MB/s。 ​ ===

zookeeper客户端

匆匆过客 提交于 2019-11-29 22:15:38
session会话机制 client请求和服务端建立连接,服务端会保留和标记当前client的session,包含 session过期时间,sessionId ,然后服务端开始在session过期时间的基础上倒计时,在这段时间内,client需要向server发送心跳包,目的是然server重置session过期时间 使用quit命令,退出可端,但是server端的session不会立即消失,使用ls / 依然可以看到创建的临时节点 节点的类型: 持久节点,不加任何参数,默认创建的是持久节点 临时节点: 当客户端断开连接时,这个节点会消失 持久顺序节点: 父节点为他的第一级子节点维护一份时序,标记节点的创建顺序,这个标记其实就是一个数字后缀,作为新节点的名字,数字的范围就是整形的最大值(1024*1024) 临时顺序节点,同上. (临时节点不能再创建的节点) 创建节点时,可以指定每个节点的data信息,zookeeper默认每个节点的数量的最大上限是1M 常用命令 创建节点: 语法 : create /path data [zk: localhost:2181(CONNECTED) 2] create /changwu 1 Created /changwu [zk: localhost:2181(CONNECTED) 3] ls / [changwu, zookeeper]

zookeeper的下载安装和选举机制(zookeeper一)

做~自己de王妃 提交于 2019-11-29 21:41:55
1. 简要概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的框架。 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据,然后接受观察者的注册,一但这些数据的状态发生变化, Zookeeper就将负责通知已经在 Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/ Slave管理模式 Zookeeper=文件系统+通知机制 2. 特点 Zookeeper:一个领导者( leader),多个跟随者( follower)组成的集群 Leader负责进行投票的发起和决议,更新系统状态 Follower用于接收客户请求并向客户端返回结果,在选举 Leader过程中参与投票 4)集群中只要有半数以上节点存活, Zookeeper集群就能正常服务。 5)全局数据一致:每个 serer保存一份相同的数据副本, client无论连接到哪个 serer,数据都是一致的。 6)更新请求顺序进行,来自同一个 client的更新请求按其发送顺序依次执行 7)数据更新原子性,一次数据更新要么成功,要么失敗。 8)实时性,在一定时间范围内, client能读到最新数据。 3. 数据结构 Zookeeper数据模型的结枃与Unix文件系统很类似,整体上可以看作是一裸树,每个节点叫做一个

zookeeper的选举机制

你离开我真会死。 提交于 2019-11-29 19:42:20
zk的选举机制 1、半数机制 集群中半数以上的机器存活,集群可用,所以zookeeper适合安装奇数台服务器 2、zookeeper集群节点 在配置文件中并没有指定主节点和从节点,但是,zookeeper工作时,有一个节点为leader,其余节点为follower,leader是通过内部的选举机制临时产生的 3、选举的过程 全新集群的选举(选举端口3888) 假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么,如图所示 1、服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING; 2、服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的ID比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING; 3、服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1

Eureka和zookeeper

限于喜欢 提交于 2019-11-29 19:38:52
zookeeper保证了CP(C:一致性,P:分区容错性),Eureka保证了AP(A:高可用) 1.当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新选leader。问题在于,选取leader时间过长,30 ~ 120s,且选取期间zk集群都不可用,这样就会导致选取期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够恢复,但是漫长的选取时间导致的注册长期不可用是不能容忍的。 2.Eureka保证了可用性,Eureka各个节点是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点仍然可以提供注册和查询服务。而Eureka的客户端向某个Eureka注册或发现时发生连接失败,则会自动切换到其他节点,只要有一台Eureka还在,就能保证注册服务可用,只是查到的信息可能不是最新的。除此之外,Eureka还有自我保护机制,如果在15分钟内超过85%的节点没有正常的心跳,那么Eureka就认为客户端与注册中心发生了网络故障,此时会出现以下几种情况: ①、Eureka不在从注册列表中移除因为长时间没有收到心跳而应该过期的服务。 ②

Zookeeper分布式集群安装与配置(CentOS6)

六眼飞鱼酱① 提交于 2019-11-29 19:24:21
Zk是一个分布式服务框架,提供了协调分布式应用的基本服务,zk集群主要是保证服务的可靠性和稳定性,介绍一下集群的安装与配置,在安装之前需要安装好jdk,jdk的安装请网上查找相应的方法 Dubbo 注册中心集群Zookeeper-3.4.6 Dubbo建议使用Zookeeper作为服务的注册中心。 Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将ZK集群的节点数量要为奇数(2n+1:如3、5、7个节点)较为合适。 ZooKeeper 与Dubbo服务集群架构图 服务器1:192.168.1.81 端口:2181、2881、3881 服务器2:192.168.1.82 端口:2182、2882、3882 服务器3:192.168.1.83 端口:2183、2883、3883 1、 修改操作系统的/etc/hosts文件,添加IP与主机名映射: # zookeeper clusterservers 192.168.1.81 edu-zk-01 192.168.1.82 edu-zk-02 192.168.1.83 edu-zk-03 2、 下载或上传zookeeper-3.4.6.tar.gz到/home/wusc/zookeeper目录: $ cd /home/wusc/zookeeper $ wget http:/

zookeeper 单节点单实例安装

偶尔善良 提交于 2019-11-29 19:19:05
下载 cd /usr/tmp wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz 解压 tar -zxf apache-zookeeper-3.5.5-bin.tar.gz mv apache-zookeeper-3.5.5-bin /usr/local/zookeeper 加入环境变量 $ vi /etc/profile.d/zookeeper.sh export PATH=$PATH:/usr/local/zookeeper/bin $ source /etc/profile 配置 $ vi /usr/local/zookeeper/conf/zoo.cfg tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 admin.serverPort=8080 管理 //# 启动 $ zkServer.sh start 2181: 对cline端提供服务 8080: jetty管理控制台 42577 //# 停止 $ zkServer.sh stop 连接 $ zkCli.sh -server 127.0.0.1

zookeeper 伪分布式安装

戏子无情 提交于 2019-11-29 19:19:02
在一台物理机上运行多个 Zookeeper 实例 下载 cd /usr/tmp wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz 解压 tar -zxf apache-zookeeper-3.5.5-bin.tar.gz mv apache-zookeeper-3.5.5-bin /usr/local/zookeeper 加入环境变量 $ vi /etc/profile.d/zookeeper.sh export PATH=$PATH:/usr/local/zookeeper/bin $ source /etc/profile 配置1 $ vi /usr/local/zookeeper/conf/zoo1.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/tmp/zkdata/zk1 dataLogDir=/usr/tmp/zklog/zk1 clientPort=2181 server.1=localhost:2888:3888 server.2=localhost:2899:3899 server.3

zookeeper 集群安装

冷暖自知 提交于 2019-11-29 19:18:52
在多物理机上运行Zookeeper 实例 下载 cd /usr/tmp wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz 解压 tar -zxf apache-zookeeper-3.5.5-bin.tar.gz mv apache-zookeeper-3.5.5-bin /usr/local/zookeeper 加入环境变量 $ vi /etc/profile.d/zookeeper.sh export PATH=$PATH:/usr/local/zookeeper/bin $ source /etc/profile 配置 //# 3台配置相同 $ vi /usr/local/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/tmp/zkdata/zk dataLogDir=/usr/tmp/zklog/zk clientPort=2181 server.1=vps125:2888:3888 server.2=vps126:2888:3888 server.3