zookeeper的单实例和伪集群部署

原文链接: http://gudaoyufu.com/?p=1395

zookeeper工作方式

ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协 调/通知、集群管理、Master 选举、分布式锁和分布式队列 等功能。

在使用中,通常以集群的方式部署,Zookeeper节点部署越多,服务的可靠性越高,建议部署奇数个节点,因为zookeeper集群是以宕机个数过半才会让整个集群宕机的,集群节点数为奇数最佳。

zookeeper也可以以单实例或伪集群的方式运行,只不过这种方式不适用高并发的环境。下面记录一下部署zookeeper的过程,包括单实例和伪集群,分布式集群的部署。

安装JDK

zookeeper是由JAVA开发,运行需要有JAVA环境,安装前先安装JDK。

JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载完成后直接yum安装即可

单机实例部署

  • 下载

各版本可以在官方网站下载 : https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

这里下载的版本是 3.4.12

  • 解压至指定路径
[root@zookeeper ~]# tar zxf zookeeper-3.4.12.tar.gz  -C /data/
  • 修改解压目录名称,做伪集群或分布式集群最好将目录标明白,容易看清
[root@zookeeper ~]# mv /data/zookeeper-3.4.12/ /data/zookeeper1
  • 修改配置文件
[root@zookeeper ~]# cd /data/zookeeper1/conf/
[root@zookeeper conf]# mv zoo_sample.cfg zoo.cfg
  • 单机实例部署配置如下
[root@zookeeper conf]# vim zoo.cfg 
tickTime=2000 #2000毫秒=2秒
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/datadir
dataLogDir=/opt/zookeeper/logdir
clientPort=2181
  • 创建数据目录
[root@zookeeper conf]# mkdir -pv /opt/zookeeper/{datadir,logdata}
mkdir: 已创建目录 "/opt/zookeeper"
mkdir: 已创建目录 "/opt/zookeeper/datadir"
mkdir: 已创建目录 "/opt/zookeeper/logdata"

配置参数说明

  • ickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
    initLimit : 配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10
    2000=20秒。

  • syncLimit :配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
    • dataDir :是zookeeper保存数据的目录,默认情况下如果不定义dataLogDir,zookeeper将写数据的日志文件也保存在这个目录里,最好分开定义
  • clientPort : 客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
  • server.n=ipA:B:C :定义集群节点号,ip,监听端口,选举通信端口,n是一个数字,表示这个是第几号服务器,A是这个服务器的IP地址,B第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,C是在leader挂掉时专门用来进行选举leader所用的端口。

  • 启动zookeeper

[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh startZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 查看状态
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Mode: standalone  #单机模式
  • 查看端口 2181已经启动

zookeeper指令

zookeeper启动后,可以先连接测试是否正常

[root@zookeeper ~]# cd /data/zookeeper1/bin/
[root@zookeeper bin]# ./zkCli.sh -server 127.0.0.1WATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1(CONNECTED) 0]   #登录成功

zookeeper启动后会在当前用户的家目录生成状态日志zookeeper.out,平时服务状态出现问题可以从里面找到问题所在

连接上zk后,随意输入一个字符,通常是?号,会给出zookeeper的指令帮助

[zk: 127.0.0.1(CONNECTED) 0] ?
ZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]   #查看节点delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistory redo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acl   #创建节点addauth scheme authquit getAcl pathclose connect host:port  #连接指令
  • 创建节点
[zk: 127.0.0.1(CONNECTED) 1] create /test "test"
Created /test
[zk: 127.0.0.1(CONNECTED) 2] ls /
[zookeeper, test]
  • 获取节点内容
[zk: 127.0.0.1(CONNECTED) 3] get /test 
test
cZxid = 0x8  :该节点是由哪个事务ID产生
ctime = Sat Sep 01 21:41:06 CST 2018
mZxid = 0x8  :最近更新了该节点的事务ID
mtime = Sat Sep 01 21:41:06 CST 2018
pZxid = 0x8  :该节点的子节点列表被修改的事务ID
cversion = 0 :子节点版本号
dataVersion = 0 : 数据版本号
aclVersion = 0 : ACL版本号
ephemeralOwner = 0x0  
dataLength = 4  : 数据长度
numChildren = 0  : 子节点个数

乐观并发访问控制和悲观并发访问控制 —延伸

  • 更新节点
[zk: 127.0.0.1(CONNECTED) 4] set /test "test path"
  • 删除节点
[zk: 127.0.0.1(CONNECTED) 6] delete /test
[zk: 127.0.0.1(CONNECTED) 7] ls /test
Node does not exist: /test
#如果删除有子目录的节点,使用rmr指令

临时节点不能有子节点

ookeeper四字命令

使用telnet可以连接zookeeper发送4个字符的命令。

[root@zookeeper bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ruok  #探测是否存活
imokConnection closed by foreign host.
[root@zookeeper bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stat            #查看zk版本信息
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:/127.0.0.1:52636[0](queued=0,recved=1,sent=0)Latency min/avg/max: 0/2/308
Received: 248
Sent: 247
Connections: 1
Outstanding: 0
Zxid: 0xc
Mode: standalone
Node count: 5
Connection closed by foreign host.
[root@zookeeper bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
conf   #查看节点配置信息
clientPort=2181
dataDir=/opt/zookeeper/datadir/version-2
dataLogDir=/opt/zookeeper/logdir/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
Connection closed by foreign host.

zookeeper伪集群部署

zookeeper伪集群是部署在一台服务器上,通过创建多个工作目录配置项等,实现多实例的运行

在上面的基础上,再添加两个实例

  • 将原来/data/zookeeper1目录复制
[root@zookeeper ~]# cp -ar /data/zookeeper1/ /data/zookeeper2
[root@zookeeper ~]# cp -ar /data/zookeeper1/ /data/zookeeper3
[root@zookeeper ~]# ls /data/
zookeeper1  zookeeper2  zookeeper3
  • 修改zookeeper1配置文件
[root@zookeeper ~]# vim  /data/zookeeper1/conf/zoo.cfg dataDir=/opt/zookeeper/datadir     #各伪节点目录不能相同
dataLogDir=/opt/zookeeper/logdir
clientPort=2181   #各伪节点端口不能相同#下面的节点定义各伪节点要相同
server.1=192.168.214.171:2888:3888 
server.2=192.168.214.171:2889:3889
server.3=192.168.214.171:2890:3890
  • 修改zookeeper2配置文件
[root@zookeeper ~]# vim  /data/zookeeper2/conf/zoo.cfg dataDir=/opt/zookeeper2/datadir
dataLogDir=/opt/zookeeper2/logdir
clientPort=2182
server.1=192.168.214.171:2888:3888
server.2=192.168.214.171:2889:3889
server.3=192.168.214.171:2890:3890
  • 修改zookeeper3配置文件
dataDir=/opt/zookeeper3/datadir
dataLogDir=/opt/zookeeper3/logdir
clientPort=2183
server.1=192.168.214.171:2888:3888
server.2=192.168.214.171:2889:3889
server.3=192.168.214.171:2890:3890
  • 创建数据存放目录
[root@zookeeper ~]# mkdir -pv /opt/zookeeper{2,3}/{datadir,logdir}
mkdir: 已创建目录 "/opt/zookeeper2"
mkdir: 已创建目录 "/opt/zookeeper2/datadir"
mkdir: 已创建目录 "/opt/zookeeper2/logdir"
mkdir: 已创建目录 "/opt/zookeeper3"
mkdir: 已创建目录 "/opt/zookeeper3/datadir"
mkdir: 已创建目录 "/opt/zookeeper3/logdir"
  • 为每个节点设置节点ID号
[root@zookeeper ~]# echo 1 > /opt/zookeeper/datadir/myid
[root@zookeeper ~]# echo 2 > /opt/zookeeper2/datadir/myid
[root@zookeeper ~]# echo 3 > /opt/zookeeper3/datadir/myid[root@zookeeper ~]# cat /opt/zookeeper/datadir/
myid       version-2/ 
[root@zookeeper ~]# cat /opt/zookeeper/datadir/myid 
1
[root@zookeeper ~]# cat /opt/zookeeper2/datadir/myid 
2
[root@zookeeper ~]# cat /opt/zookeeper3/datadir/myid 
3
  • 启动集群
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED[root@zookeeper ~]# /data/zookeeper2/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED[root@zookeeper ~]# /data/zookeeper3/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper3/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 查看状态
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Mode: leader[root@zookeeper ~]# /data/zookeeper2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper2/bin/../conf/zoo.cfg
Mode: follower[root@zookeeper ~]# /data/zookeeper3/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper3/bin/../conf/zoo.cfg
Mode: follower
  • 测试master切换

关闭leader节点

[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED#zookeeper2节点立即变成了leader[root@zookeeper ~]# /data/zookeeper2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper2/bin/../conf/zoo.cfg
Mode: leader
  • 再启动zookeeper1节点,会以follower角色工作
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Mode: follower

关于zookeeper的单机模式和伪集群就写到这,分布式集群部署点击阅读

转载于:https://www.cnblogs.com/tchroot/p/9591801.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP开发常见功能实现流程

一、pc端网站登录 1、获取并过滤用户提交的用户名和密码以及验证码 2、验证用户提交验证码和session中的验证码是否一致 3、验证用户名是否存在 4、根据用户名获取密码,并校验密码是否一致 5、密码一致,则登录成功,跳转到对应的首页 图示…

七牛直播云服务技术揭秘

以下根据七牛云首席布道师何李石现场演讲内容整理。 直播模型及其实现 一个通用的直播模型一般包括三个模块:主播方、服务器端和播放端。 首先是主播方,它是产生视频流的源头,由一系列流程组成: 第一,通过一定的设备来…

golang 标准库间依赖的可视化展示

简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程…

Amazon Alexa 新里程碑: 50000 个功能、 20000 种设备、 3500 个品牌

几个月过去&#xff0c;Alexa的设备连接量、活跃度等各项数据又攀升了。昨日&#xff0c;亚马逊智慧家庭副总裁DanielRausch在IFA大会上公布了Alexa的各项数据&#xff1a;全球范围内&#xff0c;Alexa已经拥有50000个功能&#xff0c;与20000种设备相容&#xff0c;并与超过35…

C# 计算耗时的三种方法

概述计算一段程序的耗时是我们在编程中很常见的用法&#xff0c;那这节内容就通过实例的方式来演示几种常用的统计耗时的方法.方法一&#xff1a;stopwatchstatic void Main(string[] args){Stopwatch sw new Stopwatch();sw.Start();Thread.Sleep(999);sw.Stop();Console.Wri…

《HTML5 2D游戏编程核心技术》——第1章,第1.3节特别功能

本节书摘来自华章出版社《HTML5 2D游戏编程核心技术》一书中的第1章&#xff0c;第1.3节特别功能&#xff0c;作者&#xff3b;美&#xff3d; 戴维吉尔里&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.3 特别功能 Snail Bait游戏有3个特别的功能&a…

XunSearch的安装和加入服务器开机脚本以及将目录写入系统变量

一、安装xunserach 1、cd ~ 2、wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 #下载最新xunsearch包 3、tar -xjf xunsearch-full-latest.tar.bz2 #解压xunsearch包 4、cd xunsearch-full-1.4.11/ #进入xunsearch包目录 5、sh setup.sh #执…

dubbo源码解析-zookeeper创建节点

前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码解析-zookeeper连接中已经讲到,这周解析的是另一道,即服务提供者能实现失效踢出是根据什么原…

配置mysql为主主复制步骤

mysql版本&#xff1a;mysql-5.6.24-solaris10-sparc-64bit.tar 操作系统&#xff1a;solaris 11g u10 操作用户&#xff1a;使用非root进行操作安装&#xff0c;a路服务器ip地址为192.168.1.1 b路ip地址为192.168.1.2&#xff08;应改为实际ip地址&#xff09; 1&#xff0c;安…

XunSearch的使用

一、项目的配置文件 1、要想使用xunsearch&#xff0c;首先需要进行配置文件的配置。 默认目录在app下&#xff0c;如下面的结构&#xff0c;每一个搜索项目都需要有一个ini文件进行相应的配置。 举例&#xff1a; project.name novel project.default_charset utf-8 serv…

《VMware vSphere设计(原书第2版)》——1.1 什么是设计

本节书摘来自华章出版社《VMware vSphere设计&#xff08;原书第2版&#xff09;》一 书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a;[美] 福布斯格思里&#xff08;Forbes Guthrie&#xff09;斯科特罗威&#xff08;Scott Lowe&#xff09;肯德里克科尔曼&…

SqlKata - 方便好用的 Sql query builder

SqlKata查询生成器是一个用C# 编写的功能强大的Sql查询生成器。它是安全的&#xff0c;与框架无关。灵感来源于可用的顶级查询生成器&#xff0c;如Laravel Query Builder和 Knex&#xff1a;https://knexjs.org/。SqlKata有一个富有表现力的API。它遵循一个干净的命名约定&…

编写高质量代码:改善Java的151个建议四(基本类型)21-30

该书籍PDF下载地址&#xff1a;http://download.csdn.net/download/muyeju/10001473 基本类型有8个&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;char&#xff0c;long&#xff0c;double&#xff0c;float&#xff0c;boolean 21.用偶判断&#xff0c;不用奇…

ABP vNext微服务架构详细教程(补充篇)——单层模板(下)

业务代码2聚合服务聚合服务层和基础服务层相同的道理&#xff0c;在Demo.Core.Contracts增加Services文件夹&#xff0c;并添加Notifications子文件夹&#xff0c;在其中添加Dtos文件夹并添加两个DTO与基础服务对应&#xff1a;using Volo.Abp.Application.Dtos;namespace Demo…

PHP 电子商城基本数据表

1、品牌表 tp_brand CREATE TABLE tp_brand (id smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 品牌表,name varchar(60) NOT NULL DEFAULT COMMENT 品牌名称,logo varchar(80) NOT NULL DEFAULT COMMENT 品牌logo,desc text NOT NULL COMMENT 品牌描述,url varcha…

摘要,日志

1.hashlib 模块: 由于数据的不安全性,为了保证用户的信息绝对安全,所有所有人的账号密码不能以明文的形式存储, 而是经过适当的处理以密文的形式存储. hashlib对同一个字符串在不同的语言,不同的环境(操作系统,版本,时间)中加密得到的是同一个密文串,不同的字符串得到的密文是不…

《网站情感化设计与内容策略》一第1章 情感化设计1.1 革命:有失亦有得

本节书摘来自异步社区《网站情感化设计与内容策略》一书中的第1章&#xff0c;第1.1节&#xff0c;作者 【美】Aarron Walter , Erin Kissane&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 第1章 情感化设计 网站情感化设计与内容策略 1.1 革命&#xff1…

php自动加载机制的实现

一、什么是自动加载 自动加载就是当我们在当前文件中实例化一个不存在的类时&#xff0c;调用自动加载机制引入相应的类文件。 注&#xff1a;自动加载有两种方式&#xff08;都是php内置的&#xff09;&#xff0c;一种是通过__autoload(),另一种是通过spl_autoload_registe…

MySQL之 从复制延迟问题排查

一、从库复制延迟问题 1、可能的原因如下&#xff08;1&#xff09;主从服务器处于不同的网络之中&#xff0c;由于网络延迟导致&#xff1b;&#xff08;2&#xff09;主从服务器的硬件配置不同&#xff0c;从服务器的硬件配置&#xff08;包括内存&#xff0c;CPU&#xff0c…

《树莓派渗透测试实战》——2.12 用例子总结以上步骤

本节书摘来异步社区《树莓派渗透测试实战》一书中的第2章&#xff0c;第2.12节&#xff0c;作者【美】Joseph Muniz&#xff08;约瑟夫 穆尼斯&#xff09; , Aamir Lakhani&#xff08;阿米尔 拉克哈尼&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号…