zookeeper 实战 - Pymjer 的博客
下载
$ wget http://apache.forsale.plus/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
配置conf/zoo.cfg
# 客户端连接zookeeper服务的端口。这是一个TCP port。
clientPort=2181
# 内存数据结构的snapshot,便于快速恢复
dataDir=/data
# 存放顺序日志(WAL)
dataLogDir=/datalog
# 集群配置
server.1=192.168.8.154:20881:30881
server.2=192.168.8.153:20881:30881
server.3=192.168.8.152:20881:30881
dataLogDir如果没提供的话使用的则是dataDir,为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,这样就可以充分利用磁盘顺序写的特性。上面的配置中有两个TCP port。 后面一个是用于Zookeeper选举用的, 而前一个是Leader和Follower或Observer交换数据使用的。
启动与连接zookeeper
# 启动服务器
$ ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/dmall/app/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# 启动客户端
$ ./bin/zkCli.sh -server 192.168.8.154:2181
Connecting to 192.168.8.154:2181
# 查看服务器状态
$./ bin/zkServer.sh status
报错Invalid config, exiting abnormally
集群启动时,需要在dataDir目录下创建myid文件(touch myid),并按照集群顺序,依次在三台主机上的该文件下填写1,2,3(echo “1” > myid)
zooke 大专栏 zookeeper 实战 - Pymjer 的博客eper启服务的时候最好是依从myid从小到大依次重启
今天启动服务器后,发现客户端连接不上,错误如下
Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
查看服务器日志
$ tail -200f zookeeper.out
Have smaller server identifier, so dropping the connection: (3, 1)
意思是有更小的服务id,dropping了连接
google结论:重启服务的时候最好是依从myid从小到大依次重启, 因为这个里面又涉及到zookeeper另外一个设计.zookeeper是需要集群中所有集群两两建立连接, 其中配置中的3555端口是用来进行选举时机器直接建立通讯的端口, 为了避免重复创建tcp连接,如果对方myid比自己大,则关闭连接,这样导致的结果就是大id的server才会去连接小id的server,避免连接浪费.如果是最后重启myid最小的实例,该实例将不能加入到集群中,因为不能和其他集群建立连接, 这时你使用nc命令, 会有如下的提示: This ZooKeeper instance is not currently serving requests. 在zookeeper的启动日志里面你会发现这样的日志: Have smaller server identifier, so dropping the connection. 如果真的出现了这个问题, 也没关系, 但是需要先将报出该问题的实例起着,然后按照myid从小到大依次重启zk实例即可. 是的,我们确实碰到了这个问题, 因为我们稍后会将机房3的那个zk实例的myid变为0,并最后加入到11台实例的集群中,最后一直报这个问题. 参见
zookeeper 实战 - Pymjer 的博客的更多相关文章
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)
前言 今天正式开始写代码了,之前铺垫了很多了,包括 6 篇基础文章,一篇正式环境搭建,就是为了今天做准备,想温习的小伙伴可以再看看<Vue 基础入门+详细的环境搭建>,内容很多,这里就暂时 ...
- LAMP实战之构建博客网站
1.首先检查LAMP环境 [root@cairui htdocs]# ps -ef | grep httpd php Mar03 ? :: /opt/apache2.2.34/bin/httpd -k ...
- NuxtJS实战,一个博客系统
前言 这个项目诞生于17年5月,距今已有两年多了,在这两年期间经历了很多变更,从简单到复杂,又从复杂到简单,并且以后一直会保持这种简单状态.最近迎来了一次更新,因此特意分享一下.虽然只有我一个人使用( ...
- X-Tag实战:给博客加一个隐藏侧栏的功能
X-Tag是什么? X-Tag是一个库,这个库可以让你用面向对象的方式定义自定义标签并给与其功能,很适合用来写一些网页小组件. xtag.create('x-clock', class extends ...
- Django实战之古风博客
感谢 感谢杨青 大大的古风模板,设计的很棒,给个赞. 如有侵权,请联系我 运行环境 python3.6 Django==1.11.4 django-ckeditor==5.4.0 django-js- ...
- 【ASP.NET实战教程】基于ASP.NET技术下多用户博客系统全程实战开发(NNblog)
岁末主推:牛牛老师主讲,多用户博客系统,基于ASP.NET技术,年后将带来移动业务平台项目项目目标: 打造个性品牌Blogo,定制多用户博客 为每一个博客用户提供个性化的 blogo解决方案,打造精品 ...
- 实战Django:简易博客Part1
舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能 ...
- 项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(2)
本章主要讲什么(一句话)? <项目实战:基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(2)> -- 基于MongoDB的MyBlog数据库知识技术储备(上 ...
- Bootstrap 实战之响应式个人博客 (二)
阅读本博文前请参考:Bootstrap 实战之响应式个人博客 (一) 一.博客 1.结构 整体博客详情页的结构共包括四部分: 导航栏 博客主体内容 右侧栏:全局搜索框,广告位,推荐阅读 页尾 其中导航 ...
随机推荐
- java 计算函数运行时间
long start,end; start = System.currentTimeMillis(); for (int i = 0; i < 2000000000; i++) {} end = ...
- OpenCV On Android环境配置最新&最全指南(Eclipse篇)
简介 本教程是经过本人多次踩坑,并参考网上众多OpenCV On Android的配置教程总结而来,尽希望能帮助学习移动图像处理的朋友们少走弯路.这也是本人第一次在简书上发布文章,如有不足,希望各位d ...
- 18)C++对C的增强
在C++中所有的变量都必须有类型,但是在C语言中没有这个要求,C语言中的默认类型在C++中不合法, #include<stdio.h> f() { ; } int main() { int ...
- 基于JWT的Token认证机制及安全问题
[干货分享]基于JWT的Token认证机制及安全问题 https://bbs.huaweicloud.com/blogs/06607ea7b53211e7b8317ca23e93a891
- 14 微服务电商【黑马乐优商城】:day02-springcloud(理论篇一:HttpClient的简单使用)
本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一: ...
- xcode6 Images.xcassets添加LaunchImage
不使用LaunchScreen.xib,通过Images.xcassets新建LaunchImage做登陆界面 步骤: 1.创建LaunchImage
- 1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)
题目大意:CodeVs2822的简单版本 传送门 $Tarjan$强连通分量+缩点,若连通块的个数等于一则输出n:若缩点后图中出度为0的点个数为1,输出对应连通块内的点数:否则输出0: 代码中注释部分 ...
- layui 触发 select 下option 被选择事件
1.找到值为某一个的元素 var S0 = 'dd[lay-value='+ level+']'; 2.给该元素注册点击事件 siblings(兄弟节点) $('select[name=\'leve ...
- [LC] 1170. Compare Strings by Frequency of the Smallest Character
Let's define a function f(s) over a non-empty string s, which calculates the frequency of the smalle ...
- 计算 $s=1+(1+2)+(1+2+3)+\cdots+(1+2+3+\cdots+n)$
#include<stdio.h> //编写一个程序,计算 s=1+(1+2)+(1+2+3)+...+(1+2+3+...+n) 的值,要求n从键盘输入. main() { int i, ...