Zk如何保证分布式数据一致性一致性

&>&从Paxos到Zookeeper:分布式一致性原理与实践-下载地址
从Paxos到Zookeeper:分布式一致性原理与实践-下载地址
上传大小:89KB
本书从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式一致性问题的工业解决方案——ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法、内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper。全书共8章,分为五部分:第一部分(第1章)主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论;第二部分(第2~4章)介绍了2PC、3PC和Paxos三种分布式一致性协议,并着重讲解了ZooKeeper中使用的一致性协议——ZAB协议;第三部分(第5~6章)介绍了ZooKeeper的使用方法,包括客户端API的使用以及对ZooKeeper服务的部署与运行,并结合真实的分布式应用场景,总结了ZooKeeper使用的最佳实践;第四部分(第7章)对ZooKeeper的架构设计和实现原理进行了深入分析,包含系统模型、Leader选举、客户端与服务端的工作原理、请求处理,以及服务器角色的工作流程和数据存储等;第五部分(第8章)介绍了ZooKeep
er的运维实践,包括配置详解和监控管理等,重点讲解了如何构建一个高可用的ZooKeeper服务。
分布式架构 1
从集中式到分布式 1
集中式的特点 2
分布式的特点 2
分布式环境的各种问题 4
从ACID到CAP/BASE 5
分布式事务 8
CAP和BASE理论 9
一致性协议 17
2PC与3PC 17
Paxos算法 24
追本溯源 25
Paxos理论的诞生 26
Paxos算法详解 27
Paxos的工程实践 39
应用场景 40
设计目标 40
Chubby技术架构 43
Paxos协议实现 52
Hypertable 55
算法实现 57
ZooKeeper与Paxos 59
初识ZooKeeper 59
ZooKeeper介绍 59
ZooKeeper从何而来 62
ZooKeeper的基本概念 62
为什么选择ZooKeeper 64
ZooKeeper的ZAB协议 65
ZAB协议 65
协议介绍 66
深入ZAB协议 71
ZAB与Paxos算法的联系与区别 77
使用ZooKeeper 79
部署与运行 79
系统环境 79
集群与单机 80
运行服务 84
客户端脚本 88
Java客户端API使用 91
创建会话 91
创建节点 95
删除节点 99
读取数据 100
更新数据 109
检测节点是否存在 113
权限控制 115
开源客户端 120
ZkClient 120
Curator 130
ZooKeeper的典型应用场景 163
典型应用场景及实现注 163
数据发布/订阅 164
负载均衡 166
命名服务 170
分布式协调/通知 173
集群管理 179
Master选举 185
分布式锁 188
分布式队列 194
ZooKeeper在大型分布式系统中的应用 197
Hadoop 198
ZooKeeper在阿里巴巴的实践与应用 213
消息中间件:Metamorphosis 213
RPC服务框架:Dubbo 217
基于MySQL Binlog的增量订阅和消费组件:Canal 219
分布式数据库同步系统:Otter 223
轻量级分布式通用搜索平台:终搜 226
实时计算引擎:JStorm 238
ZooKeeper技术内幕 243
系统模型 243
数据模型 243
节点特性 244
版本——保证分布式数据原子性操作 246
Watcher——数据变更的通知 249
ACL——保障数据的安全 265
序列化与协议 272
Jute介绍 272
使用Jute进行序列化 273
深入Jute 275
通信协议 277
客户端 284
一次会话的创建过程 286
服务器地址列表 289
ClientCnxn:网络I/O 295
会话状态 298
会话创建 299
会话管理 304
会话清理 307
服务器启动 311
单机版服务器启动 312
集群版服务器启动 315
Leader选举 321
Leader选举概述 321
Leader选举的算法分析 323
Leader选举的实现细节 328
各服务器角色介绍 335
Leader 335
Follower 338
Observer 339
集群间消息通信 339
请求处理 342
会话创建请求 343
SetData请求 351
事务请求转发 354
GetData请求 355
数据与存储 356
内存数据 356
事务日志 358
snapshot——数据快照 364
初始化 368
数据同步 372
ZooKeeper运维 379
配置详解 379
基本配置 379
高级配置 380
四字命令 384
开启远程JMX 390
通过JConsole连接ZooKeeper 391
实时监控 397
数据统计 398
构建一个高可用的集群 398
集群组成 398
扩容与缩容 402
日常运维 402
数据与日志管理 402
Too many connections 404
磁盘管理 405
Windows平台上部署ZooKeeper 406
从源代码开始构建 409
各发行版本重大更新记录 414
ZooKeeper源代码阅读指引 418
...展开收缩
综合评分:1
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有1条
骗子。只有这本书的目录!!
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
从Paxos到Zookeeper:分布式一致性原理与实践-下载地址
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
从Paxos到Zookeeper:分布式一致性原理与实践-下载地址分布式利器Zookeeper(一)
Zookeeper不论是在实际项目中,还是在各种分布式开源项目中都得到了广泛应用,从本文开始,将为大家带来我对Zookeeper的认识。这个系列将会涵盖Zookeeper的介绍、环境搭建、配置说明、Java操作Zookeeper(原生API方式)、zkclient操作Zookeeper方式、Zookeeper的典型应用场景分析以及Curator框架等。
Hello,Zookeeper
Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)实现。ZK能够很好的保证分布式环境下的数据一致性,这一特性使得ZK是处理分布式一致性问题的利器!这个利器有哪些特性呢,看看下面你就了解了。
可靠性:一旦Zookeeper成功的应用了一个事务,并完成对client的响应,那么Zookeeper内部集群的所有服务器的状态都会是一致的保留下来。
单一视图:由于上面可靠性的保证,使得无论client连接的是ZK集群中的哪个服务器,所看到的数据都是一致的。
顺序一致性:从一个client发起的请求,最终会严格的按照发起的顺序被应用到Zookeeper中去。【实质上,ZK会对每一个client的每一个请求,进行编号,说白了,就是分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。】
实时性:通常意义下的实时性是指一旦事务被成功应用,那么client会立刻从服务器端获取到变更后的新数据。ZK仅仅能够保证在一定时间内,client最终一定会能从服务器上获取到最新的数据。
高可用:在ZK集群内部,会有一个Leader,多个Follower。一旦Leader挂掉,那么ZK会通过Paxos算法选举出新的Leader,只要ZK集群内部的服务器有一半以上正常工作,那么ZK就能对外正常提供服务!
简单的数据结构:类似于Linux文件系统的树形结构,简单,实用!(树形层次空间)
高性能:性能有多高呢,举个栗子,比如我们经常通过创建临时节点来处理分布式锁,要知道临时节点是存储在内存中的,在读场景压力测试下,QPS高达10W+!也就是说ZK在读场景下,性能非常突出
初步认识Zookeeper的数据模型
Znode Tree
每一个节点被称为znode,znode可以有子节点目录,并且每个znode可以存储数据(特别需要注意的是临时节点不可以有子节点)
znode如果是临时节点,意味着创建这个znode的client一旦与ZK集群失去联系,这个临时的znode将被自动删除。(事实上,client与ZK通信是采用长连接方式,并通过心跳的方式保持连接,这种状态就是session,一旦session失效,就是连接断开,临时节点会被删除掉)
znode是可以被监控的,不论是znode本身的数据变化,还是该znode下的子节点的变化,都可以进行监控,这也是ZK的核心特性。(很多应用场景就是基于这个特性,后续进行详细介绍)
初步认识Zookeeper的角色组成
ZK集群的角色组成
这里,我们先了解下ZK Server的身份特性:
Leader:负责客户端的write类型的请求
Follower:负责客户端的read类型请求,并可以参与Leader的选举
watcher:后文介绍。
install Zookeeper
这里以zookeeper-3.4.5版本为例,搭建一个ZK集群(至少要求3个节点,并且各个ZK SERVER之间系统时间保持一致)。使用的机器列表是:192.168.99.121、192.168.99.122、192.168.99.123。
以192.168.99.121为例进行说明:
/etc/profile中配置ZK环境变量(注意source下)
创建ZK数据目录
配置说明:
tickTime:ZK集群与客户端、ZK集群内部SERVER之间的心跳间隔,默认2S。
initLimit:在客户端连接ZK集群时,可以忍受多少个心跳次数。上述的配置表明,如果client初始连接ZK集群,在10*2S=20S内ZK集群没有返回连接成功,即意味着连接失败。
syncLimit:表示ZK集群内部Leader和Follower之间请求应答可以忍受多少个心跳次数。
dataDir:ZK保存数据以及日志的目录。
clientPort:ZK集群对外暴露的接口,即client访问ZK集群的端口(2181)。
server.x = IP:port-a:port-b
X表示是第几号服务器,从0开始编号,并和dataDir下的myid文件对应。
port-a表示Leader和Follower进行信息通信的端口(2888)。
port-b表示Follower进行选举的端口(3888)。
分别启动ZK
查看ZK身份
搭建的ZK集群
基本的ZK命令
ls/create/get/set
通过zkCli.sh进入客户端进行操作:
查找ls、创建znode节点create(注意每个节点都是有值的)、获取get、设置set。
我们观察下下面几个属性:
ctime和cZxid是一对,表示创建ZNODE的时间和事件编号;
mtime和mZxid是一对,表示修改ZNODE数据内容的时间和事件编号;(通过set指令会改变这2个属性,但是该节点的子节点的变化不会影响该节点)
dataVersion:表示ZNODE数据的版本,注意利用JAVA 原生API进行delete ZNODE时,需要提供version才可以删除ZNODE。(当然我们可以提供-1来跳过版本检查机制)
dataLength、numChildren都好理解。
另外,注意rmr指令可以递归删除ZNODE;而delete只可以删除指定ZNODE。
ZooInspector工具及IntelliJ IDEA与ZK集成
ZooInspector工具
ZooInspector是一个可运行的JAR,运行后直接连接ZK集群中的任何一个SERVER即可。
安装ZK插件
配置ZK插件并启用
未完待续....
下期来看JAVA操作ZK(基于Zookeeper的原生API)、分布式锁探讨、Watch特性等~
觉得本文有帮助?请分享给更多人
关注「猿助猿」成就顶级开发
技术交流QQ群:
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
猿助猿(www.dadio.xyz),开发者进阶互助圈,全球领先的在线编程测评平台!
猿助猿(www.dadio.xyz),开发者进阶互助圈,全球领先的在线编程测评平台!
今日搜狐热点&>&从PAXOS到ZOOKEEPER分布式一致性原理与实践
从PAXOS到ZOOKEEPER分布式一致性原理与实践
上传大小:59.99MB
《从PAXOS到ZOOKEEPER分布式一致性原理与实践 》很不错的资源!工作中使用dubbo微服务,其中注册中心是由zk提供的,于是课余时光就读了此本zk经典之作!
综合评分:0
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
综合评分:
积分/C币:10
wangjc_opal
综合评分:
积分/C币:5
综合评分:
积分/C币:4
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
从PAXOS到ZOOKEEPER分布式一致性原理与实践
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
从PAXOS到ZOOKEEPER分布式一致性原理与实践&&&从Paxos到Zookeeper:分布式一致性原理与实践
自营订单满49元(含)免运费
不足金额订单收取运费5元起
邀请好友参加吧
版 次:5页 数:字 数:印刷时间:日开 本:16开纸 张:胶版纸包 装:平装是否套装:否国际标准书号ISBN:9所属分类:&&
下载免费当当读书APP
下载当当读书APP,免费阅读万本电子书。
本商品暂无详情。
当当价:为商品的销售价,具体的成交价可能因会员使用优惠券、积分等发生变化,最终以订单结算页价格为准。
划线价:划线价格可能是图书封底定价、商品吊牌价、品牌专柜价或由品牌供应商提供的正品零售价(如厂商指导价、建议零售价等)或该商品曾经展示过的销售价等,由于地区、时间的差异化和市场行情波动,商品吊牌价、品牌专柜价等可能会与您购物时展示的不一致,该价格仅供您参考。
折扣:折扣指在划线价(图书定价、商品吊牌价、品牌专柜价、厂商指导价等)某一价格基础上计算出的优惠比例或优惠金额。如有疑问,您可在购买前联系客服咨询。
异常问题:如您发现活动商品销售价或促销信息有异常,请立即联系我们补正,以便您能顺利购物。
当当购物客户端手机端1元秒
当当读书客户端万本电子书免费读  当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题,
我们需要多台机器共同commit事务,经典的案例当然是银行转账,支付宝转账这种,如果是一台机器的话,这个还是很方便的,windows中自带了一个事务协
调器mstsc,但是呢,你那种很大很牛逼的项目不可能全是windows服务器,对吧,有些人为了解决这个问题,会采用2pc,3pc这种算法,或者是paxos的思
想进行分布式下的一致性处理,当然在这个世界上,真的不需要你自己去开发这种协调性,因为现在已经有了专门解决这种问题的解决方案,比如zookeeper。
一:zookeeper集群搭建
  有些人应该明白,zookeeper正是google的chubby的开源实现,使用zookeeper之前,我们先来搭建一个集群。
& &从官网上,我们可以看到,zookeeper的最新版本是3.4.8,下载地址是:http://apache.fayea.com/zookeeper/zookeeper-3.4.8/,可以下载一下:
2. 文件夹配置
接下来我们解压一下,根目录为zkcluster,下面使用clientport(,3002)这样的端口作为文件夹名称,里面就是zookeeper解压包,如下面这样:
3. 配置zoo.cfg
& &现在我们有三个文件夹,也就是3个zookeeper程序,在3001/conf/下面有一个zoo_sample.cfg文件,现在我们改成zoo.cfg,并且修改如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/root/zkcluster/3001/data
dataLogDir=/root/zkcluster/3001/logs
# the port at which the clients will connect
clientPort=3001
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=6
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.161.134:
server.2=192.168.161.134:
server.3=192.168.161.134:
这里我们要注意的是,红色的部分分别就是:指定zookeeper的data和log文件夹,指定clientport访问的端口和servers的列表。
4. 生成pid文件
& & 我们在servers列表中,可以看到有server.1 ,server.2, server.3 三个字符串,生成pid文件的内容就取决如此,比如server.1的地址,
我们的pid文件里面就是1,不过要知道的是,pid文件要在data目录下,比如下面这样:
ok,同样的道理,的文件夹同3001就可以了,比如他们的zoo.cfg如下:
-------- &3002 --------------
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/root/zkcluster/3002/data
dataLogDir=/root/zkcluster/3002/logs
# the port at which the clients will connect
clientPort=3002
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=6
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.161.134:2888:3888
server.2=192.168.161.134:2889:3889
server.3=192.168.161.134:2890:3890
-------- &3003 --------------
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/root/zkcluster/3003/data
dataLogDir=/root/zkcluster/3003/logs
# the port at which the clients will connect
clientPort=3003
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=6
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.161.134:2888:3888
server.2=192.168.161.134:2889:3889
server.3=192.168.161.134:2890:3890
5. 启动各自服务器
& & 到现在为止,我们各个zookeeper程序的配置都结束了,接下来我们到各自目录的bin目录下,通过zkServer.sh来进行启动,比如下面这样:
ok,接下来我们来开始启动,通过如下命令即可:
./zkServer.sh start-foreground
现在我们都启动了,接下来我们可以用命令看下哪个server是leader,哪些是follower。。。
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zkcluster/3001/bin/../conf/zoo.cfg
Mode: follower
[root@localhost bin]#
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zkcluster/3002/bin/../conf/zoo.cfg
Mode: leader
[root@localhost bin]#
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zkcluster/3003/bin/../conf/zoo.cfg
Mode: follower
[root@localhost bin]#
到目前为止,我们的服务端操作都ok啦,,,是不是好吊。。。
二:驱动下载
1. &java的驱动就方便了,直接在源代码中就提供了,直接copy一下lib文件夹中的jar包就ok了,真是tmd的方便。
2. 用C#驱动的也不要太烦,要使用也是不难的,我们可以通过nuget下载一下就可以了,转换过来的版本也是3.4.8的最新版本,比如下面这样:
好了,大概就说这么多,希望对你有帮助~~~
阅读(...) 评论()

我要回帖

更多关于 分布式一致性算法 的文章

 

随机推荐