zookeeper设置密码_Zookeeper详细教程、分布式协调服务原理
Zookeeper分布式服务框架是Apache Hadoop的一个子项目,主要为分布式系统提供协调服务以及一些数据管理问题,如命名服务、集群管理、分布式应用配置等。zookeeper可以将简单易用的接口和高效稳定的系统提供给用户。在大型网站中,zookeeper一直占据着重要地位,主要功能如下:zookeeper是为别的分布式程序服务的Zookeeper本身就是一个分布式程序(只要有半数以上节点存
Zookeeper分布式服务框架是Apache Hadoop的一个子项目,主要为分布式系统提供协调服务以及一些数据管理问题,如命名服务、集群管理、分布式应用配置等。zookeeper可以将简单易用的接口和高效稳定的系统提供给用户。
在大型网站中,zookeeper一直占据着重要地位,主要功能如下:
zookeeper是为别的分布式程序服务的
Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务
虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
为用户程序提供数据节点监听服务;
管理(存储,读取)用户程序提交的数据;
一、zookeeper集群安装
由于zookeeper的集群投票选主机制(下面会介绍),超过半数的节点投票才能完成选主。并且必须超过半数的节点存活才能提供服务。所以集群中节点数最好为奇数台,但不少于3台。我们将我们的zookeeper集群安装到三台虚拟机上。
1.1 环境准备
三台虚拟机
192.168.66.101
192.168.66.102
192.168.66.103
JDK安装包(jdk-7u71-linux-i586.tar.gz)
zookeeper安装包(zookeeper-3.4.5.tar.gz)
1.2 创建zk用户
登录三台虚拟机,添加zookeeper的管理用户,执行如下命令添加一个新用户,注意必须使用root用户权限来添加新用户,需要在三台虚拟机上都要创建一个新用户。
groupadd zkg #添加一个组
useradd zk -g zkg # 添加一个用户,并制定该用户属于zkg组
passwd # 给用户设置密码,下面提示输入密码,以及确认密码
1.3 安装
三台虚拟机的用户创建完成之后,在一台虚拟机上来安装zookeeper,切换到刚创建的用户下执行如下命令
su zk #切换到zk用户cd ~ # 进入zk用户的home目录
使用ftp工具将jdk安装包和zookeeper安装包上传至任一台虚拟机中zk用户home目录下,并解压至apps目录下
mkdir appstar -zxvf jdk-7u71-linux-i586.tar.gz -C apps/tar -zxvf zookeeper-3.4.5.tar.gz -C apps/
按照下面的步骤,配置环境变量,JDK安装完毕,注意三台机器都需要配置
su # 切换到root用户
vi /etc/profile # 编辑系统配置文件,将下面三行内容粘贴至文件末尾
export JAVA_HOME=/home/zk/apps/jdk-7u71-linux-i586export ZOOKEEPER_HOME=/home/zk/apps/zookeeper-3.4.5export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin
source /etc/profile # 使修改后配置文件生效
su zk # 切换为zk用户
检查jdk的安装是否成功,只检查已有加压文件的机器
java -version # 查看jdk版本信息
修改zookeeper的配置文件
cd ~/apps/zookeeper-3.4.5/conf # 进入到zookeeper的配置文件存放目录
cp zoo_sample.cfg zoo.cfg # 将zoo_sample.cfg复制一份,并更名为zoo.cfg
vi zoo.cfg # 编辑zoo.cfg并将下面内容添加到文件末尾
server.1=192.168.66.101:2888:3888 # (主机名, 心跳端口、数据端口)server.2=192.168.66.102:2888:3888server.3=192.168.66.103:2888:3888
修改dataDir和dataLogDir的值
dataDir=/home/zk/apps/zookeeper-3.4.5/datadataLogDir=/home/zk/apps/zookeeper-3.4.5/log
:wq #保存并退出
创建data和log目录,用于存放数据和日志信息
cd /home/zk/apps/zookeeper-3.4.5/mkdir -m 755 datamkdir -m 755 log
在data文件夹下新建myid文件,myid的文件内容为1
cd data/
echo 1 > myid #新建myid文件,并输入内容为1
将配置好的文件目录发至其他机器上
scp -r /home/zk/apps zk@192.168.66.102:/home/zk/ # 通过scp将apps目录发至其他机器,需要输入密码
scp -r /home/zk/apps zk@192.168.66.103:/home/zk/
修改其他机器上的myid
到192.168.66.102上:修改myid为:2
到192.168.66.103上:修改myid为:3
启动每台机器上的zookeeper
zkServer.sh start
查看集群状态
jps # 查看进程
zkServer.sh status #查看集群状态,主从信息
二、zookeeper的结构和命令
2.1 zookeeper特性
Zookeeper:一个leader,多个follower组成的集群
全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
分布式读写,更新请求转发,由leader实施
更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
数据更新原子性,一次数据更新要么成功,要么失败
实时性,在一定时间范围内,client能读到最新数据
2.2 zookeeper数据结构
层次化的目录结构,命名符合常规文件系统规范(见下图)
每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详细讲解)
客户端应用可以在节点上设置监视器(后续详细讲解)
2.3 节点类型
Znode有两种类型
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除)
Znode有四种形式的目录节点(默认是persistent )
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL
创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
2.4 zookeeper命令行操作
运行 zkCli.sh –server 进入命令行工具
zkCli.sh –server 192.168.66.101
ls / #查看当前 ZooKeeper 中所包含的内容
create /zk "myData" # 创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串
get /zk # 我们运行 get 命令来确认 znode 是否包含我们所创建的字符串
get /zk watch
#监听这个节点的变化,当另外一个客户端改变/zk时,它会打出下面的
#WATCHER::
#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
set /zk "zsl" #通过 set 命令来对 zk 所关联的字符串进行设置
delete /zk # 删除一个节点
rmr /zk # 删除一个节点
2.5 zookeeper Java api的使用
2.5.1 基本使用
org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话
它提供了表 1 所示几类主要方法
功能
描述
create
在本地目录树中创建一个节点
delete
删除一个节点
exists
测试本地是否存在目标节点
get/set data
从目标节点上读取 / 写数据
get/set ACL
获取 / 设置目标节点访问控制列表信息
get children
检索一个子节点上的列表
sync
等待要被传送的数据
2.5.2 是用Java API实现简单的增删改查
public class SimpleDemo {// 会话超时时间,设置为与系统默认时间一致private static final int SESSION_TIMEOUT = 30000;// 创建 ZooKeeper 实例ZooKeeper zk;// 创建 Watcher 实例Watcher wh = new Watcher() {public void process(org.apache.zookeeper.WatchedEvent event){System.out.println(event.toString());}};// 初始化 ZooKeeper 实例private void createZKInstance() throws IOException{zk = new ZooKeeper("weekend01:2181
更多推荐



所有评论(0)