
1 java -version 查看JDK版本
2 rpm -qa | grep java 查找有哪些java相关的包
3 rpm -e --nodeps tzdata-java-2015e-1e16noarch 卸载,--nodeps 就是no depends的意思,忽略相关依赖强制卸载
4 mkdir /export/server 创建zookeeper和 JDK安装的目录
5
mv jdk180_65targz /export/server 把jdk安装包移动到/export/server文件夹
cd /export/server 进入该文件夹, ls查看可以看到安装包
tar -zxvf jdk180_65targz 把JDK上传到linux系统中,然后执行tar解压 *** 作
6 vi /etc/profile 编辑/etc目录下的profile文件,也就是配置环境变量的配置文件。
7 打开文件后,按大写的G直接跳到文件的最后一行,然后按 i 进入编辑文件状态,在末尾添加这三行配置信息
export JAVA_HOME=/export/server/jdk180_65 配置一个JAVA_HOME的变量,值是jdk安装的目录,这个JAVA_HOME在下面两行会用到
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=:$JAVA_HOME/lib/dtjar:$JAVA_HOME/lib/toolsjar
编辑完毕,按ESC退出文件编辑状态,然后输入 指令 :wq (冒号+wq) 回车退出并保存该文件。
8 source /etc/profile 刷新profile文件到系统内存。
9 在任意目录下 输入 java -v 查看JDK版本
以上JDK安装完毕,接下来安装zookeeper。
10 和上传JDK一样,把zookeeper-3410targz文件放到/export/server目录下,并进行解压。(忘记了就去看第5步)
tar -zxvf zookeeper-3410targz
解压之后要进行相关的配置(软件安装无非就是解压+配置)
这里主要有两个重要要改的地方:1zookeeper服务启动后数据文件保存在哪里? 2 zookeeper通常是会集群化,也就是启动好几台zookeeper同时提供服务的,因此在每台zookeeper服务的配置文件里面都要配置上其它zookeeper服务的ip和端口。 第二点不懂的话直接看配置文件就好了。
11 首先实现第一点,创建zookeeper数据保存目录
mkdir /export/data/zkdata 创建zkdata文件夹,用于存在zookeeper数据(这条如果报错了,说明你应该先执行mkdir /export/data/创建data目录)
12 接下来进行配置
cd zookeeper/conf/ 配置文件放在该目录下,ll可以查看有哪些文件,如图
其中有个zoo_samplecfg 文件,这个文件是自带的一个模板,就是告诉你配置文件要照着这个样子去抄。。。
然后有个重要的东西就是:zookeeper启动的时候,默认是会读取该文件路径下配置文件zoocfg的,但是这里默认是i没有这个文件的。所以我们直接复制一个zoo_samplecfg 重命名为zoocfg就OK了。但是要进去做自己的相关配置改动。 复制文件命令是:
cp zoo_samplecfg zoocfg
13 vi zoocfg 开始编辑配置文件了,打开可以看见一堆你可能看不懂的东西,但是不重要因为大多数都是注释掉的东西。新手就别管那么多了。
这里我们主要要修改的是两个东西,哪两个? 前面黑体字有说过了:数据存放目录,集群中各个zookeeper服务的ip port。
同样的,按 i 进入编辑模式,找到dataDir=/tmp。。。这一行。 这一行就是设置数据存放的目录。 把它改成我们自己新建的目录:
dataDir=/export/data/zkdata/ 这样第一点就配置完了。
实际上到这里一台zookeeper服务已经安装完毕了,但是说过了,zookeeper是集群,所以得多搞几个服务器。我这里用了三台虚拟机,复制三台。ip分别是192168209128 / 192168209129 / 192168209130,这三台同样的安装JDK 和zookeeper。 重复前面的 *** 作就行,也可以直接复制虚拟机。
同样的在zoocfg里面,大写的G到最后一行。在末尾加上这三行配置:
server1=192168209128:2888:3888 #三台服务对应server 1 2 3 ,对应三个ip。 后面两个端口分别是 心跳端口2888 和选举端口。
server2=192168209129:2888:3888
server3=192168209130:2888:3888
然后保存退出就OK了。
13 最后一步: 就是给三台zookeeper服务设置id。在哪里设置呢?
就是在zookeeper保存文件的目录下创建一个/export/data/zkdata/myid 文件。 文件名不能乱写,就得是是这个,选举的时候很关键的。
我们有三台zookeeper server,每台的myid文件数字 不一样,你得进入三台服务器分别编辑这个文件。
第一台服务器,vi myid 编辑该文件,写入一个数字 1
第二台服务器,vi myid 编辑该文件,写入一个数字 2
第三台服务器,vi myid 编辑该文件,写入一个数字 3
14 最后你启动一下zookeeper试试安装成功了没 。
/export/server/zookeeper/bin/zkServersh start 启动zookeeper的指令。可以看到日志打印出来的是默认Using zoocfg这个配置文件。三台服务你都要启动,zookeeper会根据你配置的三个ip port去发送心跳,自动建立集群。 并且根据myid去选举哪个server是leader,哪个是follower。
这里呢就安装完毕了! 动手 *** 作也就14步是不是很简单。但是搞清楚原理才是最主要的。在公司核心系统的开发过程中用到了ZooKeeper,简称zk,用于搭建分布式核心环境,开发过程中也经常会遇到zk出现的问题,看了几篇博客了解和总结一下zk的基本原理。
ZooKeeper 主要有几个重要的概念,简单总结下:
ZooKeeper 中主要有三种角色:Leader、Follower、Observer
一个 ZooKeeper 集群同一时刻只会有一个 Leader,其他都是 Follower 或 Observer。
ZooKeeper 集群的所有机器通过一个 Leader 选举过程来选定一台被称为『Leader』的机器,Leader服务器为客户端提供读和写服务。
Follower 和 Observer 都能提供读服务,不能提供写服务。两者唯一的区别在于,Observer机器不参与 Leader 选举过程,也不参与写 *** 作的『过半写成功』策略,因此 Observer 可以在不影响写性能的情况下提升集群的读性能。
每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。
Session 是指客户端会话。在ZooKeeper 中,一个客户端连接是指客户端和 ZooKeeper 服务器之间的TCP长连接。
ZooKeeper 对外的服务端口默认是2181,客户端启动时,首先会与服务器建立一个TCP连接,从第一次连接建立开始,客户端会话的生命周期也开始了,通过这个连接,客户端能够通过心跳检测和服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能通过该连接接收来自服务器的 Watch 事件通知。
Session 的 SessionTimeout 值用来设置一个客户端会话的超时时间。当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在SessionTimeout 规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。
zookeeper的结构其实就是一个树形结构,leader就相当于其中的根结点,其它节点就相当于follow节点,每个节点都保留自己的内容。
zookeeper的节点分两类: 持久节点 和 临时节点
持久节点:所谓持久节点是指一旦这个 树形结构上被创建了,除非主动进行对树节点的移除 *** 作,否则这个 节点将一直保存在 ZooKeeper 上。
临时节点:临时节点的生命周期跟客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除。
有四种类型的znode:
1、PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
每个 节点除了存储数据内容之外,还存储了 节点本身的一些状态信息。用 get 命令可以同时获得某个 节点的内容和状态信息
在 ZooKeeper 中,version 属性是用来实现乐观锁机制中的『写入校验』的(保证分布式数据原子性 *** 作)。
Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
在ZooKeeper中,能改变ZooKeeper服务器状态的 *** 作称为事务 *** 作。一般包括数据节点创建与删除、数据内容更新和客户端会话创建与失效等 *** 作。对应每一个事务请求,为了保证事务的顺序一致性,ZooKeeper都会为其分配一个全局唯一的事务ID,用 ZXID 表示,通常是一个64位的数字。每一个 ZXID对应一次更新 *** 作,从这些 ZXID 中可以间接地识别出 ZooKeeper 处理这些事务 *** 作请求的全局顺序。
ZooKeeper允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去。该机制是 ZooKeeper 实现分布式协调服务的重要特性。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)