因为这里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 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,
zookeeper集群的搭建很简单,我们只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。 当我们的集群安装完成之后,我们可以通过客户端脚本连接到zookeeper集群上。对于客户端来说,zookeeper集群是一个整体,连接到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集群的部署的更多相关文章

  1. kafka集群和zookeeper集群的部署,kafka的java代码示例

    来自:http://doc.okbase.net/QING____/archive/19447.html 也可参考: http://blog.csdn.net/21aspnet/article/det ...

  2. centos7下zookeeper集群安装部署

    应用场景:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件. 它是一个为分布式应用提供一致性服务的软 ...

  3. Zookeeper集群服务部署

    Zookeeper是一个分布式.开源的分布式应用程序协调服务,是Google的Chubby的开源实现,也是和Hadoop.Hbase相互配合的重要组件,作用就是为分布式应用程序提供一致性服务,包括配置 ...

  4. (个人)Zookeeper集群环境部署

    一.准备工作 1. 下载zookeeper,下载地址:https://zookeeper.apache.org/releases.html#download  2. 下载CentOS7的镜像,下载地址 ...

  5. k8s 上使用 StatefulSet 部署 zookeeper 集群

    目录 StatefulSet 部署 zookeeper 集群 创建pv StatefulSet 测试 StatefulSet 部署 zookeeper 集群 参考 k8s官网zookeeper集群的部 ...

  6. Storm集群安装部署步骤【详细版】

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...

  7. Storm集群安装部署步骤

    本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以"注意事项"的形式给出. 1. Sto ...

  8. Linux下zookeeper集群搭建

    Linux下zookeeper集群搭建 部署前准备 下载zookeeper的安装包 http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper ...

  9. HBase集成Zookeeper集群部署

    大数据集群为了保证故障转移,一般通过zookeeper来整体协调管理,当节点数大于等于6个时推荐使用,接下来描述一下Hbase集群部署在zookeeper上的过程: 安装Hbase之前首先系统应该做通 ...

随机推荐

  1. linux内核——进程管理

    在讲进程之前先说一下进程的堆栈的吧: 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同一时候,会为进程创建对应的堆栈.每一个进程会有两个栈,一个用户栈.存在于用户空间,一个内核栈 ...

  2. 【转】TCP/IP详解学习笔记(二)

    TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...

  3. linux more 上一页,下一页

    linux more 上一页,下一页 使用more命令可以分页查看内容: 如: more install.txt 分页查看文本内容: 按回车:默认下一行数据: 按空格键盘,默认下一页,以当前屏幕为单位 ...

  4. rmdir 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/10/27/2742076.html rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目 ...

  5. 算法笔记_174:历届试题 地宫取宝(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明 ...

  6. Eclipse中jar包关联JDK源代码

    1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"2.此 ...

  7. MariaDB初始化和启动故障

    初始化故障排查 1. so依赖缺失 比如报这样的错误: ./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot ...

  8. HDU 5399 Too Simple(过程中略微用了一下dfs)——多校练习9

    Too Simple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  9. 自定义AppSession

    TelnetSession.cs public class TelnetSession:AppSession<TelnetSession> { protected override voi ...

  10. rlwrap插件,实现sqlplus上下翻页

    oracle在Linux下,sqlplus中不能上下翻,最主要我经常打错字!嘿嘿 01.下载 RPM  :http://rpmfind.net/linux/rpm2html/search.php?qu ...