zookeeper集群的部署
因为这里zookeeper的集群部署都会2n+1台
Dubbo建议使用Zookeeper作为服务的注册中心。
Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将ZK集群的节点数量要为奇数(2n+1:如3、5、7个节点)较为合适。
zookeeper的介绍:
zookeeper是一个分布式的开源框架,它能很好的管理集群,而且提供协调分布式应用的基本服务。
它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
zookeeper本身可以以standalone模式(单节点状态)安装运行,不过它的长处在于通过分布式zookeeper集群(一个leader,多个follower),基于一定的策略来保证zookeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
zookeeper 集群角色介绍:
zookeeper集群中主要有两个角色:leader和follower。
领导者(leader),用于负责进行投票的发起和决议,更新系统状态。
学习者(learner),包括跟随者(follower)和观察者(observer)。
其中follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票。
而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
zookeeper解决节点个数的选择:
一个zookeeper集群需要运行几个zookeeper节点呢?
你可以运行一个zookeeper节点,但那就不是集群了。如果要运行zookeeper集群的话,最好部署3,5,7个zookeeper节点。本次实验我们是以3个节点进行的。
zookeeper节点部署的越多,服务的可靠性也就越高。当然建议最好是部署奇数个,偶数个不是不可以。但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个集群更佳。
你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper是高性能的。如果你的集群负载很重,不要把zookeeper和RegionServer运行在同一台机器上面,就像DataNodes和TaskTrackers一样。
ZooKeeper与Dubbo服务集群架构图

这里我们首先选择三台机器
10.19.42.53
10.19.190.32
10.19.165.206
1、 修改操作系统的/etc/hosts文件,添加IP与主机名映射:
添加下面三个解析:
10.19.42.53 zk-001
10.19.190.32 zk-002
10.19.165.206 zk-003
2.这里我们下载zookeeper的压缩包(这里我的jdk的环境是1.8)
cd /data/tools
上传压缩包zookeeper-3.4.9.tar.gz
tar -xf zookeeper-3.4.9.tar.gz
这里可以做一个软连接
ln -sv zookeeper-3.4.9 zookeeper
cd zookeeper
mkdir /data/zookeeper/{data,logs} -p
cp conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg

其他三个节点修改一下相应的地方即可
参数说明:
tickTime=2000
tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。
initLimit=10
initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
syncLimit=5
syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
dataDir=/home/wusc/zookeeper/node-01/data
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。
clientPort=2181
clientPort这个端口就是客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。
server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。
vim /data/zookeeper/zk1/data/myid
1
其他节点的值分别是2,3
添加如下防火墙规则
##### zookeeper
iptablse -A INPUT -m state --state NEW -m tcp -p tcp --dport 2081 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
重启防火墙:
# service iptables restart
增加zookeeper环境变量
编辑文件 /etc/profile,添加如下:
export ZOOKEEPER_HOME=/data/tools/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
增加zookeeper的启动脚本
cd /etc/rc.d/init.d
touch zookeeper && chmod +x zookeeper
vim zookeeperzookeeper集群的搭建很简单,我们只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。 当我们的集群安装完成之后,我们可以通过客户端脚本连接到zookeeper集群上。对于客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个zookeeper结点上建立到服务集群的连接,例如
#!/bin/bash
case $1 in
start) su root /data/tools/zookeeper/bin/zkServer.sh start;;
stop) su root /data/tools/zookeeper/bin/zkServer.sh stop;;
status) su root /data/tools/zookeeper/bin/zkServer.sh status;;
restart) su root /data/tools/zookeeper/bin/zkServer.shrestart;;
*) echo "requirestart|stop|status|restart" ;;
esac// 添加到开机启动 chkconfig zookeeper on chkconfig --add zookeeper
// 启动或停止 service zookeeper start | stop | restart 这里我们可以查看一下我们的zookeeper服务端口,就是我们上面定义的那个
这里我们启动第一台的时候会报错,接着把接下来的两台服务器起来之后才不会报错,我们可以看一下三台服务器的status.我们会看到有一台服务器的状态是leader,其余两台的状态是follower
如果我们这里是单台的zookeeper的话,我们查看到的状态是standalone,这里我们在搭建zookeeper集群的时候一定要停止已经启动的zookeeper,
bin/zkCli.sh -server 10.19.190.32:2081
这里有一点要注意的是。我们配置hosts的时候
[wwwad@zk3 ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 zk3
10.19.118.88 zk1
10.19.106.84 zk2
10.19.171.44 zk3
这个我把127.0.0.1的解析到了zk3,而且还是放在10.19.171.44 zk3之前,我怎么起都是报错的。这里我们需要把127.0.0.1的解析去掉,或者放在最后
参考文章:
因为我放文字链接会报错。所以截图了

烂泥的文章:http://www.ilanni.com/?p=11393
http://www.open-open.com/lib/view/open1454043410245.html
http://blog.csdn.net/hongtu1993/article/details/53215587
可以看看zookeeper服务器配置项详解:
http://www.bug315.com/article/159.htm
http://www.bug315.com/article/160.htm
zookeeper集群的部署的更多相关文章
- kafka集群和zookeeper集群的部署,kafka的java代码示例
来自:http://doc.okbase.net/QING____/archive/19447.html 也可参考: http://blog.csdn.net/21aspnet/article/det ...
- centos7下zookeeper集群安装部署
应用场景:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件. 它是一个为分布式应用提供一致性服务的软 ...
- Zookeeper集群服务部署
Zookeeper是一个分布式.开源的分布式应用程序协调服务,是Google的Chubby的开源实现,也是和Hadoop.Hbase相互配合的重要组件,作用就是为分布式应用程序提供一致性服务,包括配置 ...
- (个人)Zookeeper集群环境部署
一.准备工作 1. 下载zookeeper,下载地址:https://zookeeper.apache.org/releases.html#download 2. 下载CentOS7的镜像,下载地址 ...
- k8s 上使用 StatefulSet 部署 zookeeper 集群
目录 StatefulSet 部署 zookeeper 集群 创建pv StatefulSet 测试 StatefulSet 部署 zookeeper 集群 参考 k8s官网zookeeper集群的部 ...
- Storm集群安装部署步骤【详细版】
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...
- Storm集群安装部署步骤
本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以"注意事项"的形式给出. 1. Sto ...
- Linux下zookeeper集群搭建
Linux下zookeeper集群搭建 部署前准备 下载zookeeper的安装包 http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper ...
- HBase集成Zookeeper集群部署
大数据集群为了保证故障转移,一般通过zookeeper来整体协调管理,当节点数大于等于6个时推荐使用,接下来描述一下Hbase集群部署在zookeeper上的过程: 安装Hbase之前首先系统应该做通 ...
随机推荐
- C++:fread、fwrite函数用法
主要内容: fread.fwrite函数的用法 1.函数功能 用来读写一个数据块. 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,c ...
- C#.NET常见问题(FAQ)-get set属性有什么意义
使用get,set可以让类定义的更加规范,因为正常情况下,如果我们写一个自定义类,他的属性要么是public,要么是private,但是如果public的属性又要做限制,比如人年龄不允许负数,也不允许 ...
- EL运算符(web基础学习笔记十七)
一.EL语法 1.1.语法结构 ${expression} 1.2.[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一 ...
- Java 类型, Hibernate 映射类型及 SQL 类型之间的相应关系
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- Linux的网卡由eth0变成了eth1怎么办?
Linux的网卡由eth0变成了eth1怎么办? Linux的网卡由eth0变成了eth1,如何修复 使用wmware安装了linux,安装成功后,使用的网卡是eth0,没有eth1.但是用过一段时间 ...
- javaweb笔记全套
Lesson 1 一.eclipse工具的使用 1. java代码的位置 1) 选择工作空间 workspace 选择一个文件夹存放程序(代码) 不要用中文和空格 2) 新建一个java 工程(Pr ...
- jquery遍历集合&数组&标签
jquery遍历集合&数组的两种方式 CreateTime--2017年4月24日08:31:49Author:Marydon 方法一: $(function(){ $("inp ...
- 〖Ruby〗Ruby运算符/优先级
优先级 能否重写 运行符 描述 最高 Y [] []= 数组下标 数组元素赋值 Y ** 冥乘 Y ! ~ + - 非 位非 一元加 负号 Y * / % 乘 除 模 Y + - 加 减 Y > ...
- 【laravel5.4】中jquery的post Ajax提交
1.post的ajax需要提交csrf_token字段,进行安全过滤 <meta name="csrf-token" content="{{ csrf_token( ...
- laravel5.4中{{$name}} 和 {{!! $name !!}} 的区别:后者原生输出。前者转义
