ZooKeeper(分布式协调服务)使用介绍

4)ACL

ZooKeeper 采用 ACL(Access Control Lists)策略来进行权限控制,类似于 Unix 文件系统的控制权限:

| 命令 | 作用 |

| :-- | :-- |

| create | 可以进行创建操作 |

| read | 可以进行查看操作 |

| write | 可以对创建的内容进行写入操作 |

| delete | 可以进行删除操作 |

| admin | 可以进行配置权限操作 |

3.Zab 协议介绍


  • Zab(ZooKeeper Atomic Broadcast 原子广播)协议是为分布式协调服务 ZooKeeper 专门设计的一种 支持崩溃恢复的原子广播协议;

  • 在 ZooKeeper 中,主要依赖 Zab 协议来实现分布式数据一致性;

  • 基于 Zab 协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本间的数据一致性。

二、ZooKeeper Cluster 安装

=========================================================================================

准备工作:

| 主机名 | 操作系统 | IP 地址 |

| :-- | :-- | :-- |

| ZooKeeper | CentOS 7.4 | 192.168.1.1 |

安装 JDK:下载地址(需要创建 Oracle 账号)

[root@ZooKeeper ~]# ls

anaconda-ks.cfg jdk-8u181-linux-x64.tar.gz

[root@ZooKeeper ~]# tar zxf jdk-8u181-linux-x64.tar.gz

[root@ZooKeeper ~]# ls

anaconda-ks.cfg jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz

[root@ZooKeeper ~]# mv jdk1.8.0_181 /usr/local/java

[root@ZooKeeper ~]# cat <> /etc/profile

export JAVA_HOME=/usr/local/java

export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

END

[root@ZooKeeper ~]# source /etc/profile

[root@ZooKeeper ~]# java -version

在这里插入图片描述

1.安装 ZooKeeper


[root@ZooKeeper ~]# wget http://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

[root@ZooKeeper ~]# ls

anaconda-ks.cfg apache-zookeeper-3.6.3-bin.tar.gz jdk-8u181-linux-x64.tar.gz

[root@ZooKeeper ~]# tar zxf apache-zookeeper-3.6.3-bin.tar.gz

[root@ZooKeeper ~]# mv apache-zookeeper-3.6.3-bin /usr/local/zookeeper

[root@ZooKeeper ~]# mkdir /usr/local/zookeeper/data

[root@ZooKeeper ~]# cat <> /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/local/zookeeper/data

clientPort=2181

END

注解:

  • tickTime:Client 和服务器间的通信会话限制(相当于健康检查,tickTime 的时间为 ms (1s = 1000ms)

  • initLimit:Leader 和 Follower 间初始通信限制。

  • syncLimit:Leader 和 Follower 间同步通信限制(当响应时间超于 syncLimit * tickTime 时,Leader 便会将 Follower 进行移除)

  • dataDir:此目录用于存放保存在内存数据库中的快照信息(当未配置 dataLogDir 参数时,日志信息也会存放到此目录)

  • clientPort:ZooKeeper 监听的端口,用于客户端连接使用。

启动 ZooKeeper

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh start # 启动

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh status # 查看状态

在这里插入图片描述

连接到 ZooKeeper

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

Welcome to ZooKeeper!

JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: 127.0.0.1:2181(CONNECTED) 0]

  • 当连接成功后,系统会输出 ZooKeeper 的相关配置信息和相关环境,并在屏幕上输出 Welcome to ZooKeeper! 等信息。

2.使用 Golang 连接 ZooKeeper 的 API 接口


[root@ZooKeeper ~]# git clone https://github.com/samuel/go-zookeeper.git

[root@ZooKeeper ~]# mv go-zookeeper /usr/local/go/src/

package main

import (

“fmt”

“time”

“go-zookeeper/zk”

)

func main() {

Hosts := []string{“192.168.1.1:2181”}

conn, _, err := zk.Connect(Hosts,time.Second * 5)

defer conn.Close()

if err != nil {

fmt.Println(err)

return

}

}

在这里插入图片描述

通过 Golang 实现对 ZooKeeper 的增删改查:

package main

import (

“fmt”

“time”

“go-zookeeper/zk”

)

var (

path = “/Zzz”

)

//增

func add(conn *zk.Conn) {

var data = []byte(“Hello ZooKeeper”)

// flags 的四种取值方式:

// 0 (永久.除非手动删除)

// zk.FlagEphemeral = 1 (短暂. session 断开则该节点也被删除)

// zk.FlagSequence = 2 (会自动在节点后面添加序号)

// 3 (Ephemeral 和 Sequence. 即短暂且自动添加序号)

var flags int32 = 0

// 获取访问控制权限

acls := zk.WorldACL(zk.PermAll)

create, err := conn.Create(path,data,flags,acls)

if err != nil {

fmt.Printf(“创建失败: %v\n”,err)

return

}

fmt.Printf(“创建: %v 成功\n”,create)

}

// 查

func get(conn *zk.Conn) {

data, _, err := conn.Get(path)

if err != nil {

fmt.Printf(“查询 %s 失败,err: %v\n”,path,err)

return

}

fmt.Printf(“%s 的值为 %s\n”,path,string(data))

}

// 删除与增加不同在于其函数中的 Version 参数. 其中 Version 使用 CAS 支持 (可以通过此种方式保证原子性)

// 改

func modify(conn *zk.Conn) {

new_data := []byte(“This is ZooKeeper”)

_, sate, _ := conn.Get(path)

_, err := conn.Set(path,new_data,sate.Version)

if err != nil {

fmt.Printf(“数据修改失败: %v\n”,err)

return

}

fmt.Println(“数据修改成功”)

}

// 删

func del(conn *zk.Conn) {

_, sate, _ := conn.Get(path)

err := conn.Delete(path,sate.Version)

if err != nil {

fmt.Printf(“数据删除失败: %v\n”,err)

return

}

fmt.Println(“数据删除成功”)

}

func main() {

hosts := []string{“192.168.1.1:2181”}

conn, _, err := zk.Connect(hosts,time.Second * 5)

defer conn.Close()

if err != nil {

fmt.Println(err)

return

}

/* 增删改查 */

add(conn)

get(conn)

modify(conn)

get(conn)

del(conn)

}

3.配置 ZooKeeper Cluster


  • 在原来的基础上,在增加两台服务器:

| 主机名 | 操作系统 | IP 地址 |

| :-- | :-- | :-- |

| ZooKeeper-2 | CentOS 7.4 | 192.168.1.2 |

| ZooKeeper-3 | CentOS 7.4 | 192.168.1.3 |

1)将 Java 和 ZooKeeper 传给新的服务器:

[root@ZooKeeper ~]# scp -r /usr/local/java root@192.168.1.2:/usr/local/

[root@ZooKeeper ~]# scp -r /usr/local/zookeeper root@192.168.1.2:/usr/local/

2)在新的服务器上启动 ZooKeeper:

[root@ZooKeeper ~]# cat <> /etc/profile

export JAVA_HOME=/usr/local/java

export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

END

[root@ZooKeeper ~]# source /etc/profile

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh start

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

image.png

更多笔记分享

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
" alt=“img” style=“zoom: 33%;” />

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

[外链图片转存中…(img-IwSzTVTC-1713440139490)]

[外链图片转存中…(img-UWdRaFaI-1713440139491)]

更多笔记分享

[外链图片转存中…(img-b3lTCqFM-1713440139491)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值