zoukankan      html  css  js  c++  java
  • Zookeeper的介绍与基本部署

    简介

    zookeeper是一个为分布式应用所设计的分布式的、开源的协调服务。它提供了一项基本服务:分布式锁服务,同时也提供了分布式应用数据的维护和管理机制,包括统一命名服务、状态同步服务、集群管理、分布式消息队列、分布式应用配置项的管理等。zookeeper支持独立安装以及集群部署。

    zookeeper官方网站:http://zookeeper.apache.org/

    zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/

    架构

    zookeeper

    Zookeeper集群主要角色有Server和Client,其中Server分为Leader、Follower和Observer三个角色:

    • Leader:领导者角色,主要负责投票的发起和决议,以及更新系统状态
    • Follower:跟随者角色,用于接收客户请求并向客户端返回结果,在选主过程中参与投票
    • Observer:Observer可以接收客户端连接,将写请求转发给leader。但observer不参加投票,只同步leader状态。observer的目的是为了扩展系统,提高读取速度。
    • Client:客户端,用于向zk发起请求。

    zk集群中每个server在内存中存储一份数据。在zk启动时,将从实例中选举一个server作为leader,leader负责处理数据更新等操作,当且仅当大多数server在内存中成功修改数据,才认为数据修改成功。

    zk写的流程:

    1. 客户端首先和一个server或者observer通信,发起写请求
    2. server将写请求转发给leader
    3. leader再将写请求转发给其他server,其他server在接收到写请求后写入数据并响应leader
    4. leader在接收到大多数写成功回应后,认为数据写成功
    5. server响应client,完成一次写操作

    安装

    StandAlone模式

    1. 安装

    tar xf zookeeper-3.4.14.tar.gz -C /usr/local/
    cd /usr/local/
    ln -s zookeeper-3.4.14 zookeeper
    # 创建数据目录和日志目录
    mkdir /usr/local/zookeeper/{data,logs}
    

    注: zk的安装依赖java,所以需要先安装jdk

    2. 修改配置

    cd /usr/local/zookeeper/conf
    cp zoo_sample.conf zoo.conf
    
    #vim zoo.conf
    
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zookeeper/data
    dataLogDir=/usr/local/zookeeper/logs
    clientPort=2181
    

    配置项说明:

    • tickTime: zk中使用的基本时间单元,单位为毫秒,用于控制心跳和超时。更低的tickTime值可以更快的发现超时问题
    • initLimit:zk集群中follower初始化连接到leader时,最长能忍受多少个tickTime,默认值为10,即为20s
    • syncLimit:用于配置leader和follower间进行心跳检测的最大超时时间。如果在设置的时间内followers无法与leader进行通信,那么follower将会被丢弃。默认值为5,即10s
    • dataDir:zk用于存储内存数据库快照的目录。如果不指定dataLogDir参数,则数据库更新的事务日志也将会存储在该目录下
    • dataLogDir:指定zk事务日志的存储目录
    • clientPort:服务器监听客户端连接的端口,默认值为2181
    • maxClientCnxns:限制单个客户端与单台服务之间的并发连接数,默认值为60,设置为0则不限制
    • autopurge.snapRetainCount:配置zk在自动清理的时候需要保存的数据文件快照的数量和对应的事务日志文件,默认为3
    • autopurge.purgeInterval:和autopurge.snapRetainCount配置使用,用于配置zk自动清理文件的频率,默认为1小时,即默认开启自动清理功能,设置为0,则表示禁用清理功能

    3. 启动

    /usr/local/zookeeper/zkServer.sh start
    

    4. 验证

    [root@app conf]# telnet 127.0.0.1 2181
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    stat
    Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
    Clients:
     /127.0.0.1:42638[0](queued=0,recved=1,sent=0)
    
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0x0
    Mode: standalone
    Node count: 4
    

    5. 基本用法

    [root@app conf]# /usr/local/zookeeper/bin/zkCli.sh -server localhost:2181
    Connecting to localhost:2181
    ...
    [zk: localhost:2181(CONNECTED) 0] help
    ZooKeeper -server host:port cmd args
    	stat path [watch]
    	set path data [version]
    	ls path [watch]
    	delquota [-n|-b] path
    	ls2 path [watch]
    	setAcl path acl
    	setquota -n|-b val path
    	history 
    	redo cmdno
    	printwatches on|off
    	delete path [version]
    	sync path
    	listquota path
    	rmr path
    	get path [watch]
    	create [-s] [-e] path data acl
    	addauth scheme auth
    	quit 
    	getAcl path
    	close 
    	connect host:port
    [zk: localhost:2181(CONNECTED) 1]
    

    Distributed模式

    1. 配置hosts

    #vim /etc/hosts
    
    zk1 192.168.0.101
    zk2 192.168.0.102
    zk3 192.168.0.103
    

    2. 配置zoo.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zookeeper/data
    dataLogDir=/usr/local/zookeeper/logs
    clientPort=2181
    server.1=192.168.0.101:2888:3888
    server.2=192.168.0.102:2888:3888
    server.3=192.168.0.103:2888:3888
    

    配置项说明:

    • 集群模式中,集群中的每台机器都需要感知其它机器,在zoo.cfg配置文件中,可以按照如下格式进行配置:server.id=host:port:port,其中id即server id,用于标识服务器在集群中的序号。每台zk服务器上,都需要在数据目录下创建一个myid文件,该文件中只有一行内容,即对应于每台服务器的server id。
    • zk集群中,每台服务器上的zoo.cfg配置文件内容一致

    3. 创建myid文件

    # 每个服务器上的myid内容都不同,且需要保证和自己的zoo.cfg配置文件中"server.id=host:port:port"的id值一致
    # id的范围是1~255
    echo "1" > /usr/local/zookeeper/data/myid
    

    4. 启动服务

    /usr/local/zookeeper/zkServer.sh start
    

    5. 验证

    [root@app conf]# telnet 127.0.0.1 2181
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    stat
    Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
    Clients:
     /127.0.0.1:41142[0](queued=0,recved=1,sent=0)
    
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0x100000000
    Mode: leader
    Node count: 4
    Proposal sizes last/min/max: -1/-1/-1
    Connection closed by foreign host.
    

    6. 查询状态

    [root@app conf]# ../bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    Mode: leader
    
  • 相关阅读:
    ASP.Net无法连接Oracle的一个案例
    给Oracle添加split和splitstr函数
    笨猪大改造
    设计模式(一)策略模式
    jQuery select 操作全集
    现在的心情
    jquery 自动实现autocomplete+ajax
    c# 配置连接 mysql
    jquery.ajax和Ajax 获取数据
    C# 加密可逆
  • 原文地址:https://www.cnblogs.com/breezey/p/10849306.html
Copyright © 2011-2022 走看看